【iOS/Xcode】Slatherでテストカバレッジレポートの生成方法!

【iOS/Xcode】Slatherでテストカバレッジレポートの生成方法!

この記事からわかること

  • iOS/XcodeSlatherを使ったカバレッジレポートアーティファクト化
  • テスト実行カバレッジ計測の実装

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

Slatherとは?

公式リファレンス:Slatherとは?

Slather」はXcodeプロジェクトのコードカバレッジを解析して可視化するツール です。Ruby製のコマンドラインツールで、CI環境との連携も簡単に行うことができるので最終的なアーティファクト(※)生成に活用することが可能です。

ソフトウェア開発における、成果物(=アーティファクト)として扱えるように明確な形にまとめること

テストカバレッジレポートを生成するためには当たり前ですがテストコードの記載が必要になります。Xcodeでは「XCTest」と「Swift Testing」の2つの方法がありますが「Swift Testing」の方が新しく使い勝手も良いためおすすめです。テストコードの実装方法は以下の記事を参考にしてください。

インストール方法

SlatherはBundlerを使用してインストールしていきます。「GemFile」に以下のように追加してbundle installを実行してください。


# frozen_string_literal: true

source "https://rubygems.org"

gem "slather"
$ bundle install

テストカバレッジレポートの生成

テストカバレッジレポートを生成するためには事前にテストを実行しカバレッジデータが生成されている必要があります。テストの実行はGUIでもCLIでもどちらでも大丈夫ですが成功しないとカバレッジデータが生成されないので注意してください。

また例えばCLIから$ clean testで行う際は-enableCodeCoverage YESを付与しなとカバレッジデータ(.xccovreport / .xccovarchive)を生成しないので注意してください。GUIの場合はこちらの記事を参考にしてください。

実際に生成するにはslather coverageコマンドを実行します。引数では出力形式や対象プロジェクトファイルなどを指定します。

$ bundle exec slather coverage \
  --html \                                 # 出力形式
  --output-directory coverage-report \     # 出力先
  --scheme スキーム名 \                      # スキーム名
  --workspace プロジェクト名.xcworkspace \   # Cocoa Podsならxcworkspaceファイル
  プロジェクト名.xcodeproj \                 # ここはCocoa Podsありでも.xcodeprojも指定

実行するとoutput-directoryで指定したディレクトリが生成されその中にHTML形式のカバレッジレポートがSwiftファイルごとに生成されます。

【iOS/Xcode】GitHub ActionsでCIを構築する方法!テスト実行とカバレッジ計測

中身は以下のように対象のファイルの網羅できている箇所が緑色に、網羅できていない箇所が赤色にハイライトされ全体のパーセンテージなどがまとめて表示されるようになっています。

【iOS/Xcode】GitHub ActionsでCIを構築する方法!テスト実行とカバレッジ計測

.slather.ymlを活用する

いちいちbundle exec slather coverageを実行する際にオプションをつけるのは大変なのでプロジェクトルートに.slather.ymlを用意することで設定を定義することが可能です。

ignoreレポートに含めたくないファイルやディレクトリを定義することも可能です。


coverage_service: cobertura_xml
xcodeproj: プロジェクト名.xcodeproj
workspace: プロジェクト名.xcworkspace
scheme: スキーム名
source_directory: プロジェクトのルート
output_directory: coverage-report
ignore:
  - Pods/*
  - Carthage/*
  - "**/AppDelegate.swift"
  - "**/SceneDelegate.swift"
  - "**/Generated/*"
  - SourcePackages/*

GitHub Actions(CIツール)と連携してアーティファクト化する

SlatherはCIツールとも連携できるようになっています。Circle CIやCodeCovなどいろいろありますが、今回はパブリックリポジトリなら無料で使えるGitHub ActionsでCIを構築する想定で進めます。

といっても方法はすごく簡単でGitHub Actionsからテストを実行しその後カバレッジレポートを作成、アーティファクト化を行うだけです。

.github/workflows/main.yml
// 〜〜〜〜〜〜割愛
# Xcodeビルド
- name: Run Xcode Test
  run: |
    set -o pipefail
    xcodebuild \
      -sdk iphonesimulator \
      -destination "platform=iOS Simulator,name=iPhone 16 Pro Max,OS=18.6,arch=arm64" \
      -configuration Debug \
      -workspace プロジェクト名.xcworkspace \
      -scheme スキーム名 \
      -enableCodeCoverage YES \
      clean test \
      ENABLE_PREVIEWS=NO \
      | bundle exec xcpretty --test --color

# カバレッジレポートの作成
- name: Generate Coverage Report
  run: |
    bundle exec slather coverage

# カバレッジレポートのアーティファクト化
- name: Upload coverage report
  uses: actions/upload-artifact@v4
  with:
    name: coverage-report
    path: coverage-report

実際に動作させてみるとGitHub Actionsの結果のArtifactsに「coverage-report」が表示されるようになります。

【iOS/Xcode】GitHub ActionsでCIを構築する方法!テスト実行とカバレッジ計測

実装詳細は以下の記事を参考にしてください。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

Search Box

Sponsor

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index