我从我的实时应用程序获得了相当奇怪的崩溃报告,其堆栈跟踪如下:
Thread 0: Crashed: com.apple.main-thread
0 libobjc.A.dylib 0x38af7942 realizeClass(objc_class*) + 117
1 libsystem_malloc.dylib 0x390dbef5 szone_malloc_should_clear + 1376
2 libobjc.A.dylib 0x38af976f lookUpImpOrForward + 74
3 libobjc.A.dylib 0x38af1feb _class_lookupMethodAndLoadCache3 + 34
4 libobjc.A.dylib 0x38af1db9 _objc_msgSend_uncached + 24
5 UIKit 0x30e571bf __57-[_UIDelayedPresentationContext beginDelayedPresentation]_block_invoke + 26
6 libdispatch.dylib 0x38fd9d07 _dispatch_client_callout + 22
7 libdispatch.dylib 0x38fe2803 _dispatch_source_invoke$VARIANT$mp + 262
8 libdispatch.dylib 0x38fe073d _dispatch_main_queue_callback_4CF$VARIANT$mp + 188
9 CoreFoundation 0x2e3ef819 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
10 CoreFoundation 0x2e3ee0ed __CFRunLoopRun + 1300
11 CoreFoundation 0x2e358c27 CFRunLoopRunSpecific + 522
12 CoreFoundation 0x2e358a0b CFRunLoopRunInMode + 106
13 GraphicsServices 0x3302c283 GSEventRunModal + 138
14 UIKit 0x30bfc049 UIApplicationMain + 1136
这是相当神秘的,因为报告中的主线程和任何其他活动线程似乎都不是暗示这是由我的代码引起的,当然我对此持怀疑态度。
根据我从Crashlytics收到的报告数量,这似乎是一个相当普遍的崩溃,但我无法在自己的设备上重现它。我怀疑这可能与一些内存管理问题有关,因为各种崩溃总是最终成为发送消息的一些坏指针。
这始终发生在此线程上,并在-[_UIDelayedPresentationContext beginDelayedPresentation]_block_invoke
调用之后。这显然是在一些Apple框架中引用的私有类,但是我无法弄清楚究竟是哪一个可以调用它。
该应用程序是一款教育游戏,我怀疑这可能与GameKit API(特别是游戏中心身份验证对话框)有关。
所有这些崩溃只发生在 iOS 7 和 iPad 上。该应用程序是通用的,因此有趣的是看到iPhone用户似乎不受影响。
有没有人有过这些私人课程的经验,可以给我一些提示?