升级Xcode 13后代码覆盖率无故下降是什么原因?有何解决方案?
Xcode 13 覆盖率统计缺失问题解决方案
这是Xcode 13系列版本的已知共性问题,属于Apple官方引入的llvm覆盖率统计组件回归Bug,大量开发者都反馈过相同的统计异常。
问题表现
- 已执行的
guard语句行、空合运算符??行被错误标记为未覆盖 - 可选绑定
if let/guard let的声明行、空代码块的大括号行不计入统计 - 代码无变更的前提下,整体覆盖率数值比Xcode 12低10%~30%不等
可用解决方案
方案1:临时适配Xcode 13低版本
如果因项目依赖暂时无法升级Xcode,可按以下步骤调整配置:
- 打开项目的Build Settings面板,找到
Other Swift Flags配置项 - 仅在开启测试覆盖率的构建配置(一般是Debug)下添加两个编译参数:
-profile-generate、-profile-coverage-mapping - 清理Derived Data后重新运行测试生成覆盖率报告即可,该配置可覆盖80%以上的统计缺失场景
注意:不要在Release配置下添加上述参数,会增大包体积并增加运行时性能损耗
方案2:官方修复版本升级
Apple在Xcode 13.4.1及后续版本中已经完全修复了该问题,直接升级Xcode到13.4.1或更高版本,重新执行测试即可恢复正常的覆盖率统计逻辑,无需额外修改项目配置。
内容的提问来源于stack exchange,提问作者gigomar
相关产品推荐
相关产品推荐

