App crashes only at App Store Review, not on Sim or Hardware

I recently updated a stable app which has been in the Store for over a year and well over a thousand downloads. Last updated 6/19. All fine.

This week I added a unique UserID to my Flurry start up in App Delegate and few extra flurry event calls in various view controllers to help track rare crashes (maybe 3 crashes reported in a year). App runs fine in Xcode Sim on a variety of devices, and in my real hardware both in debug and untethered. GIT compare confirms no other changes to codebase or XIBs, etc. Last compile for store on Xcode 10.x, now 11.1


App Store review fails with crash on launch, they tried three times and sent crash logs. I removed some of the mods (but not yet the UserID in AppDelegate) and resubmitted: same result. First time I sent it in the crash report said they tested on a 3rd Gen iPad, so I asked them to try the second time on an iPhone, the next set of crash reports had the device code as ***! They ran 13.1.2, I tested on 13.1.3 and on 12.1.4 all OK


Here's the problem(s)

1) I dont see how to symbolicate the crash reports. To do so, Xcode requires the App's binary and dSYM (I have those), I dont have the Flurry dSYM, and OS Symbols for the hardware/OS where the test ran. I dont have a 3rd gen iPad (iPad11,3) to plug in and get the symbols for Xcode. Is there an alternative path in this circumstance.


2) I'm not sure that the symbols would help here anyway since it looks like the crash is deep in iOS frameworks (maybe abi, see below) after being called from my Main. I know that these kinds of launch crashes frequently occur when storyboards have a defect, but I cant see one and the app runs fine locally on phones and old iPads. What would be my next steps when I can't replicate the crash (aside from removing the Flurry set UserID!)?



{"app_name":"QueensDB","timestamp":"2019-10-30 15:28:10.12 -0700","app_version":"1.7","slice_uuid":"2133ecf9-943d-380e-9d2b-eb881e02a76f","adam_id":1369301260,"build_version":"2","bundleID":"com.Aviametrix.QueensEgypt","share_with_app_devs":true,"is_first_party":false,"bug_type":"109","os_version":"iPhone OS 13.1.2 (17A860)","incident_id":"BB1B0B65-66BF-40B7-9017-7F8B14B57F58","name":"QueensDB"}
Incident Identifier: BB1B0B65-66BF-40B7-9017-7F8B14B57F58
CrashReporter Key:   1f7448b682620a373ff01cf8ae95a9238488a987
Hardware Model:      iPad11,3
Process:             QueensDB [90772]
Path:                /private/var/containers/Bundle/Application/F72C50C8-86EB-4404-A689-C5F9CB2651DF/QueensDB.app/QueensDB
Identifier:          com.Aviametrix.QueensEgypt
Version:             2 (1.7)
AppStoreTools:       11A1002b
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.Aviametrix.QueensEgypt [2469]




Date/Time:           2019-10-30 15:28:09.6488 -0700
Launch Time:         2019-10-30 15:28:09.5818 -0700
OS Version:          iPhone OS 13.1.2 (17A860)
Release Type:        User
Baseband Version:    n/a
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:
(0x184f6bc30 0x184c860c8 0x184e5b3ac 0x18897c810 0x18897cb2c 0x18855b700 0x18855b934 0x1884f6428 0x1889c59bc 0x1049975b8 0x104993ab4 0x188c935d8 0x18855b700 0x18855b934 0x1884f6428 0x188c928cc 0x1889c5b74 0x188920b94 0x188c935d8 0x18855b700 0x1884f6428 0x188c97784 0x18855b700 0x18855b934 0x1884f6428 0x188c926b0 0x188c952e8 0x18915a7d0 0x18915a660 0x1890007c4 0x189000d3c 0x188fff46c 0x1887a7710 0x188c537e8 0x1887a8248 0x1887a7c78 0x1887a8064 0x1887a78e8 0x1887ac098 0x188c6d214 0x188b80e90 0x188c6d1cc 0x1887abdb0 0x188c6d0b4 0x1887abc0c 0x188617630 0x1886160f4 0x188617360 0x188ffd91c 0x188ba2d7c 0x18a0d5014 0x18a0fbbd0 0x18a0e00f8 0x18a0fb864 0x184c1300c 0x184c15d50 0x18a122384 0x18a122030 0x18a12259c 0x184ee7260 0x184ee71b4 0x184ee6920 0x184ee17ec 0x184ee1098 0x18f04b534 0x1890017ac 0x10494a1c8 0x184d60f30)


Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib         0x0000000184d56ef4 0x184d31000 + 155380
1   libsystem_pthread.dylib       0x0000000184c77d1c 0x184c75000 + 11548
2   libsystem_c.dylib             0x0000000184c07a54 0x184b91000 + 485972
3   libc++abi.dylib               0x0000000184d1e3c8 0x184d1d000 + 5064
4   libc++abi.dylib               0x0000000184d1e5c0 0x184d1d000 + 5568
5   libobjc.A.dylib               0x0000000184c863a8 0x184c80000 + 25512
6   libc++abi.dylib               0x0000000184d2b634 0x184d1d000 + 58932
7   libc++abi.dylib               0x0000000184d2b5c0 0x184d1d000 + 58816
8   libdispatch.dylib             0x0000000184c13020 0x184c10000 + 12320
9   libdispatch.dylib             0x0000000184c15d50 0x184c10000 + 23888
10  FrontBoardServices             0x000000018a122384 0x18a0c8000 + 369540
11  FrontBoardServices             0x000000018a122030 0x18a0c8000 + 368688
12  FrontBoardServices             0x000000018a12259c 0x18a0c8000 + 370076
13  CoreFoundation                 0x0000000184ee7260 0x184e39000 + 713312
14  CoreFoundation                 0x0000000184ee71b4 0x184e39000 + 713140
15  CoreFoundation                 0x0000000184ee6920 0x184e39000 + 710944
16  CoreFoundation                 0x0000000184ee17ec 0x184e39000 + 690156
17  CoreFoundation                 0x0000000184ee1098 0x184e39000 + 688280
18  GraphicsServices               0x000000018f04b534 0x18f048000 + 13620
19  UIKitCore                     0x00000001890017ac 0x1885d1000 + 10684332
20  QueensDB                       0x000000010494a1c8 0x104944000 + 25032
21  libdyld.dylib                 0x0000000184d60f30 0x184d60000 + 3888


Thread 1:
0   libsystem_pthread.dylib       0x0000000184c7ec70 0x184c75000 + 40048

Accepted Reply

Why does the Store Review catch this, but the current xcode and ios hardware does not.

In order to reproduce this locally, you need to test the thinned variant of your app. Please see this other post for more info.

Replies

I'm not sure that the symbols would help here anyway since it looks like the crash is deep in iOS frameworks (maybe abi, see below) after being called from my Main.

You can misreading the crash report. The backtrace of the crashing thread indicates that your app has crashed due to an underhandled language exception, which means that you need to look at the Last Exception Backtrace section. If you were to symbolicate your log, you’d get meaningful info from that.

I dont have a 3rd gen iPad (iPad11,3) to plug in and get the symbols for Xcode.

You don’t need that specific hardware, you need a machine that runs the same OS build as that hardware. It’s hard to explain the exact criteria here but, if you look at the

.ipsw
files we ship when we seed a new iOS beta release [1], you’ll find that there’s relatively few of them, and many of them are shared by multiple hardware releases. If you can find any iPad running 13.1.2 that shares that
.ipsw
, you’ll get the libraries you need.

The way to know for sure is to look at the Binary Images section of your crash report. It’s the UUIDs associated with each image that need to match up.

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"

[1] Unfortunately we not currently seeding an iOS beta release, so I can’t give you a concrete example.

Hey Quinn!

You da Man!


Many thanks for responding to this puzzle!

I am trying to find a pad which can run 13.1 out here.

In the mean time, the Store review says crash on launch and the stack trace never returns to my app. I could well be wrong here

but I was figuring it was happening in a load resources phase or the App delegate. I reverted my storyboards and App Delegate

back to the last successful App Store review. File compare only shows IB toolchain/plugin version differences and some Rect size

changes, but the App still dies for the Reviewer and not locally on available hardware (iPad with iOS 12.1.4, or various phones) or sim'd hardware matching the Store's crashlog. Im going to try reverting Xcode to v10 and try that while waiting to find a new iPad.

Any other thoughts? It just seems very odd that I can't fail the app locally.



update: The app store review finally tested on an iPhone from which I could pull an appropriate dSYM! So, following Quinn's advise to look

at the last exception trace we see that this problem is that my use of a deprecated UISearchController got snagged. It is marked in xcode docs as deprecated but not as dead. This is fixable.


New question: Why does the Store Review catch this, but the current xcode and ios hardware does not. It there a strictness setting I should know about?


Last Exception Backtrace:
0   CoreFoundation                 0x1bd14fab0 __exceptionPreprocess + 224
1   libobjc.A.dylib               0x1bce69028 objc_exception_throw + 59
2   CoreFoundation                 0x1bd03f2fc +[NSException raise:format:] + 111
3   UIKitCore                     0x1c0ba3c2c UISearchDisplayControllerNoLongerSupported + 215
4   UIKitCore                     0x1c0ba3f48 -[UISearchDisplayController initWithCoder:] + 87
5   UIFoundation                   0x1c077d300 UINibDecoderDecodeObjectForValue + 731
6   UIFoundation                   0x1c077d534 UINibDecoderDecodeObjectForValue + 1295
7   UIFoundation                   0x1c0717fe4 -[UINibDecoder decodeObjectForKey:] + 319
8   UIKitCore                     0x1c0bed0a8 -[UIViewController initWithCoder:] + 1039
9   QueensDB                       0x100d4b658 specialized mainViewController.init(coder:) + 341592 (:0)
10  QueensDB                       0x100d47b54 @objc mainViewController.init(coder:) + 326484 (:15)
11  UIKitCore                     0x1c0ebe108 -[UIClassSwapper initWithCoder:] + 2363
12  UIFoundation                   0x1c077d300 UINibDecoderDecodeObjectForValue + 731
13  UIFoundation                   0x1c077d534 UINibDecoderDecodeObjectForValue + 1295
14  UIFoundation                   0x1c0717fe4 -[UINibDecoder decodeObjectForKey:] + 319
15  UIKitCore                     0x1c0ebd3fc -[NSCoder+ 7119868 (UIIBDependencyInjectionInternal) _decodeObjectsAndTrackChildViewControllerIndexWithParent:forKey:] + 319
16  UIKitCore                     0x1c0bed260 -[UIViewController initWithCoder:] + 1479
17  UIKitCore                     0x1c0b47698 -[UINavigationController initWithCoder:] + 75
18  UIKitCore                     0x1c0ebe108 -[UIClassSwapper initWithCoder:] + 2363
19  UIFoundation                   0x1c077d300 UINibDecoderDecodeObjectForValue + 731
20  UIFoundation                   0x1c0717fe4 -[UINibDecoder decodeObjectForKey:] + 319
21  UIKitCore                     0x1c0ec22b4 -[UIRuntimeConnection initWithCoder:] + 131
22  UIFoundation                   0x1c077d300 UINibDecoderDecodeObjectForValue + 731
23  UIFoundation                   0x1c077d534 UINibDecoderDecodeObjectForValue + 1295
24  UIFoundation                   0x1c0717fe4 -[UINibDecoder decodeObjectForKey:] + 319
25  UIKitCore                     0x1c0ebd1e0 -[NSCoder+ 7119328 (UIIBDependencyInjectionInternal) _decodeObjectsWithSourceSegueTemplate:creator:sender:forKey:] + 491
26  UIKitCore                     0x1c0ebfe18 -[UINib instantiateWithOwner:options:] + 1115
27  UIKitCore                     0x1c1392054 -[UIStoryboard __reallyInstantiateViewControllerWithIdentifier:creator:storyboardSegueTemplate:sender:] + 291
28  UIKitCore                     0x1c1391ee4 -[UIStoryboard _instantiateViewControllerWithIdentifier:creator:storyboardSegueTemplate:sender:] + 127
29  UIKitCore                     0x1c12346b0 -[UIApplication _loadMainStoryboardFileNamed:bundle:] + 183
30  UIKitCore                     0x1c1234c28 -[UIApplication _loadMainInterfaceFile] + 275
31  UIKitCore                     0x1c1233358 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1059
32  UIKitCore                     0x1c09cd618 -[_UISceneLifecycleMultiplexer completeApplicationLaunchWithFBSScene:transitionContext:] + 151
33  UIKitCore                     0x1c0e7de08 _UIScenePerformActionsWithLifecycleActionMask + 111
34  UIKitCore                     0x1c09ce150 __101-[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:]_block_invoke + 211
35  UIKitCore                     0x1c09cdb80 -[_UISceneLifecycleMultiplexer _performBlock:withApplicationOfDeactivationReasons:fromReasons:] + 303
36  UIKitCore                     0x1c09cdf6c -[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:] + 751
37  UIKitCore                     0x1c09cd7f0 -[_UISceneLifecycleMultiplexer uiScene:transitionedFromState:withTransitionContext:] + 339
38  UIKitCore                     0x1c09d1fa0 __186-[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]_block_invoke_2 + 195
39  UIKitCore                     0x1c0e97c8c ___UISceneSettingsDiffActionPerformChangesWithTransitionContext_block_invoke + 27
40  UIKitCore                     0x1c0daaf44 +[BSAnimationSettings+ 5996356 (UIKit) tryAnimatingWithSettings:actions:completion:] + 867
41  UIKitCore                     0x1c0e97c44 _UISceneSettingsDiffActionPerformChangesWithTransitionContext + 259
42  UIKitCore                     0x1c09d1cb8 __186-[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]_block_invoke + 151
43  UIKitCore                     0x1c0e97b2c _UISceneSettingsDiffActionPerformActionsWithDelayForTransitionContext + 107
44  UIKitCore                     0x1c09d1b14 -[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:] + 391
45  UIKitCore                     0x1c0839c38 __64-[UIScene scene:didUpdateWithDiff:transitionContext:completion:]_block_invoke + 639
46  UIKitCore                     0x1c08386fc -[UIScene _emitSceneSettingsUpdateResponseForCompletion:afterSceneUpdateWork:] + 255
47  UIKitCore                     0x1c0839968 -[UIScene scene:didUpdateWithDiff:transitionContext:completion:] + 235
48  UIKitCore                     0x1c1231808 -[UIApplication workspace:didCreateScene:withTransitionContext:comple
49  UIKitCore                     0x1c0dcce44 -[UIApplicationSceneClientAgent scene:didInitializeWithEvent:completion:] + 375
50  FrontBoardServices             0x1c2319ec0 -[FBSSceneImpl _callOutQueue_agent_didCreateWithTransitionContext:completion:] +

So 451
51  FrontBoardServices             0x1c2340b50 __86-[FBSWorkspaceScenesClient sceneID:createWithParameters:transitionContext:completion:]_block_invoke.168 + 115
52  FrontBoardServices             0x1c2324fa4 -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] + 239
53  FrontBoardServices             0x1c23407e4 __86-[FBSWorkspaceScenesClient sceneID:createWithParameters:transitionContext:completion:]_block_invoke + 343
54  libdispatch.dylib             0x1bcdf5fd8 _dispatch_client_callout + 19
55  libdispatch.dylib             0x1bcdf8d1c _dispatch_block_invoke_direct + 263
56  FrontBoardServices             0x1c2367304 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 47
57  FrontBoardServices             0x1c2366fb0 -[FBSSerialQueue _queue_performNextIfPossible] + 431
58  FrontBoardServices             0x1c236751c -[FBSSerialQueue _performNextFromRunLoopSource] + 31
59  CoreFoundation                 0x1bd0cb24c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 27
60  CoreFoundation                 0x1bd0cb1a0 __CFRunLoopDoSource0 + 83
61  CoreFoundation                 0x1bd0ca90c __CFRunLoopDoSources0 + 183
62  CoreFoundation                 0x1bd0c57d8 __CFRunLoopRun + 1067
63  CoreFoundation                 0x1bd0c5084 CFRunLoopRunSpecific + 479
64  GraphicsServices               0x1c7313534 GSEventRunModal + 107
65  UIKitCore                     0x1c1235698 UIApplicationMain + 1939
66  QueensDB                       0x100cfe4fc main + 25852 (Queen.swift:13)
67  libdyld.dylib                 0x1bcf44e18 start + 3

Why does the Store Review catch this, but the current xcode and ios hardware does not.

I’m hardly a UIKit expert but my understanding is that you’ll trip over this assert if:

  • You’re using

    UISearchDisplayController
    .
  • You’re linked with the iOS 13 or later SDK.

  • You’re running on iOS 13 or later.

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"

Why does the Store Review catch this, but the current xcode and ios hardware does not.

In order to reproduce this locally, you need to test the thinned variant of your app. Please see this other post for more info.