在 Xcode 15 上 debug iOS12+ 设备崩溃的问题

Q1:APP 收到线上客诉,说在 iOS12+ 系统的设备上,点开就直接崩溃;

用户反馈说上一个版本是可以正常运行的,这个版本更新后,开始点开就崩溃。最后定位到可能是因为打包机升级了 Xcode15。
崩溃的地方没有提供 log,也没有提供太多的堆栈信息。

crash 界面.jpeg

堆栈信息如下:

    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

Build Setting.png

OTHER_LDFLAGS.png


Q2:上面的问题解决后,启动时又出现了新的报错,提示 Library not loaded,SwiftUI.framework

crash 界面.jpeg

堆栈信息:

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 了。

解决方案.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容