我有一个带有两个目标的 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 目录(xcodebuild -target CoolAppTests -showBuildSettings)来获取 CoolAppTests 的 DerivedData。从那里,我得到 /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 的文件?