Xcode 6.3.1: iOS app runs but won't archive - xcode

On Xcode 6.3.1 using a multi-project workspace - two Swift frameworks, the app itself, and Cocoapods. I can successfully build and run the app both on the simulator as well as my iPhones, but when I try to Archive it, I get:
Command failed due to signal: Segmentation fault: 11
This error appears to happen on two of my view controller files, but I have no idea what is wrong with them. Tried building from command line. Fruitless. I've also messed with my build settings, as has been suggested in other questions, to no avail.
Has anyone experienced the same issue? Can't submit anything to app store or make a test IPA :( Here is the stack trace produced:
0 swift 0x0000000109d14a18 llvm::sys::PrintStackTrace(__sFILE*) + 40
1 swift 0x0000000109d14ef4 SignalHandler(int) + 452
2 libsystem_platform.dylib 0x00007fff8fbb0f1a _sigtramp + 26
3 libsystem_platform.dylib 000000000000000000 _sigtramp + 1883566336
4 swift 0x00000001097f0d85 (anonymous namespace)::EmitDFDiagnostics::run() + 469
5 swift 0x00000001097fa55e swift::SILPassManager::runFunctionPasses(llvm::ArrayRef<swift::SILFunctionTransform*>) + 1310
6 swift 0x00000001097fb6a7 swift::SILPassManager::runOneIteration() + 2359
7 swift 0x00000001097fbe1c swift::SILPassManager::run() + 1212
8 swift 0x00000001097f8725 swift::runSILDiagnosticPasses(swift::SILModule&) + 597
9 swift 0x00000001095fdd6f frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 4319
10 swift 0x00000001095fcae6 main + 1814
11 libdyld.dylib 0x00007fff8ff895c9 start + 1

I had the exact same problem. I discovered the thing that was keeping the app from successfully archiving was the fact that i used the find() function to find the index of an item in an array. That function is provided by Swift, but when used in my actual codebase it wouldn't archive. I'm assuming there may be a couple stock functions that are preventing archiving. And keep in mind, these functions build and can run on the simulator, but they will not archive.

Related

Intermittently cannot run unit tests in XCode 8

I upgraded to XCode 8, and I am going through hell of being able to run my tests sometimes... For example, I just was testing some code, and was able to run my tests 3 times in a row... and then the 4th time I got:
dyld: could not load inserted library 'PLATFORMS/iPhoneOS.platform/Developer/Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection' because image not found
*** If you believe this error represents a bug, please attach the log file at /Users/patrick/Library/Developer/Xcode/DerivedData/MyApp-hjfppqmgxqrprucknvwtakynpqxs/Logs/Test/2B6C2EAE-5C13-40C9-BACE-3A00AA74F3EF/Session-UnitTests-2016-09-20_124123-gk3pW0.log
I have rebooted my iOS device, rebooted my computer, deleted derrived data, etc... It will no longer run tests. ARRRGH!!!!
UPDATE
I should mention, I am trying to run tests on my iPad, I can't run tests on the simulator because I have too much code having to do with NEON intrinsics, and so the simulator wont run.
But what does seem to work is, when this happens, switch to build tests on my iPhone, then it when it builds, it just says "running tests" and the spinner spins forever, but no tests are actually running... I can actually tap on my app and interact with it, which is usually not the behavior I get when running tests... Anyway I then stopped the build, switched back to my iPad and now tests run again.
I get this error consistently with XCode 8.0 running on my iPad (Version 10.0.2 (14A456)) when I run test code that causes an uncaught exception in the code under test. There may be other examples, but it happens any time the code under test fails catastrophically.
When the unit test fails with an exception, XCode does not recover properly.
I believe this is a problem with XCode; this answer provides a workaround. The unit test will fail at the exception, and subsequent runs produce the 'image not found' error.
The simplest recovery I've found is the following:
Set device target to Generic iOS Device
Disconnect my iPad
Reboot the iPad
Connect everything back together
Here is an example failure that demonstrates the problem;
Notice that the core issue in this example is that I have written a bad unit test; I'm passing a nil parameter to a method that is subsequently used to try adding a nil object to a dictionary.
Update: for the sake of accuracy, the issue was that I was passing an immutable dictionary as a parameter when a mutable one was expected, thus producing the 'unrecognized selector' error. In any case, the exception is what causes XCode to behave badly.
Assertions: failed: caught "NSInvalidArgumentException", "-[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0x1818f200"
(
0 CoreFoundation 0x1dd89e1f <redacted> + 154
1 libobjc.A.dylib 0x1cfef077 objc_exception_throw + 38
2 CoreFoundation 0x1dd8f515 <redacted> + 0
3 CoreFoundation 0x1dd8d589 <redacted> + 700
4 CoreFoundation 0x1dcb2f08 _CF_forwarding_prep_0 + 24
5 tDefense 0x000cd299 +[PlayingPiece addPlayingPiece:atLocation:onBoard:] + 326
6 tDefense 0x000cd5ad +[PlayingPiece addNewPiece:atLocation:onBoard:] + 154
7 tDefenseTests 0x00410777 -[PlayFieldTests testGetNeighbors] + 4594
8 CoreFoundation 0x1dd8e864 <redacted> + 68
9 CoreFoundation 0x1dcaf349 <redacted> + 294
10 XCTest 0x00307de5 __24-[XCTestCase invokeTest]_block_invoke_2 + 472
11 XCTest 0x0033b0dd -[XCTestContext performInScope:] + 312
12 XCTest 0x00307c07 -[XCTestCase invokeTest] + 296
13 XCTest 0x00308439 -[XCTestCase performTest:] + 560
14 XCTest 0x0030578d -[XCTestSuite performTest:] + 520
15 XCTest 0x0030578d -[XCTestSuite performTest:] + 520
16 XCTest 0x0030578d -[XCTestSuite performTest:] + 520
17 XCTest 0x002f1d55 __25-[XCTestDriver _runSuite]_block_invoke + 52
18 XCTest 0x00312325 -[XCTestObservationCenter _observeTestExecutionForBlock:] + 628
19 XCTest 0x002f1bed -[XCTestDriver _runSuite] + 512
20 XCTest 0x002f29b7 -[XCTestDriver _checkForTestManager] + 300
21 XCTest 0x0033c55b _XCTestMain + 690
22 CoreFoundation 0x1dd45bc3 <redacted> + 10
23 CoreFoundation 0x1dd455a7 <redacted> + 230
24 CoreFoundation 0x1dd43a61 <redacted> + 752
25 CoreFoundation 0x1dc93073 CFRunLoopRunSpecific + 486
26 CoreFoundation 0x1dc92e81 CFRunLoopRunInMode + 104
27 GraphicsServices 0x1f43bbfd GSEventRunModal + 156
28 UIKit 0x22e34acf <redacted> + 574
29 UIKit 0x22e2f201 UIApplicationMain + 150
30 tDefense 0x000d690f main + 106
31 libdyld.dylib 0x1d45e50b <redacted> + 2
)
File: <unknown>
I was having exactly the same problem after upgrading to Xcode 8 / Swift 2.3. One of deleting derived data, rebooting the phone and closing and re-opening Xcode just fixed it.

safari plugin crashing on NP_Initialize when built on xulrunner sdk

I am trying to build NPAPI plugin for safari and have been trying to run the simple NPAPI plugin example from https://github.com/mikma/npsimple on Safari on Mac.
The plugin can use npapi library from WEBKIT_DARWIN_SDK or from XULRUNNER_SDK (downloaded from mozilla.org for mac os).
The plugin works as expected by using WEBKIT_DARWIN_SDK but since it conflicts with my other libraries I can't use it. Now the only way left is to use XULRUNNER_SDK but using that results in a crash on NP_Initialize. Since this is the most basic application using NPAPI it is expected to work ( everything is same expect the fact that internal implementation of webkit and xulrunner could be different).
Am I missing something here?
Pasting initial few lines from the log
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 net.webvm 0x00000001004f8228 NP_GetEntryPoints + 24
1 net.webvm 0x00000001004f82b3 NP_Initialize + 67
2 com.apple.WebKit.PluginHost 0x00000001cfb65188 0x1cfb52000 + 78216
3 com.apple.WebKit.PluginHost 0x00000001cfb599e1 0x1cfb52000 + 31201
4 com.apple.WebKit.PluginHost 0x00000001cfb54ad3 0x1cfb52000 + 10963
5 com.apple.CoreFoundation 0x00007fff84fe9a49 __CFRunLoopDoBlocks + 297
6 com.apple.CoreFoundation 0x00007fff84fabe76 __CFRunLoopRun +
You might want to try starting from the npapi-sdk Mac example, which is both simpler than npsimple and more up to date.

Can I set breakpoints in Cocoa framework code?

Should I be able to set breakpoints inside the Cocoa framework itself?
I've been seeing various crashes in my Mac OS X application, sometimes randomly. Here's part of an example call stack from Xcode:
0 - 0x98ed0e20 in __CFRunLoopRun
1 - 0x98ece464 in CFRunLoopRunSpecific
2 - 0x98ece291 in CFRunLoopRunInMode
3 - 0x96a90004 in RunCurrentEventLoopInMode
4 - 0x96a8fdbb in ReceiveNextEventCommon
5 - 0x96a8fc40 in BlockUntilNextEventMatchingListInMode
6 - 0x925b078d in _DPSNextEvent
7 - 0x925affce in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]
8 - 0x92572247 in -[NSApplication run]
9 - 0x021f009c in QEventDispatcherMac::processEvents at qeventdispatcher_mac.mm:591
10 - 0x01e47742 in QEventLoop::processEvents at qeventloop.cpp:149
11 - 0x01e4799e in QEventLoop::exec at qeventloop.cpp:201
12 - 0x01e49a33 in QCoreApplication::exec at qcoreapplication.cpp:1003
13 - 0x02254c54 in QApplication::exec at qapplication.cpp:3581
When I click on lines 0 - 8, Xcode displays disassembly.
I've changed my Xcode project so that it uses the _debug suffix when loading frameworks. This allows me to step through the Qt code in lines 9 - 13, but line 8 is called at startup and crashes can happen at any time after that.
If I can't set breakpoints, are there any tools that might help me debug problems like this?
Thanks in advance.
You can set up a breakpoint so it breaks on code outside your own. But you will not be able to see the source because you don't have the source code.
In xCode (3.x.x)
"Run->Manage Breakpoints->Add Symbolic Breakpoint"
In XCode 4 you can create a symbolic breakpoint with
Product->Debug->Create Symbolic Breakpoint...
In XCode 5
Debug->Breakpoints->Create Symbolic Breakpoint

Interface Builder 3.0 crashes on startup

I just bought a new Mac and am running Mac OS X 10.6.4 and trying to run Interface Builder 3.2.4 and when I do it consistently crashes with the following error message:
Assertion Message: Unimplemented error handling: You don’t have permission to save the file “Library” in the folder “Interface Builder 3.0”.
Thread 0 Asserted:
0 InterfaceBuilderKit 0x000000010011d74b -[IBLibraryController libraryStoragePath] + 419
1 InterfaceBuilderKit 0x000000010011d40c -[IBLibraryController userObjectsStoragePath] + 33
2 InterfaceBuilderKit 0x000000010011c8e8 -[IBLibraryController loadUserAssets] + 41
3 InterfaceBuilderKit 0x000000010011c83d -[IBLibraryController restoreUserPreferences] + 27
4 Interface Builder 0x0000000100002396
5 AppKit 0x00007fff8000d798 -[NSApplication run] + 80
6 AppKit 0x00007fff800065f8 NSApplicationMain + 364
7 Interface Builder 0x0000000100001c44
8 Interface Builder 0x0000000000000002
Does anyone have any thoughts on this? It seems like it would be easy enough to try and modify the permissions of a folder, but I have no clue where to find the folder “Interface Builder 3.0”.
I feel dumb now, but hopefully this will help someone along the way. I found the "Interface Builder 3.0" folder in ~/Library/Application Support. My user account only had "Read" access so I changed the permissions to "Read & Write".

What's the dSYM and how to use it? (iOS SDK)

Sometimes the compiler produces .dSYM files. I guess this is a debugging related file, but I don't know what it is, and how to use it.
What is a .dSYM? How do I use it?
dSYM files store the debug symbols for your app
Services like Crashlytics use it to replace the symbols in the crash logs with the appropriate methods names so it will be readable and will make sense.
The benefit of using the dSYM is that you don't need to ship your App with its symbols making it harder to reverse engineer it and also reduce your binary size
In order to use to symbolicate the crash log you need to drag the crash log into the device's device logs in the organizer of the machine that compiled the app binary (a machine that stores the dSYM)
If you have the dSYM but don't have the machine the compiled the app binary follow the instructions in this link in order to install the dSYM into the machine.
There is a mac app that helps you symbolicate a crash log in case you need to do it yourself.
For more information please see apple technical note TN2151
Xcode Debugging Symbols(dSYM)
dSYM it is a Bundle(e.g F49088168M.app.dSYM) which contains a mapping information and with which you can, for example, decode a stack-trace into readable format.
structure:
For example a crash log looks like:
//before
0 libswiftCore.dylib 0x000000018f3c9380 0x18f394000 + 217984
1 libswiftCore.dylib 0x000000018f3c9380 0x18f394000 + 217984
2 libswiftCore.dylib 0x000000018f3c8844 0x18f394000 + 215108
3 libswiftCore.dylib 0x000000018f3a74e0 0x18f394000 + 79072
4 libswiftCore.dylib 0x000000018f3ab0d8 0x18f394000 + 94424
5 F49088168M 0x00000001045ac750 0x104590000 + 116560
6 F49088168M 0x00000001045b7904 0x104590000 + 162052
7 F49088168M 0x00000001045b897c 0x104590000 + 166268
8 F49088168M 0x000000010459d914 0x104590000 + 55572
9 F49088168M 0x00000001045a0e70 0x104590000 + 69232
10 F49088168M 0x00000001045a0f4c 0x104590000 + 69452
dSYM in action
//after Symbolicating(dSYM is used)
0 libswiftCore.dylib 0x000000018f3c9380 closure #1 in closure #1 in closure #1 in _assertionFailure+ 217984 (_:_:file:line:flags:) + 452
1 libswiftCore.dylib 0x000000018f3c9380 closure #1 in closure #1 in closure #1 in _assertionFailure+ 217984 (_:_:file:line:flags:) + 452
2 libswiftCore.dylib 0x000000018f3c8844 _assertionFailure+ 215108 (_:_:file:line:flags:) + 468
3 libswiftCore.dylib 0x000000018f3a74e0 _ArrayBuffer._checkInoutAndNativeTypeCheckedBounds+ 79072 (_:wasNativeTypeChecked:) + 208
4 libswiftCore.dylib 0x000000018f3ab0d8 Array.subscript.getter + 84
5 F49088168M 0x00000001045ac750 static ELM327ResponseManager.getResponse(responseStr:obd2Protocol:) + 116560 (ELM327ResponseManager.swift:27)
6 F49088168M 0x00000001045b7904 ELM327Client.dataInput(_:characteristicUuidStr:) + 162052 (ELM327Client.swift:56)
7 F49088168M 0x00000001045b897c protocol witness for BLEClientInputPort.dataInput(_:characteristicUuidStr:) in conformance ELM327Client + 166268 (<compiler-generated>:0)
8 F49088168M 0x000000010459d914 BLEConnection.peripheralDataReceived(data:characteristicUuidStr:) + 55572 (BLEConnection.swift:124)
9 F49088168M 0x00000001045a0e70 BLEConnection.peripheral(_:didUpdateValueFor:error:) + 69232 (BLEConnection.swift:293)
10 F49088168M 0x00000001045a0f4c #objc BLEConnection.peripheral(_:didUpdateValueFor:error:) + 69452 (<compiler-generated>:0)
By default dSYM is generated by default for a release version.
You can check it:
Build Settings -> Generate Debug Symbols(GCC_GENERATE_DEBUGGING_SYMBOLS) -> Yes
Build Settings -> Debug Information Format(DEBUG_INFORMATION_FORMAT) -> DWARF with dSYM File
The result location you can find in Products folder
To generate dSYM file manually from .app using dsymutil
dsymutil F49088168M.app/F49088168M -o F49088168M.app.dSYM
To symbolicate crash using symbolicatecrash
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/Current/Resources/symbolicatecrash "<path>/F49088168M-2020-06-04-212904.crash" "<path>/F49088168M.app.dSYM" > symbolicated.crash
To open dSYM manually using dwarfdump
dwarfdump --arch arm64 --debug-pubtypes F49088168M.app.dSYM
result looks like:
0x00000065 "PeripheralLogView"
0x000005cc "BLEConnection"
0x000005da "BLEPeripheral"
0x000005e9 "ELM327Client"
*Your .app's dSYM should include all included(framework) dSYMs
[dSYM location]
[.bcsymbolmap]
[Vocabulary]

Resources