TravisCIを使ってCI(継続的インテグレーション)の環境を構築しようとしたけれど、ググっても手順がやや複雑で環境構築が大変そうに見えた。色々自動化できないか探してみると、iOS開発に大変便利なツール群が見つかった。それらを使って環境構築すると、イイ感じに構築できたのでメモ。
大変参考になる文献
TravisCIと一緒に利用して便利だったもの
- Rakefile
- xctool
- nomad-cli
Rakefile
- http://docs.ruby-lang.org/ja/2.1.0/library/rake.html
- TravisCIに標準でインストール済み
- Rakefileを使って
script: rake myapp:test
というように書いておくとシェルスクリプトを書くよりも楽に書ける部分がある- 特にブランチ名で処理を分けたい時にRubyの正規表現が使えるので楽
- すべてをRakefileにしようとせず、シェルスクリプトの呼び出しを
sh
メソッドを使うようにすると便利
facebook/xctoolを利用する
- https://github.com/facebook/xctool
- TravisCIに標準でインストール済み(というか普通に設定するとxctoolを使ってテストが実行される)
- 以下のようにシェルスクリプトに書いておいて環境変数でWORKSPACE_NAMEとかを設定すると後々他のプロジェクトでも使い回したりできて楽
- ビルドを実行
xctool -workspace ${WORKSPACE_NAME} -scheme ${BUILD_SCHEME} -configuration ${CONFIGURATION} -sdk iphonesimulator build
- テストを実行
xctool -workspace ${WORKSPACE_NAME} -scheme ${TEST_SCHEME} -configuration ${CONFIGURATION} -sdk iphonesimulator test
- ビルドを実行
nomad-cliを使う
- http://nomad-cli.com/
- AFNetworkingでおなじみmatttさんが作った便利ツール群
- TravisCIに標準で入ってるっぽいことが公式ブログの記事で書かれているが、利用できなかったのでbefore_installにnomad-cliを追記した
before_install: gem install cupertino shenzhen --no-ri --no-rdoc
- iOSの証明書やプロビジョニングプロファイルをダウンロードできる「Cupertino」、ipaファイルをビルド・配布する「Shenzen」などで構成されている
- Cupertino
- Provisioning Profileをダウンロードして名前を環境変数
PROVISIONING_FILE_NAME
に代入PROVISIONING_FILE_NAME=
ios profiles:download -u "${IOS_DEV_EMAIL}" -p "${IOS_DEV_PASSWORD}" "${IOS_DEV_PROVISIONING_NAME}" | sed -e "s/Successfully downloaded: '\(.*\)'/\1/g"
- ここを自動化できると、デバイスを追加してもProvisioning Profileをアップロードし直したりしなくて済むので楽
- Provisioning Profileをダウンロードして名前を環境変数
- Shenzen
- ipaファイルを生成する
ipa build --configuration ${BUILD_CONFIG} --scheme #{SCHEME} CODE_SIGN_IDENTITY='iPhone Developer'
- Deploygateで配信する
ipa distribute:deploygate --api_token #{DEPLOYGATE_API_TOKEN} --user_name #{DEPLOYGATE_USER_NAME}
- ShenzenのREADMEにも書いてあるように、TestFlightやDeploygateの配信が超簡単になる
- TestFlight, HockeyApp, Crashlytics, Deploygateによる配布、FTP, SFTP, Amazon S3による保存、iTunes Connectへのバイナリ提出などが自動化できる(最高だ!)
- ipaファイルを生成する
その他
自分のブログに書いた記事なのですが、他にもTipsがあったらお聞きしたいと思ってQiitaにも貼りました。