fastlaneという、iOSのデプロイ等の作業を自動化してくれるツールを使用してみました。今回は、fastlaneのセットアップをして、XCTフレームワークのユニットテストの実行、さらにテストコードカバレッジの表示までfastlaneの開発パイプラインに定義して処理をしてみます。
fastlaneのセットアップ
まずは、gemでfastlaneのインストール。
1 | $ sudo gem install fastlane --verbose
|
今回は既存のiOSプロジェクトを使用します。自分のiOSプロジェクトがあるディレクトリの直下に移動して、 fastlaneの初期設定を開始します。
1 2 | $ cd [your_project_folder] $ fastlane init |
いくつかの質問に答える必要があります。細かいログは省略しています。ここでは、公式サイトのセットアップガイドに従っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Do you want to get started? This will move your Deliverfile and Snapfile (if they exist) (y/n) y Do you have everything commited in version control? If not please do so! (y/n) y App Identifier (com.krausefx.app): your_app_identifer Your Apple ID (fastlane@krausefx.com): your_apple_id Do you want to setup 'deliver', which is used to upload app screenshots, app metadata and app updates to the App Store or Apple TestFlight? (y/n) y Do you want Deliver to automatically create the Deliverfile for you based on your current app? The app has to be in the App Store to use this feature. (y/n) y Do you want to setup 'snapshot', which will help you to automatically take screenshots of your iOS app in all languages/devices? (y/n) y Do you want to use 'sigh', which will maintain and download the provisioning profile for your app? (y/n) y Optional: The scheme name of your app: (If you don't need one, just hit Enter.) [just hit Enter] |
これでfastlaneのセットアップが完了です。この状態で
1 2 | $ cd [your_project_folder] $ fastlane ios test |
でFastfileで定義されているtestレーンが実行されます。 (上記のようにセットアップしていれば、testレーンではsnapshotアクションのみ実行されるはずです。Snapfileにschemeを記述する行があるので、ここに記述すればエラーなしで動きます。) これでfastlaneのセットアップは完了したので、次にユニットテストの実行とテストカバレッジを表示するためにtestレーンに設定していきます。
xctest アクション
xctest アクションを使って、xctestフレームワークを使ったユニットテストを実行する処理をtestレーンに追加してみます。$ fastlane actions
で、使用できるアクションの一覧を表示できるので覗いてみるとおもしろいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # Fastfile desc "Runs all the tests" lane :test do # snapshot xctest( scheme: "ShareCla", destination: "platform=iOS Simulator,name=iPhone 6,OS=8.4", reports: [{ report: 'html', output: './build/reports/xctest/test-report.html', # will use XCODE_BUILD_PATH/report, if output is not provided screenshots: 1 }] ) end |
上記のようにFastfileを編集して、$ fastlane ios test
を実行すると、コンソールにテストの結果が表示され、テストのproject_directory/build/reports/xctest/test-report.html
にも見やすい形でレポートしてくれます。
テストカバレッジレポート
次にテストコードカバレッジレポートをtestレーンに追加してみます。今回はiOSのテストカバレッジを確認するために2つの方法を試してみました。
gcovr アクション
1つは、gcovr
アクションを使用する方法です。
まずは、カバレッジを表示するために必要なファイルを生成するためXcode側でいくつかの設定をする必要があります。
Xcodeで対象となるターゲットを選択し、Debug時に、Instrument Program Flow
、Generate Test Coverage Files
と Generate Debug Symbols
を YES
に設定します。Appleのドキュメントには、このファイル群を生成するために、新しくビルド設定を追加するように推奨されていますが、私はとりあえず、Debug
に対して、この3つの設定をしてしまいました。
1 2 3 4 5 6 | # Fastfile gcovr( html: true, html_details: true, output: "./build/reports/gcovr/report.html" ) |
このようにFastfileのtestレーンに追記します。この状態で、$ fastlane ios test
を実行すると gcovr アクションが実行され、指定したディレクトリにカバレッジレポートのhtmlが存在するはずです。これをブラウザで開けば確認できます。
frankencover.it
今回はもう1つ frankencover.it
というツールも使用してみました。こちらも gcovrアクションを使用した時のようにXcodeの設定を忘れずにしてください。
そして下記のコマンドを実行します。
1 2 | $ brew install groovy $ brew install lcov |
あとは、このようにコマンドを実行すれば、カバレッジが表示されるはずです。
1 | $ groovy http://frankencover.it/with -source-dir ../ShareCla -output-dir ../build/reports/frankencover
|
fastlaneには現状、frankencover.it用のアクションはないので、上記のコマンドを実行するために、シェルスクリプトを用意します。
1 2 3 4 | # ./fastlane/report_code_coverage.sh #!/bin/sh $ groovy http://frankencover.it/with -source-dir ../ShareCla -output-dir ../build/reports/frankencover |
今回は、上記のシェルスクリプトをfastlaneディレクトリ直下に配置します。
fastlaneは、sh /path/to/script
と記述するだけで任意のシェルスクリプトを実行することができます。これをfastlaneディレクトリ直下に入れ、実行権限を付与し、fastlaneコマンドを実行すれば完了です。
1 2 | # Fastfile sh "./report_code_coverage.sh" |
これで frankencover.it でもテストコードカバレッジを表示することができました。
参考
fastlane
Technical Q&A QA1514 ~ Configuring Xcode for Code Coverage ~
fastlane/Actions.md at master · KrauseFx/fastlane
frankencover.it