Xcode13生成代码覆盖率失败提示Failed to merge raw profiles如何解决
Xcode 13 代码覆盖率生成失败解决方案
报错信息:
Failed to merge raw profiles in directory /Users/e..l/Library/Developer/Xcode/DerivedData/Picman-dfefadmrrtyfcfduazopvkoniydf/Build/ProfileData/00008027-001221043EE9802E to destination /Users/e..l/Library/Developer/Xcode/DerivedData/Picman-dfefadmrrtyfcfduazopvkoniydf/Build/ProfileData/00008027-001221043EE9802E/Coverage.profdata: No profile data files were written to '/Users/e..l/Library/Developer/Xcode/DerivedData/Picman-dfefadmrrtyfcfduazopvkoniydf/Build/ProfileData/00008027-001221043EE9802E'
配置校验步骤
- 确认Build Settings中
CLANG_ENABLE_CODE_COVERAGE(Code Coverage Support)的值设为Yes,需要对所有测试用到的构建配置统一设置,不要仅单个配置开启。 - 同步开启
GCC_GENERATE_TEST_COVERAGE_FILES(Generate Legacy Test Coverage Files)和GCC_INSTRUMENT_PROGRAM_FLOW_ARCS(Instrument Program Flow)两个编译选项,Xcode13对老项目迁移后的配置兼容存在缺陷,这两个选项是底层生成原始覆盖率数据的必要依赖。 - 检查测试target(Unit Test/UI Test)的Build Phases配置,确认正确关联了需要统计覆盖率的主target,无依赖缺失或循环依赖问题。
运行环境排查
- 如果你使用真机运行测试,优先切换到模拟器重试,Xcode13.0存在部分iOS版本真机覆盖率数据写入权限的已知bug,无法正常生成
.profraw原始文件。 - 关闭项目Build Options中的
Parallelize Build并行构建选项,重新执行clean后全量构建再运行测试,并行构建会导致混编项目的覆盖率数据生成时序错乱。
手动修复方案
如果以上配置均正确,可手动处理覆盖率生成逻辑,绕过Xcode的自动合并bug:
- 运行一次完整测试,进入报错对应的ProfileData目录:
cd /Users/e..l/Library/Developer/Xcode/DerivedData/Picman-dfefadmrrtyfcfduazopvkoniydf/Build/ProfileData/00008027-001221043EE9802E - 执行
ls -la检查目录下是否存在.profraw后缀的原始文件:- 如果无
.profraw文件,说明测试运行阶段存在异常中断,确认测试用例全部正常执行完成、无强制退出或崩溃情况。 - 如果存在
.profraw文件,手动执行合并命令:xcrun llvm-profdata merge -o Coverage.profdata *.profraw,执行完成后重启Xcode即可正常查看全量覆盖率报告。
- 如果无
- 若为Swift/OC混编项目,可在主target的Other Swift Flags中添加
-profile-generate和-profile-coverage-mapping两个参数,强制Swift编译器生成覆盖率映射数据。
内容的提问来源于stack exchange,提问作者cire1776
相关产品推荐
相关产品推荐

