来自命令行的 Xcode 代码覆盖率

Posted

技术标签:

【中文标题】来自命令行的 Xcode 代码覆盖率【英文标题】:Xcode code coverage percentage from command line 【发布时间】:2021-03-26 14:52:43 【问题描述】:

我可以从 Xcode UI 中看到代码覆盖率。我可以导航到DerivedData 文件夹中的.xcresult 文件和Coverage.profdata 文件,但这些文件不是人类可读的。如何从这些文件中提取代码覆盖率?

【问题讨论】:

【参考方案1】:

Lior 走在正确的轨道上。 首先使用 xcodebuild 从项目的根目录使用以下命令构建和测试应用程序

$ xcodebuild -project XCCoverage-Demo.xcodeproj/ -scheme XCCoverage-Demo -derivedDataPath Build/ -destination 'platform=ios Simulator,OS=11.3,name=iPhone 7' -enableCodeCoverage YES clean build test CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO

这将转储 Build 目录中的所有 DerivedData。 这将在路径 Build/Logs/Test 生成代码覆盖率数据。我们将看到 .xccovreport 和 .xccovarchive 扩展名的代码覆盖率。

然后以默认格式查看代码覆盖率报告,这不是特别好,但根据 Apple,它是人类可读的。但是我们可以使用以下命令生成报告

$ xcrun xccov view Build/Logs/Test/*.xccoveragereport

xccov 的真正强大之处在于它可以生成 JSON 格式的代码覆盖率报告。根据 Apple 在手册页上的文档,它的机器可表示格式。我们可以在任何我们喜欢的地方挂钩这些 JSON 结果,或者在此基础上构建另一个工具。我们可以使用以下命令生成 JSON 报告

$ xcrun xccov view Build/Logs/Test/*.xccovreport --json

【讨论】:

xcrun xccov view --report Build/Logs/Test/*.xcresult --json 一起使用效果很好【参考方案2】:

如果您使用的是 Xcode 11 或更高版本,您可以使用以下命令从命令行检查内容。

xcrun xcresulttool /path/to/result/.xcresult

并将数据导出为 JSON

更多信息请参见this WWDC talk

【讨论】:

感谢 WWDC 演讲。 对任何 .xcresult 文件执行上述命令返回错误:预期参数:合并、元数据、图形、版本、格式描述、导出、获取

以上是关于来自命令行的 Xcode 代码覆盖率的主要内容,如果未能解决你的问题,请参考以下文章

gcovr 和 Xcode 5 的代码覆盖率不起作用

XCode 5.1 单元测试覆盖分析在使用块的文件上失败

Xcode 7 代码覆盖率 - 无覆盖率数据

UI 测试的 XCode 7 代码覆盖率结果

从 Xcode 7 的覆盖率统计中排除代码

如何在 Xcode 7 中使用代码覆盖率?