从XCode 13 Beta 5回退至XCode 12.5编译项目时触发Abort trap:6错误的技术求助
根据你描述的情况——Xcode13 Beta编辑的项目在Xcode12.5常规Build失败,但Build for Profiling能成功,结合报错里的Swift编译器崩溃日志,这大概率是Xcode13引入的Swift语法/IR生成变化,在Xcode12的Swift 5.4编译器中触发了bug,或者你在Xcode13里使用了仅Swift 5.5支持的新特性。下面是几个针对性的解决方向:
定位问题代码
报错里提到的函数@"xxxxxxxxxxxxxxxxH0OSo014AVAsynchronousA18CompositionRequestCtF"指向AVFoundation的异步合成请求相关代码,先重点检查你在Xcode13 Beta中新增或修改的AVFoundation异步API调用部分,看看有没有使用Xcode13才支持的写法(比如新的初始化器、专属语法)。临时调整编译优化等级
既然Build for Profiling能成功,说明该模式下的编译优化等级避开了编译器bug。你可以尝试把Xcode12中常规Build的优化等级改成和Profiling一致:- 打开项目设置,选中目标
MyTarget - 进入
Build Settings,搜索Optimization Level - 将Debug模式下的
No Optimization [-Onone]改为Fast, Whole Module Optimization [-Owholemodule] - 重新尝试编译,如果成功,说明是无优化模式下的编译器bug,后续可以暂时用该优化等级开发,或等待Apple修复。
- 打开项目设置,选中目标
移除Swift 5.5新特性
Xcode13 Beta开始支持Swift 5.5的async/await等异步语法,而Xcode12.5的Swift 5.4完全不兼容这些特性。如果你在Xcode13里用了这些新语法,必须改成Xcode12兼容的写法:- 把
async/await的异步调用替换成传统的闭包回调形式 - 检查有没有使用Swift 5.5新增的API或语法糖,比如
Task类型、async let等,全部回退到兼容写法。
- 把
彻底清理编译缓存
除了常规的Clean Build Folder(⇧⌘K),还要删除派生数据彻底清理缓存:- 打开Xcode,点击顶部菜单
Xcode→Preferences→Locations - 点击
Derived Data旁的箭头打开文件夹,删除当前项目对应的文件夹 - 重启Xcode后重新编译项目。
- 打开Xcode,点击顶部菜单
检查第三方依赖兼容性
如果项目依赖了第三方库,确认这些库是否是用Xcode13编译的,或者是否引入了Swift 5.5特性:- 尝试将第三方库更新到支持Xcode12的版本
- 如果是源码依赖,在Xcode12中重新编译这些库,排除依赖本身的兼容性问题。
如果以上方法都无法解决,那可能是Swift编译器的底层bug,你可以按照报错提示精简项目后提交bug报告,但优先建议先定位到具体的问题代码段,针对性修改。
内容的提问来源于stack exchange,提问作者Deepak Sharma

