У меня есть проект 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
Затем я получаю DerivedData для CoolAppTests, просматривая каталог TEMP_ROOT в настройках сборки (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?