Bitrise + fastlane + Firebase App Distribution でiOS のCI 環境を構築する
こんにちは。次世代システム研究室のT.M です。
はじめに
アプリ開発において、リリース前の動作確認として開発関係者にアプリを配布することが多々あります。その際、iOS ならばTestFlight がありますが、TestFlight はアプリのビルドをしてから配布ができるまでに、AppStore Connect においてビルドの処理時間の30分から1時間ほどの時間が必要です。リリース前の忙しい時に、ビルドの処理時間を待つのはストレスです。そこで本稿では、iOS アプリにおいて関係者に時間を掛けずにアプリを配布するツールである、Firebase App Distribution の導入方法を解説します。Firebase App Distribution とは
アプリを迅速にテスターに配布するためのツールです。似たようなサービスとして、deploygate があります。deploygate の場合、無料アカウントでは過去の保存しておけるアプリのバージョン数に制限がありますが、Firebase App Distribution は無料であっても、制限がありません。一方、deploygate では、配布したアプリのログを収集することができるといった便利な機能がありますが、Firebase App Distribution にはありません。しかし、Firebase Analytics やFirebase Crashlytics などを導入することで近いことができます。しかも、これらのツールは開発版だけではなく、リリース版にも不可欠なものですので、導入することにデメリットはありません。
ここまで説明したところでは、Firebase App Distribution にデメリットが全くないようですが、一つ大きなデメリットがあります。それは、2020年4月現在、まだベータ版である、ということです。そのため、UI やAPI などが変更されてしまい、使えなくなる、という恐れがあります。
実行環境
自動で配布を行うために、以下の環境で実行を行います。CI サーバ: Bitrise
ビルドツール: fastlane
環境構築
Fastfile 作成
firebase-tools のインストール
Firebase App Distribution にアプリをアップロードするために、firebase-tool が必要です。iOS アプリのリポジトリにインストールしますが、一般的にiOS アプリのリポジトリにはnpm のプロジェクトがないので、作成することから始めます。npm init npm install firebase-tools
fastlane にFirebase App Distribution のプラグインのインストール
fastlane のaction だけでは、Firebase App Distribution に配布できませんので、プラグインをインストールします。fastlane add_plugin firebase_app_distribution
Fastfile 作成
CI で実行をするFastfile を作成します。Fastfile は以下の通りです。desc "distribution" lane :distribution do |options| cocoapods carthage( platform: "iOS", cache_builds: true ) match( app_identifier: "APP_IDENTIFIER", type: "adhoc", readonly: "true" ) gym( scheme: "SCHEME", clean: true, export_method: "ad-hoc", include_bitcode: true, output_directory: "./fastlane/builds", output_name: "APP_NAME" ) firebase_app_distribution( app: "FIREBASE_APP_ID", ipa_path: "./fastlane/builds/APP_NAME.ipa", groups: "GROUP", firebase_cli_path: "./node_modules/.bin/firebase" ) endここでは、まず、COCOAPODS, Carthage のライブラリをインストールします。次に、gym, match を使って、アプリのビルド、署名を行います。最後に、firebase_app_distribution で作成された署名済みipa ファイルを指定して、アップロードします。
FIREBASE_APP_ID はFirebase のコンソールで確認することができるID です。GROUP はコンソール上で作成したアプリを配布するグループです。
Bitrise workflow 作成
ノードモジュールのインストール
firebase-tools をインストールするために、ノードモジュールをインストールします。そのために、git clone のステップの後に、Script のステップを追加し、インストールします。以下のコマンドをScript content に追記します。npm ci
fastlane の実行
Script のステップの後に、fastlane のステップを追加し、先ほど作成したdistribution のlane を実行します。以下のコマンドをfastlane に設定します。ios distribution
完成したWorkflow は以下のようになります。ビルドを高速化するためにCache のステップが入っています。
Firebase トークン登録
トークンの作成
CI サーバでfirebase app distribution へアプリをアップロードするために、firebase トークンを作成します。下記コマンドを実行すると、ブラウザで認証を求められ、認証が完了すると、トークンが作成されます。./node_modules/.bin/firebase login:ci
トークンの登録
Bitrise でfirebase を利用するために、FIREBASE_TOKENを登録します。この時、Expose for Pull Requests? をON にしてください。ちなみに、ビルドにおいてmatch を使っているため、MATCH_PASSWORD の登録もしています。アプリインストール
コンソールからテスターを招待すると、招待メールが飛び、そこからUDID の登録およびアプリをインストールできるサイトに遷移します。インストールしたいアプリおよびバージョンを選択し、インストールします。最後に
新しいアプリ配布ツールである、Firebase App Distribution をCI サーバであるBitrise で実行をする方法について解説しました。とても簡単で、そして迅速に配布をすることができました。アプリのインストールも簡単であり、非エンジニアであっても利用することができるかと思います。これらのツールを使って開発環境を向上させていきます。次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集職種一覧からご応募をお願いします。
皆さんのご応募をお待ちしています。