まず、macOSアプリのCIを実現する上で必要なツール・サービスについて。
macOSアプリのCIでは、主に下記のツール・サービスを使用していくことになる。あらかじめ、各ツールの役割・立ち位置について頭に入れておくと、色々と理解しやすくなり、思い通りに動かない時にも対応しやすくなる。
xcodebuild
ビルド・テスト・アーカイブなど、普段Xcodeを使って行う処理は、このコマンドラインツールを使って実行する。アップル純正。Xcode.appがインストールされていれば特に追加でインストールしたりしなくても、利用可能。現在では、pkgファイルの生成もxcodebuildでできるようになっている。(pkgbuildを使う必要がない)
macOSステップの最初の一歩は、xcodebuildを理解し、Xcodeを使わずにxcodebuildコマンドのみでテストを走らせたり、pkgファイルを作れるようにするところから始まる。
後述のgymコマンド、JenkinsのXcodeプラグインあるいはBITRISEでも、内部的にはxcodebuildが使われている。これらのツールを使った場合、直接xcodebuildを叩くことはないが、ビルドがうまくいかなかった場合にxcodebuildの使い方を知らないと正しい設定に直すのが困難になるので、xcodebuildの基本的な使い方は必ず押さえておいた方が良い。
xcpretty
xcodebuildの出力するログを見やすくしてくれるサードパーティツール。ログを見やすくしてくれるだけでなく、テストの結果をxmlに変換して保存してくれる機能もある。xcodebuildのテスト結果をjunit形式のxmlに変換してくれるツールとしてはoc2unitもあるが、xcprettyで済ませてしまった方が便利だ。
単純にpkgファイルをビルドし、iTunes Connectにアップロードするだけならマストのツールではない。
PlistBuddy
plistからの値の読み取り、書き込みを容易にできるコマンドラインツール。アップル純正。ビルド毎に、自動的にビルド番号(バンドルバージョン)をインクリメントしていきたいときなどに利用する。
マストではないが、覚えておくと非常に便利なツール。
fastlane
CIと非常に相性のよい、タスク自動化ツール。Web開発で言う所のGruntやgulp的な立ち位置のツール。後述するgym(ビルド), deliver(iTunes connectへのアップロード)などのツール群が含まれており、各ツールのみを個別に使うことも可能。
CIは基本的にサーバー上で回していくものだが、fastlaneを使えばサーバー上と同じ処理をローカルでも走らせてみることができる。サーバー上で何かしら問題が発生してCIがうまく回らなくなってしまった時などに便利。
gym
fastlaneに含まれる、ビルド用のツール。xcodebuildコマンドを直接叩くよりも、わかりやすく簡単にビルドを実行できる。
deliver
fastlaneに含まれる、デプロイ用のツール。主にpkgファイルをiTunes Connectにアップロードする時に使う。iTunes Connectには、現時点では公式なアップロード用のAPIが用意されていない。自前でスクリプトを書いてアップロードすることも不可能ではないが、基本的にはすごく大変なのでdeliverなどの非公式ツールを使った方が良い。
後述のBITRISEを使う場合でも、iTunes Connectへのアップロードはdeliverを使って行う。
Jenkins
今となってはもはや、説明する必要もないほど有名CI管理ツール。自前のサーバーでCI環境を作る場合はJenkinsを使う。macOSアプリのビルドにはxcodebuildが必要なので、必然的にLinuxやWindowsではなくMacが必要となる。後述のBITRISEなどのクラウドのサービスに比べれば自由度は高いが、ハードウェアが必要になる点と、保守がそこそこ大変なのがネック。
Bitrise
CIをクラウド上で実現できるサービス。iOSやmacOSのアプリを、これだけ安価で便利にできるサービスは今までなかった。画期的。
ツール・サービスを一通り見たところで、次のポストではxcodebuildの使い方から見ていく。
「macOSアプリのCI事情2 – 使うツール群とサービス」への1件のフィードバック