こんにちは!ChatWork 技術部モバイルチームの川村です

前回の記事で Travis CI で自動テストをおこなうところまでできました
次は自動テストがすべて成功したらアプリケーションをビルドして TestFlight へアップロードできるようにします

サンプルリポジトリ

masaplabs/TravisCITestFlight
Push か Pull Request をすると Travis CI により自動テストがおこなわれ、
テスト通過後にアプリを TestFlight へアップロードする設定のリポジトリです

注意:設定は一部ダミーのものに変えているため、参考にされる際はご自身の環境に合わせてお使いください

証明書ファイルを書き出す

TestFlight へのアップロードをおこなうため AdHoc ビルドをおこないます
そのためには証明書ファイルが必要となるためキーチェーンアクセスから証明書と秘密鍵をそれぞれ dist.cer, dist.p12 とリネームして書き出します

また、AppleWWDRCA.cer が必要なためAdd iOS Certificate ページの下部からダウンロードします
それぞれを プロジェクトルート/scripts/certs 以下に配置します

Provisioning Profile ダウンロード

AdHoc ビルドをおこなうことができる Provisioning Profile を iOS Dev Center からダウンロードします
これをプロジェクトルート/scripts/profile 以下に配置します

証明書ファイルと Provisioning Profile を暗号化

Travis CI 上で証明書ファイル等を使用してアプリのビルドをおこなうのですが、そのまま GitHub にアップするのは危険なため
ターミナルを起動し AES 256bits CBCモードで暗号化をおこなったものを
アップします ("foo" の部分は任意の文字列に書き換えてください)

完了後、プロジェクトルート/scripts/certs から dist.cer, dist.p12 ファイルは削除します
また、プロジェクトルート/scripts/profile から .mobileprovision ファイルも削除します
作成した .enc ファイルのみを GitHub 上にアップしましょう

復号化するためのキーを.travis.yml に記述

暗号化したファイルは復号化して使用するため、復号化キーが必要になりますが
使用するキーはそのままファイルに記載するわけにはいかないため、
travis encrypt を使用します
ターミナルを起動しプロジェクトルートへ移動後、以下のコマンドを実行します
("foo" の部分は先ほど入力した文字列に書き換えてください)

これで .travis.yml ファイルに登録されます
登録された文字列は Makefile 内で $(ENCRYPTION_SECRET) と記載することで呼び出すことができます

XCode プロジェクトをビルドし .ipa ファイルを作成して、TestFlight へアップロードする

xcodebuild コマンドで .app ファイルを作成し、xcrun コマンドで .ipa ファイルを作成します
その後 dSYM ファイルも作成できるため一緒に TestFlight へアップロードします

  • 各定数の説明
    • $(PROJECT): .xcodeproj ファイルがあるパス (TravisCITestFlight/TravisCITestFlight.xcodeproj)
    • $(SCHEME): TravisCITestFlight
    • $(SDK): 使用する SDK(iphoneos)
    • $(CONFIGURATION): ビルドするモード(AdHoc)
    • $(SIGN): $ travis encrypt “SIGN=iPhone Distribution: hogehoge (hogehoge)” –add コマンドで作成したもの
    • $(CONFIGURATION_TEMP_DIR): tmp ファイルの保存場所
    • $(CONFIGURATION_BUILD_DIR): .app ファイルが作成される場所
    • $(ENCRYPTION_SECRET): $ travis encrypt “ENCRYPTION_SECRET=foo” –add コマンドで作成したもの

ここではキーチェーンの作成と暗号化されたファイルの復号化、
それらを使用したアプリのビルドをおこなっています

.app ファイルから .ipa ファイルを作る

.app ファイルの作成ができたら .ipa ファイルを作ります

  • 各定数の説明
    • $(SDK): 使用する SDK(iphoneos)
    • $(APP_NAME): .app ファイルがあるパス
    • $(IPA_NAME): .iap ファイルをエクスポートするパス
    • $(PROVISIONING_PROFILE): プロビジョニングプロファイルのファイル名

.dSYM ファイルを ZIP ファイル化する

TestFlight でエラーログを追いやすくするため .dSYM ファイルも ZIP ファイル化しアップロードします

  • 各定数の説明
    • $(DSYM_ZIP): ZIP 化したファイルを配置する場所
    • $(DSYM): .dSYM ファイルのパス

TestFlight へアップロードする

curl コマンドを使用して TestFlight へアップロードします
TestFlight API Token と TestFlight Team Token を取得しておきましょう

  • 各定数の説明
    • $(IPA_NAME): .ipa ファイルがあるパス
    • $(DSYM_ZIP): .dSYM.zip ファイルがあるパス
    • $(TF_APITOKEN): TestFlight API Token
    • $(TF_TEAMTOKEN): TestFlight Team Token

実行&まとめ

以上で ひと通りの準備は完了です

最後に、TestFlight へアップロードするのは develop ブランチまたは master ブランチのときだけで良いので .travis.yml の設定は以下のように記述します

これで Push か Pull Request がおこなわれたタイミングでテストが走り、
develop ブランチか master ブランチの場合はアプリのビルド後
TestFlight へのアップロードがおこなわれるようになりました

参考リンク