Search code examples
iosswiftsymbolicate

How to make sense of ios Crash Report from a device connected to Xcode?


I have a production app that passed the review but is crashing in production. I have connected the device to Xcode and replicated the crash and retrieved the crash log from from Xcode. The problem is, i do not understand the report. It makes no sense to me. It does not tell me for instance which line in my code where my app crashes. My question is, is this an example of an 'un-symbolicated' crash report? I do not know what a symbolicated and un-symbolicated report looks like before i even think about figuring out how to symbolicate the crash report....

according to the apple documentation(Apple Docuemtnation, under Introduction section), because I retrieved the crash report from xcode, it should be symbolicated automatically in a few seconds??? If this report is symbolicated it makes no sense to me. quite unhelpful.

 Incident Identifier: 8CAEC9EB-016F-42DC-AEB7-DE0EC136F33A
 CrashReporter Key:   26676d619a8d0376d5040dfe66f618918964f4d4
 Hardware Model:      iPhone7,1
 Process:             mapdocuments [427]
 Path:                
 /private/var/containers/Bundle/Application/AFB5062A-C2A8-4106- 8A28-5B0528918E2D/mapdocuments.app/mapdocuments
 Identifier:          com.xxxxx.mapdocuments
 Version:             13 (1)
 AppStoreTools:       10B63
 AppVariant:          1:iPhone7,1:12
 Code Type:           ARM-64 (Native)
 Role:                Non UI
 Parent Process:      launchd [1]
 Coalition:           com.xxxxx.mapdocuments [513]


 Date/Time:           2019-03-28 01:52:16.3749 +0000
 Launch Time:         2019-03-28 01:51:08.0437 +0000
 OS Version:          iPhone OS 12.1.4 (16D57)
 Baseband Version:    7.32.00
 Report Version:      104

 Exception Type:  EXC_CRASH (SIGABRT)
 Exception Codes: 0x0000000000000000, 0x0000000000000000
 Exception Note:  EXC_CORPSE_NOTIFY
 Triggered by Thread:  0

 Application Specific Information:
 abort() called

Last Exception Backtrace:
 0   CoreFoundation                 0x1a4531ea4 
 __exceptionPreprocess + 228
 1   libobjc.A.dylib                0x1a3701a50 
objc_exception_throw + 55
 2   CoreFoundation                 0x1a4438484 +[NSException 
 raise:format:] + 115
 3   StoreKit                       0x1b860fc14 -[SKPaymentQueue 
 addPayment:] + 675
 4   mapdocuments                   0x100e5c1e8 0x100dfc000 + 
 393704
 5   mapdocuments                   0x100e65ddc 0x100dfc000 + 
 433628
 6   UIKitCore                      0x1d16d2314 -[UIApplication 
 sendAction:to:from:forEvent:] + 95
 7   UIKitCore                      0x1d115fd54 -[UIControl 
 sendAction:to:forEvent:] + 79
 8   UIKitCore                      0x1d1160074 -[UIControl 
 _sendActionsForEvents:withEvent:] + 439
 9   UIKitCore                      0x1d115f074 -[UIControl 
 touchesEnded:withEvent:] + 567
 10  UIKitCore                      0x1d170ba6c -[UIWindow 
 _sendTouchesForEvent:] + 2471
 11  UIKitCore                      0x1d170ccd0 -[UIWindow 
 sendEvent:] + 3155
 12  UIKitCore                      0x1d16ebfcc -[UIApplication 
 sendEvent:] + 339
 13  UIKitCore                      0x1d17bae38 
 __dispatchPreprocessedEventFromEventQueue + 1619
 14  UIKitCore                      0x1d17bd830 
 __handleEventQueueInternal + 4739
 15  UIKitCore                      0x1d17b6320 
 __handleHIDEventFetcherDrain + 151
 16  CoreFoundation                 0x1a44c20e0 
 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 23
 17  CoreFoundation                 0x1a44c2060 
 __CFRunLoopDoSource0 + 87
 18  CoreFoundation                 0x1a44c1944 
 __CFRunLoopDoSources0 + 175
 19  CoreFoundation                 0x1a44bc810 __CFRunLoopRun + 
 1039
 20  CoreFoundation                 0x1a44bc0e0 
 CFRunLoopRunSpecific + 435
 21  GraphicsServices               0x1a6735584 GSEventRunModal + 
 99
 22  UIKitCore                      0x1d16d0c00 UIApplicationMain + 
 211
 23  mapdocuments                   0x100e02884 0x100dfc000 + 26756
 24  libdyld.dylib                  0x1a3f7abb4 start + 3


 Thread 0 name:  Dispatch queue: com.apple.main-thread
 Thread 0 Crashed:
 0   libsystem_kernel.dylib         0x00000001a40c7104 
 __pthread_kill + 8
 1   libsystem_pthread.dylib        0x00000001a4143020 
 pthread_kill$VARIANT$mp + 380
 2   libsystem_c.dylib              0x00000001a401ed78 abort + 140
 3   libc++abi.dylib                0x00000001a36e8f78 
 __cxa_bad_cast + 0
 4   libc++abi.dylib                0x00000001a36e9120 
 default_unexpected_handler+ 8480 () + 0
 5   libobjc.A.dylib                0x00000001a3701e58 
 _objc_terminate+ 28248 () + 124
 6   libc++abi.dylib                0x00000001a36f50fc 
 std::__terminate(void (*)+ 57596 ()) + 16
 7   libc++abi.dylib                0x00000001a36f4cec _ 
 _cxa_rethrow + 144
 8   libobjc.A.dylib                0x00000001a3701c20 
 objc_exception_rethrow + 44
 9   CoreFoundation                 0x00000001a44bc14c 
 CFRunLoopRunSpecific + 544
 10  GraphicsServices               0x00000001a6735584 
 GSEventRunModal + 100
  11  UIKitCore                         0x00000001d16d0c00 
 UIApplicationMain + 212
 12  mapdocuments                   0x0000000100e02884 0x100dfc000 
 + 26756
 13  libdyld.dylib                  0x00000001a3f7abb4 start + 4

as viewed in Xode:


Solution

  • Yes, this is an unsymbolicated crash log. The problem is that a call to [-SKPaymentQueue addPayment:] passed a bad pointer for the payment. Here's what the log is telling you:

    Exception Type: EXC_CRASH (SIGABRT)

    and

    Application Specific Information:

    abort() called

    These indicate that some piece of code explicitly called a function to abort running the application. This happens because the OS detected that some bad data was given to a function and it determined it couldn't continue with the bad data, so its only choice was to abort.

    The backtrace shows which functions were called to get to the abort:

    Last Exception Backtrace:
     0   CoreFoundation                 0x1a4531ea4 __exceptionPreprocess + 228
     1   libobjc.A.dylib                0x1a3701a50 objc_exception_throw + 55
     2   CoreFoundation                 0x1a4438484 +[NSException raise:format:] + 115
     3   StoreKit                       0x1b860fc14 -[SKPaymentQueue addPayment:] + 675
     4   mapdocuments                   0x100e5c1e8 0x100dfc000 + 393704
     5   mapdocuments                   0x100e65ddc 0x100dfc000 + 433628
    

    They are in reverse order of calling. So some code in the mapdocuments app or library called into the StoreKit framework, specifically the -[SKPaymentQueue addPayment:] method. That method saw that the value passed in was invalid and raised an exception. The exception was not caught using an @try/@catch block, so the OS aborted execution.

    Unfortunately, because symbols were not provided, we don't know the exact line that called -addPayment: with bad data. However, if you built the app, you should have the symbols for it, and I think it's possible to symbolicate a crashlog using those. I have not done it myself, though.