记录NO_CRASH_STACK + 0 Thread0 image not found 奔溃

341 阅读6分钟

首次遇到iOS App奔溃了连堆栈信息都没有显示的,很是诡异,值得记录下来。 具体表现:打开app秒挂 从appStore获取只有如下信息:

NO_CRASH_STACK + 0
Thread0
__abort_with_payload

查看下奔溃的机型主要是12.1系统一下为主,刚开始推测可能是系统兼容问题,导致直接系统调用了abort()或者exit()方法。 由于没有这么老旧的机型去测试,使用了云测,获取了崩溃日志信息如下:

Termination Description: DYLD, Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib | Referenced from: /var/containers/Bundle/Application/9945B105-1250-4745-B4EB-0741FA1B1BD9/XXX.app/XXX | Reason: image not found
Triggered by Thread:  0
Thread 0 Crashed:
0   dyld                          0x00000001015887d0 0x101540000 + 296912
1   dyld                          0x0000000101587d80 0x101540000 + 294272
2   dyld                          0x0000000101587db4 0x101540000 + 294324
3   dyld                          0x0000000101544b40 0x101540000 + 19264
4   dyld                          0x0000000101547c0c 0x101540000 + 31756
5   dyld                          0x0000000101541044 0x101540000 + 4164

Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x0000000000000006   x1: 0x0000000000000001   x2: 0x000000016fd669a0   x3: 0x000000000000009e
    x4: 0x000000016fd665a0   x5: 0x0000000000000000   x6: 0x0000000000000000   x7: 0x0000000000000c10
    x8: 0x0000000000000020   x9: 0x0000000000000009  x10: 0x6f7361655220200a  x11: 0x6567616d69203a6e
   x12: 0x20200a9ebce4a89b  x13: 0x203a6e6f73616552  x14: 0x6f6e206567616d69  x15: 0x00646e756f662074
   x16: 0x0000000000000209  x17: 0x0000000000000001  x18: 0x0000000000000000  x19: 0x0000000000000000
   x20: 0x000000016fd665a0  x21: 0x000000000000009e  x22: 0x000000016fd669a0  x23: 0x0000000000000001
   x24: 0x0000000000000006  x25: 0x0000000000000000  x26: 0x00000001015ab000  x27: 0x00000001015abe30
   x28: 0x00000001015abd70   fp: 0x000000016fd66570   lr: 0x0000000101587d80
    sp: 0x000000016fd66530   pc: 0x00000001015887d0 cpsr: 0x00000000

Binary Images:
0x100098000 - 0x100c27fff XXX arm64  <5c7fea7f035c38dd874a40a1ca7bb635> /var/containers/Bundle/Application/9945B105-1250-4745-B4EB-0741FA1B1BD9/XXX.app/XXX
0x101148000 - 0x101157fff libswiftCoreGraphics.dylib arm64  <dc548ef900f93a15b5db05e39d9b5c5b> /var/containers/Bundle/Application/9945B105-1250-4745-B4EB-0741FA1B1BD9/XXX.app/Frameworks/libswiftCoreGraphics.dylib
0x10117c000 - 0x101183fff libswiftCoreImage.dylib arm64  <62f04b7bb6643893b12d9a999cc44faf> /var/containers/Bundle/Application/9945B105-1250-4745-B4EB-0741FA1B1BD9/XXX.app/Frameworks/libswiftCoreImage.dylib
0x101190000 - 0x10119bfff libswiftDarwin.dylib arm64  <999c29678a063cd582d7d156e9440a0c> /var/containers/Bundle/Application/9945B105-1250-4745-B4EB-0741FA1B1BD9/XXX.app/Frameworks/libswiftDarwin.dylib
0x1011b0000 - 0x1011cbfff libswiftDispatch.dylib arm64  <9fcba8edd8fd3c1697405e2a31f3e959> /var/containers/Bundle/Application/9945B105-1250-4745-B4EB-0741FA1B1BD9/XXX.app/Frameworks/libswiftDispatch.dylib
0x10120c000 - 0x101213fff libswiftMetal.dylib arm64  <c466f0fe15c133eebd5b395407bd9982> /var/containers/Bundle/Application/9945B105-1250-4745-B4EB-0741FA1B1BD9/XXX.app/Frameworks/libswiftMetal.dylib
0x101224000 - 0x10122bfff libswiftObjectiveC.dylib arm64  <1180ac100a9239db84972b6d4217b8eb> /var/containers/Bundle/Application/9945B105-1250-4745-B4EB-0741FA1B1BD9/XXX.app/Frameworks/libswiftObjectiveC.dylib
0x10123c000 - 0x101243fff libswiftQuartzCore.dylib arm64  <c22bc3e245df351695f331d55e664a89> /var/containers/Bundle/Application/9945B105-1250-4745-B4EB-0741FA1B1BD9/XXX.app/Frameworks/libswiftQuartzCore.dylib
0x101250000 - 0x10125ffff libswiftUIKit.dylib arm64  <107c11f3dd623fb49c8ac74bd56c2abc> /var/containers/Bundle/Application/9945B105-1250-4745-B4EB-0741FA1B1BD9/XXX.app/Frameworks/libswiftUIKit.dylib
0x101540000 - 0x1015a7fff dyld arm64e  <fa68b5becbfb3557a158ca1a5540a922> /usr/lib/dyld
0x101618000 - 0x101937fff libswiftCore.dylib arm64  <ad0cad3b1b51332786448be1ff1f0ae9> /var/containers/Bundle/Application/9945B105-1250-4745-B4EB-0741FA1B1BD9/XXX.app/Frameworks/libswiftCore.dylib
EOF

看到这里就很清晰奔溃的原因了:Library not loaded

Termination Description: DYLD, Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib 
Reason: image not found

swift动态库链接失败导致image not found,造成的奔溃。同时奔溃的日志也告诉了你 哪些动态库链接失败了,需要手动去添加系统的动态库,我整理出来如下:

libswiftCoreGraphics.dylib
libswiftCoreImage.dylib
libswiftDarwin.dylib
libswiftDispatch.dylib
libswiftMetal.dylib
libswiftObjectiveC.dylib
libswiftQuartzCore.dylib
libswiftUIKit.dylib
libswiftCore.dylib
libswiftCoreFoundation.dylib

同时添加了这些库没有足以解决问题,由于是RN项目,还需要buildSetting搜索Runpath Search Paths添加两行代码

/usr/lib/dyld
/usr/lib/swift

但是我看了下其他资源说还需要将前往还需要buildSetting搜索Build Option中设置Always Embed Swift Standard Libraries设置为YES。 每个人遇到的这个问题,所需要添加的动态库都是有区别的,根据日志提示去添加即可 由于个人项目默认设置的YES就没有去验证了,将上述设置好好之后,完美运行起来了。