iOS 执行 Swift 库时崩溃

iOS crash while executing Swift libs

我在一个 Target 上遇到了一系列奇怪的崩溃,在其他设备上也发生了不同的目标。当我尝试用符号表示它时,我在随机代码位置误入歧途:这是崩溃时二进制图像的顶部:

Binary Images: 0x73000 - 0x3cafff +inArrivo Express armv7
/var/mobile/Applications/D2AE6804-C6CC-4953-AB14-1C5439420D0F/inArrivo Express.app/inArrivo Express 0x6b9000 - 0x820fff libswiftCore.dylib armv7
/private/var/mobile/Applications/D2AE6804-C6CC-4953-AB14-1C5439420D0F/inArrivo Express.app/Frameworks/libswiftCore.dylib 0x995000 - 0x99cfff libswiftCoreAudio.dylib armv7
/private/var/mobile/Applications/D2AE6804-C6CC-4953-AB14-1C5439420D0F/inArrivo Express.app/Frameworks/libswiftCoreAudio.dylib 0x9ab000 - 0x9b6fff libswiftCoreGraphics.dylib armv7 <95229d09c03d3eba9fbb038741503af3> /private/var/mobile/Applications/D2AE6804-C6CC-4953-AB14-1C5439420D0F/inArrivo Express.app/Frameworks/libswiftCoreGraphics.dylib 0x9cd000 -
0x9d4fff libswiftCoreImage.dylib armv7 <59ca6e9173993aa39882799efdafd355> /private/var/mobile/Applications/D2AE6804-C6CC-4953-AB14-1C5439420D0F/inArrivo Express.app/Frameworks/libswiftCoreImage.dylib 0x9e4000 - 0x9ebfff libswiftDarwin.dylib armv7 <764c0e157b49314088a4c9f8e1390a1a> /private/var/mobile/Applications/D2AE6804-C6CC-4953-AB14-1C5439420D0F/inArrivo Express.app/Frameworks/libswiftDarwin.dylib 0x9fc000 - 0x9fffff libswiftDispatch.dylib armv7
/private/var/mobile/Applications/D2AE6804-C6CC-4953-AB14-1C5439420D0F/inArrivo Express.app/Frameworks/libswiftDispatch.dylib 0xa0e000 - 0xa3dfff libswiftFoundation.dylib armv7
/private/var/mobile/Applications/D2AE6804-C6CC-4953-AB14-1C5439420D0F/inArrivo Express.app/Frameworks/libswiftFoundation.dylib 0xa78000 -
0xa7ffff libswiftObjectiveC.dylib armv7 <786938b80ba63395aa5da6935df0c02e> /private/var/mobile/Applications/D2AE6804-C6CC-4953-AB14-1C5439420D0F/inArrivo Express.app/Frameworks/libswiftObjectiveC.dylib 0xa8c000 -
0xa8ffff libswiftSecurity.dylib armv7 <12a8743e1ad636ebaaac523d1d709341> /private/var/mobile/Applications/D2AE6804-C6CC-4953-AB14-1C5439420D0F/inArrivo Express.app/Frameworks/libswiftSecurity.dylib 0xa9a000 - 0xaa5fff libswiftUIKit.dylib armv7
/private/var/mobile/Applications/D2AE6804-C6CC-4953-AB14-1C5439420D0F/inArrivo Express.app/Frameworks/libswiftUIKit.dylib

当崩溃发生在这一帧时:

1   CoreFoundation                      0x2f481167 0x2f3e2000 + 651623
2   CoreFoundation                      0x2f480d7f 0x2f3e2000 + 650623
3   CoreFoundation                      0x2f47f11b 0x2f3e2000 + 643355
4   CoreFoundation                      0x2f3e9ebf 0x2f3e2000 + 32447
5   CoreFoundation                      0x2f3e9ca3 0x2f3e2000 + 31907
6   GraphicsServices                    0x342ef663 0x342e6000 + 38499
7   UIKit                               0x31d3614d 0x31cc8000 + 450893
8   inArrivo Express                    0x0007dc5d 0x73000 + 44125 
9   libdyld.dylib                       0x3a173ab7 0x3a172000 + 6839

跟踪程序几乎毫无价值,因为崩溃确实是随机发生的。可能是什么?

Xcode 崩溃报告比 QuincyKit 崩溃报告更准确,并且总是报告:

__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION as in:

Thread 0: 0 ??? 0000000000 0 + 0 1
CoreFoundation 0x2f481166 CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION + 14 2 CoreFoundation 0x2f480d7e __CFRunLoopDoTimer + 782 3
CoreFoundation 0x2f47f11a __CFRunLoopRun + 1210 4
CoreFoundation 0x2f3e9ebe CFRunLoopRunSpecific + 522 5 CoreFoundation 0x2f3e9ca2 CFRunLoopRunInMode + 106 6
GraphicsServices 0x342ef662 GSEventRunModal + 138 7
UIKit 0x31d3614c UIApplicationMain + 1136 8
inArrivo Express 0x000dbbdc 0xd1000 + 43996 9
libdyld.dylib 0x3a173ab6 start + 2

Thread 1 Crashed: 0 libsystem_kernel.dylib 0x3a216808 kevent64 + 24 1 libdispatch.dylib 0x3a162de8 _dispatch_mgr_invoke + 228 2 libdispatch.dylib 0x3a151f6e _dispatch_mgr_thread$VARIANT$up + 34

在我的应用程序的线程上,即使崩溃发生在另一个线程上。

崩溃似乎是由于在前一个会话终止之前在会话上调用了一个新的数据任务。我通过尝试并删除所有特定于目标的代码来尝试错误。 Apple 表示崩溃发生在 Swift 的问题附近,相对于 Objective-c,但它似乎又回到了 C 悬垂指针的时代!这就是 90 年代的计算机科学和 php 编程经验脱颖而出的地方!请 Apple 注意 Swift 应该是未来 20 年的 21 世纪语言,运行时支持应该是随之而来的。