xcode中开启代码覆盖率需新建coverage编译配置并启用三项编译选项、添加nt_coverage宏,绑定scheme后勾选code coverage,手工测试需在applicationdidenterbackground中调用__gcov_flush()落盘,最后通过xcode界面或xcodecoverage生成html报告。
在 xcode 中开启代码覆盖率统计,能直观反映测试对源码的触达程度,是评估测试完善度的重要依据。它不依赖第三方框架即可启用,适用于单元测试和手工测试场景,但需注意配置仅对当前 scheme 生效,且真机运行时覆盖率数据收集受限(目前稳定支持模拟器)。
启用 Coverage 编译配置
为避免影响日常开发,建议新建专用编译配置:
- 在 Project Settings → Info → Configurations 中,点击 “+” 号,选择 “Duplicate Debug Configuration”,重命名为 Coverage
- 选中该新配置,在 Build Settings 中搜索并设置以下三项为 YES:
- Generate Debug Symbols
- Generate Test Coverage Files
- Instrument Program Flow
- 在 Preprocessor Macros 中为 Coverage 配置添加宏定义:NT_COVERAGE=1(便于条件编译覆盖率相关逻辑)
绑定 Scheme 并开启覆盖率采集
让测试运行时实际收集数据:
- 打开 Product → Scheme → Edit Scheme…,在左侧选择 Test,右侧切换到 Info 标签页
- 将 Build Configuration 改为刚创建的 Coverage
- 切换到 Options 标签页,勾选 Code Coverage,并在下方勾选你的 target(如 App 和 Test Bundle)
确保运行时数据落盘(尤其手工测试)
覆盖率数据默认只在进程正常退出时写入磁盘。iOS App 按 Home 键不会退出,需主动触发落盘:
- 在 AppDelegate.m 的
- (void)applicationDidEnterBackground:方法中插入:
extern void __gcov_flush(void);
__gcov_flush();
#endif
这样每次切后台时都会把内存中的覆盖率计数刷新到 .gcda 文件中,后续可被工具解析。
生成并查看覆盖率报告
Xcode 自带基础视图,进阶分析推荐使用 XcodeCoverage 脚本:
- 运行测试后,Xcode 测试报告页底部会显示 “Coverage” 标签,点开可见各文件行覆盖高亮(绿色已执行、红色未执行)
- 如需 HTML 报告或更细粒度统计(函数/分支覆盖),可下载 XcodeCoverage,放入项目根目录,执行:
./getcov -s
输出结果在coverage/目录下,用浏览器打开index.html即可交互式查看











