Swift Concurrency Instruments在老项目中失效,求启用相关设置
解决Swift Concurrency Instruments无记录的问题
先查编译设置
- 得开启Swift Concurrency相关编译选项:
- 打开项目Build Settings,找到
Build Options里的Enable Swift Concurrency,设为YES(Xcode13+默认开着,但老项目可能被手动关过,对应编译器标记-enable-experimental-concurrency) - Debug模式下把
Optimization Level设成None [-O0],开了优化的话,Instruments抓不到Task的详细信息
- 打开项目Build Settings,找到
- 关掉
Dead Code Stripping:在Build Settings的Linking部分,把这个选项设为NO,不然Task相关的调试符号可能被删掉
检查调试符号配置
- Debug配置要生成完整调试符号:
- Build Settings里的
Debug Information Format,选DWARF with dSYM File - 确认
Generate Debug Symbols是YES,没调试符号的话Instruments解析不了Task信息
- Build Settings里的
核对Instruments录制配置
- 选对模板:启动Instruments时一定要用
Swift Concurrency模板,别用别的通用模板 - 勾选Tasks跟踪:Instruments左侧面板展开
Swift Concurrency下的Tasks,确保复选框是勾上的 - 选对进程:检查Instruments的进程选择,要选你的目标App进程,别选成其他衍生进程
项目兼容性调整
- 升级Xcode到最新稳定版:老版本Xcode对Swift Concurrency Instruments的支持有bug,新版本修了不少兼容性问题
- 检查Deployment Target:至少要iOS15/macOS12/watchOS8/tvOS15以上,低于这些版本的系统,Swift Concurrency底层不支持Instruments跟踪
临时测试小技巧
- 试试给Task显式设优先级:
Task(priority: .high) { print("async call") await someAsyncFunction() }
显式设优先级可能让Instruments更容易抓到Task的执行轨迹
内容的提问来源于stack exchange,提问作者presto
相关产品推荐
相关产品推荐

