更新Xcode 13.2.1后在iOS 12.5.5版本iPhone 6运行App崩溃:dyld: Symbol not found: ___chkstk_darwin
解决Xcode 13.2.1下iOS 12.5.5设备上因
___chkstk_darwin缺失导致的崩溃问题 嗨,我来帮你搞定这个崩溃问题!你遇到的这个报错核心原因很明确:Xcode 13.2.1编译生成的libswift_Concurrency.dylib(Swift并发库)是针对iOS 13.0及以上系统构建的,其中用到了___chkstk_darwin这个符号,但iOS 12.5.5的系统库libSystem.B.dylib里根本没有这个符号,所以App启动时动态链接器(dyld)找不到它直接崩溃了。
下面给你几个可行的解决办法,按推荐程度排序:
方案1:调整编译标记兼容iOS 12(推荐)
这个方案不用改代码也不用降级Xcode,只需要调整项目的编译配置:
- 打开项目的Build Settings,找到
OTHER_SWIFT_FLAGS,点击编辑添加以下两个标记:-Xfrontend -enable-experimental-concurrency-Xfrontend -disable-availability-checking
- 同时确保你的项目
DEVELOPMENT_TARGET设置为iOS 12.0或更低; - 如果项目里用到了第三方框架,也要检查这些框架的部署目标是否支持iOS 12,或者给它们也加上同样的编译标记;
- 最后清理项目缓存(快捷键
Cmd+Shift+K),重新构建运行。
方案2:移除Swift Concurrency相关代码/依赖
如果你的App并没有用到Swift的async/await、Task这些并发API,那可能是某个第三方库悄悄引入了Swift Concurrency:
- 排查项目的依赖库,找到引入
libswift_Concurrency.dylib的那个依赖; - 要么移除这个依赖,要么替换成不依赖Swift Concurrency的旧版本;
- 清理缓存后重新构建即可。
方案3:降级Xcode版本
如果上述方案都不适用,你可以考虑降级到Xcode 13.1或者更早的版本——这些版本在编译Swift Concurrency库时,对iOS 12的兼容性更好,不会引入___chkstk_darwin这类仅iOS 13+才有的符号。
配置完成后,记得用你的iPhone 6(iOS 12.5.5)重新测试,应该就能正常启动App了。
内容的提问来源于stack exchange,提问作者PK Chahar
相关产品推荐
相关产品推荐

