Q1:APP 收到线上客诉,说在 iOS12+ 系统的设备上,点开就直接崩溃;
用户反馈说上一个版本是可以正常运行的,这个版本更新后,开始点开就崩溃。最后定位到可能是因为打包机升级了 Xcode15。
崩溃的地方没有提供 log,也没有提供太多的堆栈信息。
堆栈信息如下:
0x1092b5040 <+64>: bl 0x1092b5088 ; dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*)
-> 0x1092b5044 <+68>: mov x16, x0
A1:搜索后发现,确实是因为 Xcode15 后,一些编译规则进行了修改,导致的崩溃。问题链接
苹果官方在更新文档里,也回答了这个问题,要么把最低支持版本提高到 iOS15,要么修改 OTHER_LDFLAGS 选项;官方解答
提高最低支持版本这事显然不太靠谱,所以我们可以去TARGET -> Build Setting -> OTHER_LDFLAGS
加上 -Wl
和 -ld_classic
Q2:上面的问题解决后,启动时又出现了新的报错,提示 Library not loaded,SwiftUI.framework
堆栈信息:
dyld`:
0x10be982e0 <+0>: mov x16, #0x209
0x10be982e4 <+4>: svc #0x80
-> 0x10be982e8 <+8>: b.lo 0x10be98300 ; <+32>
0x10be982ec <+12>: stp x29, x30, [sp, #-0x10]!
0x10be982f0 <+16>: mov x29, sp
0x10be982f4 <+20>: bl 0x10be9771c ; cerror_nocancel
0x10be982f8 <+24>: mov sp, x29
0x10be982fc <+28>: ldp x29, x30, [sp], #0x10
0x10be98300 <+32>: ret
log:
dyld: Library not loaded: /System/Library/Frameworks/SwiftUI.framework/SwiftUI
Referenced from: /var/containers/Bundle/Application/xxxxxxxxx/xxx.app/xxx
Reason: image not found
A2:这个的 log 就很明确了,库没加载上;
我们项目是 OC 的,里面引了几个 swift 的库。至于为啥以前没问题,现在 crash 了,那 Xcode15 之后编译严格了很多,我也很无奈,也很想骂他们啊 (╯-_-)╯~╩╩
好在官方也给留了解决方案(官方解决方案),你手动引一下,然后设置 Optional,那我就不对你严格检查了;
所以我们需要检查下这里有没有加上 SwiftUI.framework
,然后把规则改成 Optional
,就 OK 了。