首次遇到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就没有去验证了,将上述设置好好之后,完美运行起来了。