私は、ソースコードが存在する主なターゲット(CoolAppと呼ばせてください)と単体テストのテストターゲットそれをCoolAppTestsと呼ぶ)。また、プロジェクトの総ラインカバレッジが一定の割合を下回った場合に変更をコミットできないことを保証するGitコミットフックもあります。iOSコードカバレッジレポートには含まれてはならないファイルが含まれています
カバレッジレポートには、CoolAppのファイルだけでなく、CoolAppTestsのファイルも含まれているという問題があります。その結果、新しいテストファイルを追加すると、プロジェクトの総ラインカバレッジは実際にになる可能性があり、コミットフックの種類が役に立たなくなります。
カバレッジレポートを生成するには、私は、次の手順を経る:
xcodebuild test \
-project "CoolApp.xcodeproj" \
-scheme "CoolAppTests" \
-destination "platform=iOS Simulator,name=iPhone 6,OS=10.0" \
-configuration Debug \
-enableCodeCoverage YES
は、それから私は(xcodebuild -target CoolAppTests -showBuildSettings)ビルド設定でTEMP_ROOTディレクトリを検索することで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のファイルですか?
いくつかの質問:1)フレームワークターゲット、テストターゲット、またはその両方に対してカバレッジを有効にしていますか。 2)ビルドの出力がフレームワーク/アプリではなく静的ライブラリの場合でもこれは機能しますか? – RuslanD
私はすべてのターゲットでカバレッジサポートを有効にしました(これはデフォルトだと思います)。スキームのテスト設定でカバレッジデータを収集します。静的ライブラリと同じです。わからない。しかし、私はそれが同じだろうと仮定します。コンパイルソースビルド段階にあなたのアプリケーションクラスが含まれていますか?その場合は削除してからもう一度お試しください。 – drekka