Circle CI の iOS ビルドは現在無料では利用できなくなったので、BITRISE という無料で iOS ビルドが利用できるサービスに移行しました。簡単に構築の流れをおさらいしておきます。
処理の流れ
主に以下の処理を実現していきます。
- Build Number を自動的にインクリメントできるようにします。
- Apple Developer にログインして、プロビジョ二ングプロファイルを自動的に取得します。
- Adhoc あるいは AppStore 用の署名を行えるようにします。
- Github の master に PUSH されたら、AdHoc ビルドを行い fabric 経由で配信するようにします。
- release あるいは develop で始まるブランチが作成されてたら、リリースビルド後 iTunes Connect にアップロードを行い、そのまま Testflight あるいは審査に出せるようにします。
アプリケーションの連携
まずは、BITRISE に Github プロジェクトを連携させます。BITRISE へは Github ログインでログインすると進めやすいです。
- ADD NEW APP よりアプリケーションを設定します。
- Github のリポジトリ設定画面で BITRISE で発行された Webhooks を登録します。
ワークフローの設定
BITRISE ではワークフローと呼ばれる、各処理を連結させる仕組みがあります。fastlane やシェル実行など大抵のものは雛形が用意されているので、殆どのケースでプログラミングなどせずに処理を定義することができます。
今回は、master / release のワークフローを用意し、以下のように設定しました。
- Preparing the Build Environment
- Activate App SSH key
- Git Clone Repository
- Run CocoaPods install
- Set Xcode Project Build Number
- fastlane
- Deploy to bitrise.io
- Cleaning up the Virtual Machine
Set Xcode Project Build Number は、Build Number をインクリメントするための雛形になります。
標準では BITRISE のビルド番号が入るようになっていますが、今回は Circle CI からの移行ですので、Build Number Offset を 1000 にして、1000 から始まるようにしています。
環境変数の設定
ビルド中に利用する環境変数を管理画面から設定しておきます。
ワークフローの設定項目に Secret Env Vars というのがるので、今回はそこから設定しました。
KEYCHAIN_NAME ios-build.keychain KEYCHAIN_PASSWORD キーチェーンのパスワード P12_PASSPHRASE 証明書のパスフレーズ DELIVER_PASSWORD Apple IDのパスワード CRASHLYTICS_API_TOKEN FabricのAPI KEY CRASHLYTICS_BUILD_SECRET FabricのBuild Secret GYM_CODE_SIGNING_IDENTITY コード署名に使うIDを設定
トリガーの設定
PUSH が行われた際に、どのブランチでの操作かによってワークフローを振り分けることができます。
ワークフローの設定項目に Triggers というのがるので、そこから設定します。
トリガーは登録順に評価されていきます。 * でワイルドカード指定も可能です。
- Trigger pattern: master – will trigger Workflow: master
- Trigger pattern: release* – will trigger Workflow: release
- Trigger pattern: develop* – will trigger Workflow: release
fastlane の設定
Circle CI で利用していたものを再利用できますが、以下のようなレーンを定義しています。
lane :adhoc do create_keychain( default_keychain: true, unlock: true, timeout: 3600, lock_when_sleeps: true ) import_certificate certificate_path: "Resources/ios_distribution.cer" import_certificate certificate_path: "Resources/ios_distribution.p12", certificate_password: ENV["P12_PASSPHRASE"] sigh( adhoc: true, ) ENV["PROFILE_UDID"] = lane_context[SharedValues::SIGH_UDID] gym( clean: true, use_legacy_build_api: true, scheme: "Sample", configuration: "AdHoc", ) crashlytics( groups: "developers", notifications: false ) end lane :release do create_keychain( default_keychain: true, unlock: true, timeout: 3600, lock_when_sleeps: true ) import_certificate certificate_path: "Resources/ios_distribution.cer" import_certificate certificate_path: "Resources/ios_distribution.p12", certificate_password: ENV["P12_PASSPHRASE"] sigh ENV["PROFILE_UDID"] = lane_context[SharedValues::SIGH_UDID] gym( clean: true, use_legacy_build_api: true, scheme: "Sample", configuration: "Release", ) testflight( skip_submission: true ) end
完成
これで一通り動作すると思います。簡単ですね!