Unity iOS で fastlane を使って ipa をビルドする(後編)
Unity で iOS のアプリをビルドするとき、毎回手動 で実行するのは面倒くさい。 fastlane を使って、Unity プロジェクトから XCode プロジェクトを書き出して ipa を作成するまでを自動化する。
前回 は、CLI で Unity から Xcode プロジェクトの書き出しおよび設定まで行った。 今回は、fastlane を使って、ipa の書き出しを自動化する。
概要
- Unity を batchMode で起動する action を定義する
- lane を定義する
- lane を実行する
環境
- Unity 5.3.4f1
- fastnale 1.94.0
基本的なこと
- fastlane/fastlane: The easiest way to automate building and releasing your iOS and Android apps
- Unity iOS で fastlane を使って ipa をビルドする(前編)
Unity を batchMode で起動する action を定義する
前回「Builder.cs を CLI から実行する」でやったように、CLI から Unity を batchMode で起動すると、Unity の Editor スクリプトを実行することができる。
fastlane には sh
action があるので、それを使ってコマンドを実行しても良いが、どうせなら action 化しておく方が lane の定義がすっきりするので、action 化する。
まずは、コマンドで雛形をつくる。
$ fastlane new_action
生成されたテンプレートを元に run
メソッドや available_options
メソッドを実装していく。
fastlane/actions/unity.rb
内容は、渡されたオプションに従ってコマンドを組み立て、sh
action を使って実行しているだけ。
オプションはとりあえず今使う分しか用意していない。YAGNI。
Jenkins から実行したときに、2 回に 1 回ぐらい NSDocumentController Info.plist warning で失敗したので、 -nographics
オプションを付けた。
- Why I can’t build an Unity project by using Jenkins on MacOS? | Unity Community
- Unity - Manual: Command line arguments
ただし、Unity マニュアルに
Please note -nographics will not allow you to bake GI on OSX, since Enlighten requires GPU acceleration.
とあるので、そこは注意する。
lane を定義する
用意した unity action を使って lane を実装していく。 せっかく unity action を作ったので、ビルド用 lane だけでなく、テストを実行する lane も定義してみる。
まずは、コマンドで雛形をつくる。
$ fastlane init
生成されたテンプレートを元に lane を実装していく。
fastlane/Fastfile
beta lane
ipa をビルドして、DeployGate にアップロードする。
-
unity
で Xcode プロジェクトを書き出す -
sigh
で Provisioning Profile をダウンロードする -
gym
で ipa をビルドする -
changelog_from_git_commits
で Git の commit メッセージ一覧を取得する -
deploygate
で DeployGate に ipa をアップロードする
今回作ったのは unity action だけ。既存の action を使うことで、ビルドスクリプトが簡単に書ける。
action の一覧はコマンドで。
$ fastlane actions
test_unit lane
Unity Editor Test を実行する。unity action のオプションについては、 Unity で ユニットテストをする を参照。
test_integration lane
integration test を実行する。unity action のオプションについては、 Unity で ユニットテストをする(非同期編) を参照。
lane を実行する
$ fastlane [<platform>] <lane>
で実行できる。
だいたいの action は環境変数からオプションを読んでくれる。
例えば deploygate
action は環境変数からユーザー名や API トークンを渡すことができるので、そうする。
$ export DEPLOYGATE_USER=********
$ export DEPLOYGATE_API_TOKEN=********************************
$ fastlane beta
補足
別のマシンで実行するとき
fastlane init
を実行したとき、実行したマシンのキーチェーンに Apple ID とパスワードのペアが追加される。
Jenkins のような CI でビルドを行う場合は、Jenkins Slave マシンのキーチェーンにも、そのペアを追加する必要がある。(provisioning profile を sigh
で取得するために)
$ fastlane-credentials add --username you@example.com
Password: ************
Credential your@example.com:************ added to keychain.
まとめ・感想
-
fastlane new_action
で生成される雛形をもとに、Unity を batchMode で起動する action を定義した -
fastlane init
で生成される雛形をもとに、lane を定義した- beta 版 ipa をビルドして DeployGate に配信する lane
- Unity Editor テストを実行する lane
- Unity Test Tools を使った integration test を実行する lane
- CLI から lane を実行した
- 環境変数は
export Foo=bar
で渡した
- 環境変数は
fastlane 良い
既に用意されている action を使えば、これまでシェルスクリプトで xcodebuild
や curl
を叩いてビルドしていたのが、
より抽象度の高いスクリプトで記述できるようになり、可読性が高くなる。
また、ipa をビルドするときの一つ大きな問題である、Provisioning Profile が Member Center からさくっとダウンロードできて、ipa の署名までさくっとできるのが強い