【发布时间】:2016-10-04 18:20:01
【问题描述】:
我有一个带有两个目标的 Xcode 项目 - 源代码所在的主要目标(我们称之为 CoolApp),以及一个用于单元测试的测试目标(我们称之为 CoolAppTests)。我还有一个 Git 提交挂钩,可确保在项目的总行覆盖率低于某个百分比时我无法提交更改。
问题是覆盖率报告不仅包含 CoolApp 中的文件,还包含 CoolAppTests 中的文件。结果,当我添加一个新的测试文件时,项目的总行覆盖率实际上可能会下降,这使得提交挂钩有点无用。
要生成覆盖率报告,我执行以下步骤:
xcodebuild test \
-project "CoolApp.xcodeproj" \
-scheme "CoolAppTests" \
-destination "platform=iOS Simulator,name=iPhone 6,OS=10.0" \
-configuration Debug \
-enableCodeCoverage YES
然后我通过在构建设置中查找 TEMP_ROOT 目录来获取 CoolAppTests 的 DerivedData(xcodebuild -target CoolAppTests -showBuildSettings)。从那里,我得到 /CodeCoverage/Coverage.profdata,以及位于 /CodeCoverage/Products/Debug-iphonesimulator/CoolAppTests.xctest/CoolAppTests 的二进制文件。
PROFDATA=.../CodeCoverage/Coverage.profdata
BINARY=.../CodeCoverage/Products/Debug-iphonesimulator/CoolAppTests.xctest/CoolAppTests
最后,我生成报告并捕获其输出:
xcrun llvm-cov report -instr-profile "${PROFDATA}" "${BINARY}"
此时,如前所述,报告包含来自 CoolApp 和 CoolAppTests 的文件。
有什么方法可以过滤掉报告中的内容,使其仅包含我的主要目标 - CoolApp 的文件,而没有来自我的测试目标 CoolAppTests 的文件?
【问题讨论】:
标签: ios xcode llvm code-coverage xcrun