この Codelab について
1. 始める前に
この Codelab では、Firebase App Distribution とその fastlane プラグインを使用して、iOS アプリをテスターに配布し、テストデバイスの UDID を収集してアプリのプロビジョニング プロファイルに登録し、アドホック ビルドをテスターに迅速に提供できるようにする方法を学習します。
学習内容
- Firebase App Distribution と fastlane を使用して、プレリリース版の iOS アプリ(アドホック)をアップロードしてテスターに配布する方法。
- テスターとして登録し、配布されたアプリをテストデバイスにダウンロードする方法。
- App Distribution の fastlane プラグインを使用してテストデバイスの UDID をエクスポートし、テストデバイスをすばやく登録する方法。
- アプリのプロビジョニング プロファイルを更新して再アップロードし、配信する方法。
必要なもの
- Google アカウント
- XCode 11.7 以降がインストールされた Apple マシン
- Xcode でビルドされたアドホックのプレリリース版 iOS アプリ
- 有料の Apple Developer アカウント
- テスト用の物理 iOS デバイス。
iOS シミュレータ アプリは Codelab のほとんどで動作しますが、シミュレータではリリースをダウンロードできません。
それでも、App Distribution テスター ウェブアプリに [ダウンロード] ボタンが表示されていることを確認することで、設定が正常に完了したことを確認できます。
2. 使ってみる
fastlane を設定する
App Distribution は fastlane と統合されており、アプリのプレリリース版ビルドの配布を自動化できます。App Distribution は fastlane の構成と統合されています。
- fastlane をインストールして設定します。
- 設定時にプロジェクトのルート ディレクトリで
fastlane init
を実行し、[手動設定] を選択します。fastlane
というサブディレクトリがあり、そこにFastfile
、Appfile
、Pluginfile
が含まれています。これらは fastlane の構成に使用します。
Firebase CLI をインストールする
また、Firebase CLI もインストールする必要があります。macOS または Linux を使用している場合は、次の cURL コマンドを実行できます。
curl -sL https://firebase.tools | bash
Windows を使用している場合は、インストール手順に沿ってスタンドアロン バイナリを取得するか、npm
経由でインストールします。
CLI をインストールしたら、firebase --version
を実行して 12.0.0
以降のバージョンが報告されることを確認します。
$ firebase --version 12.0.0
3. fastlane を使用してアプリをビルドする
アプリをビルドする
./fastlane/Appfile.
で fastlane のグローバル変数を設定します。アプリの ID と Apple ID を含めます。
app_identifier("<your app's bundle identifier>")
apple_id("<your Apple id>")
- 最初のレーンを作成し、fastlane の
build_app
アクション(gym
とも呼ばれます)を使用してアプリをビルドします。次のコードを./fastlane/Fastfile
に追加します。
default_platform(:ios)
lane :build do
build_app(export_method: "ad-hoc")
end
- 配布用にアプリに署名します。
この Codelab では、get_certificates
(cert
とも呼ばれます)を使用して独自の認証とプロファイルを管理します。get_certificates
は、ローカルで署名証明書を生成し、すべてを macOS キーチェーンに保存します。ただし、通常は fastlane sync_code_signing action
(match
とも呼ばれます)を使用して、チームのコード署名証明書とプロファイルを安全に管理することをおすすめします。
lane :build do
get_certificates()
build_app(export_method: "ad-hoc")
end
get_provisioning_profile
アクション(sigh
とも呼ばれます)を使用して、アプリのプロビジョニング プロファイルを設定します。これにより、アプリをテスターと共有できます。
lane :build do
get_certificates()
get_provisioning_profile(adhoc: true)
build_app(export_method: "ad-hoc")
end
- [省略可] アプリをまだ実行したことがない場合は、次のコマンドを実行して Apple Developer コンソールでアプリを作成します。
$ fastlane produce --skip_itc
- 最後に、レーンを実行してアプリをビルドします。
Apple ID、パスワード(キーチェーンに保存されている)、アプリのバンドル ID を入力するよう求められます。
$ fastlane build
問題が発生した場合は、fastlane トラブルシューティング ガイドをご覧ください。
4. アプリを Firebase にアップロードする
アプリをビルドしたので、App Distribution にアップロードする準備が整いました。
Firebase プロジェクトを作成して設定する
- Firebase にログインします。
- Firebase コンソールで新しいプロジェクトを作成または追加し、プロジェクトに「UDID Export Codelab」という名前を付けます。
このプロジェクトでは Google アナリティクスを有効にする必要はありません。
- [プロジェクトの作成] をクリックします。
iOS アプリをプロジェクトに追加する
- iOS アイコンをクリックして新しい Firebase iOS アプリを作成し、アプリのバンドル ID を入力します。
- 続く手順はスキップして、[Continue to console] をクリックします。SDK は後でアプリに追加します。
プロジェクトとアプリが [プロジェクトの概要] ページに表示されます。
App Distribution を有効にする
- [リリースとモニタリング] セクションで、[アプリ配信] をクリックします。
- 利用規約に同意したら、[使ってみる] をクリックしてアプリの App Distribution を有効にします。
fastlane で配信を設定する
- iOS プロジェクトのルートから次のコマンドを実行して、fastlane の構成に App Distribution を追加します。
コマンドでオプションの選択を求めるプロンプトが表示されたら、オプション 3: RubyGems.org を選択します。
$ fastlane add_plugin firebase_app_distribution
- プラグインがインストールされていることを確認します。
$ fastlane
出力に表示されるインストール済みプラグインのリストに fastlane-plugin-firebase_app_distribution
が表示されます。
- プラグインがインストールされていることを確認したら、オプション 0 を選択してキャンセルします。
Firebase プロジェクトを認証する
fastlane プラグインを使用するには、まず Firebase プロジェクトを認証します。
- 次のコマンドを実行して、CLI を Google アカウントに接続します。
$ firebase login
- コマンドによって認証用のリンクが生成されたら、そのリンクをブラウザで開きます。
- プロンプトが表示されたら、Google アカウントにログインし、Firebase プロジェクトにアクセスするための権限を付与します。
アプリを配布する
これで、アプリを配布する準備が整いました。
./fastlane/Fastfile
の上部で、firebase_app_id
という変数を定義します。<your_app_id>
は、作成したアプリの Firebase アプリ ID に置き換えます(プロジェクト設定ページで確認できます)。
Fastfile
は Ruby で記述されているため、Ruby 構文を使用して変数を定義します。
firebase_app_id = "<your_app_id>"
- ビルドレーンを呼び出す
distribute
という新しいレーンを追加し、firebase_app_distribution
アクションを使用してアプリを配信します。
lane :distribute do
build
firebase_app_distribution(
app: firebase_app_id,
release_notes: "Try out this app!",
)
end
- 新しいレーンを実行してアプリをビルドし、ディストリビューションを作成します。
$ fastlane distribute
この時点で、Fastfile は次のようになります。
firebase_app_id = "<your Firebase app ID>"
default_platform(:ios)
lane :build do
get_certificates()
get_provisioning_profile(adhoc: true)
build_app(export_method: "ad-hoc")
end
lane :distribute do
build
firebase_app_distribution(
app: firebase_app_id,
release_notes: "Try out this app!",
)
end
Firebase コンソールを更新すると、アプリの新しいリリースが表示されます。
5. テスターにアプリのダウンロードを依頼する
テスターがアドホック ビルドのテストへの招待を承諾すると、UDID を共有するかどうか確認されます。テスターが同意すると、App Distribution はテスターのデバイス情報を収集し、メールで通知します。このセクションでは、自分自身をテスターとして追加して、配布したアプリをダウンロードしてテストします。
自分をテスターとしてリリースに追加する
- Fastfile の上部にある
firebase_app_id
で、テスターを保持する変数を作成し、自分のメールアドレスと、試してみたい他のメールアドレス(省略可)を追加します。
firebase_app_id = "<your Firebase app ID>"
app_testers = [
"your@email.com",
"another@email.com",
]
- Ruby の Array#join メソッドを適用して、
app_testers
配列をカンマ区切りの文字列に変換します。これはtesters
パラメータで想定される形式です。次に、結果をfirebase_app_distribution.
のtesters
パラメータに渡します。
lane :distribute do
build
firebase_app_distribution(
app: firebase_app_id,
release_notes: "Try out this app!"
testers: app_testers.join(","),
)
end
この時点で、Fastfile は次のようになります。
firebase_app_id = "<your Firebase app ID>"
app_testers = [
"your@email.com",
"another@email.com",
]
default_platform(:ios)
lane :build do
get_certificates()
get_provisioning_profile(adhoc: true)
build_app(export_method: "ad-hoc")
end
lane :distribute do
build
firebase_app_distribution(
app: firebase_app_id,
release_notes: "Try out this app!",
testers: app_testers.join(","),
)
end
- レーンをもう一度走行します。
$ fastlane distribute
レーンを実行すると、追加したテスターに、新たに利用可能になったリリースに関する招待メールが App Distribution から届きます。Firebase コンソールで、追加したテスターがアプリのリリースの下に表示されるようになります。
メールアドレスを入力したので、Firebase App Distribution からアプリのテストへの招待メールが届きます。これで、最初のテスターになります。テストデバイスでテスターとして設定する手順については、以下のセクションをご覧ください。
テストデバイスを登録する
テスターは、テストへの招待を受けたアプリのリリースにアクセスするには、テストデバイスで Google にログインする必要があります。テストビルドはアドホック リリースであるため、Firebase プロファイルをインストールしてテストデバイスを登録する必要があります。その後、利用可能なリリースには、デバイスのホーム画面に追加されたウェブクリップを使用して、App Distribution テスター ウェブアプリからアクセスできます。
- iOS テストデバイスで、Firebase App Distribution から送信されたメールを開き、[使ってみる] リンクをタップします。リンクは必ず Safari で開いてください。
- App Distribution テスター ウェブアプリが表示されます。表示されたページで Google アカウントにログインし、[招待を承諾] をタップします。
- 招待されたリリースが表示されます。いずれかのリリースで [デバイスを登録] をタップします。
- プロンプトが表示されたら、Firebase プロファイルをダウンロードし、設定アプリにインストールします。
プロファイルをインストールすると、Firebase に次の権限が付与されます。
- デバイスの一意のデバイス ID(UDID)を収集して、テストデバイスを登録する。
Firebase プロジェクトのすべてのオーナーと編集者には、テストデバイスの UDID を含むメールが送信されます。
- テストデバイスのホーム画面にウェブクリップをインストールします。ウェブクリップを使用すると、App Distribution テスター ウェブアプリが開き、すべてのテストアプリをインストールしてアクセスできるようになります。
App Distribution テスター ウェブアプリで、テストデバイスがアプリのリリースに登録されました。
テストデバイスの UDID を Firebase と共有したので、デベロッパーとして再開できます。App Distribution ダッシュボードの [テスター] タブに、アプリのリリースの下にテスター情報が表示され、ステータスが [承認済み] になります。
次のセクションでは、デバイスの UDID をアプリのプロビジョニング プロファイルに追加し、テストデバイスで動作するアプリのバージョンをビルドします。
テスター デバイスの UDID をエクスポートする
デベロッパーには、テストデバイスの UDID が記載されたメールが Firebase から届きます。オプションとして、App Distribution では、Firebase コンソールから未加工のテキスト ファイルとして直接エクスポートすることで、複数の新しいデバイスの UDID を一度に簡単に収集できます。
- すべての UDID をエクスポートするには、[テスターとグループ] タブを開きます。
- [Apple UDID をエクスポート] をクリックします。
このファイルには、テストデバイスの UDID が含まれている必要があります。
Device ID Device Name Device Platform
1234567890 udid.codelab.tester@gmail.com - iPhone SE 2nd Gen ios
UDID は、fastlane を使用してコマンドラインからエクスポートすることもできます。詳しくは、次のセクションで説明します。
6. アプリのプロビジョニング プロファイルを更新して再ビルドする
次に、テストデバイスの UDID をアプリのプロビジョニング プロファイルに追加し、デバイスで動作するアプリのバージョンを再ビルドして、新しいバージョンを配布します。
UDID エクスポート レーンを追加
- Fastfile の上部に別の変数を追加し、テスターのデバイスの UDID がダウンロードされるファイルパスに設定します。
firebase_app_id = "<your Firebase app ID>"
app_testers = [
"your@email.com",
"another@email.com",
]
tester_udids_file = "tester_udids.txt"
- コンソールから行ったように、App Distribution プラグインの UDID エクスポート アクションを使用してテスターの UDID をダウンロードする新しいレーンを設定します。
lane :download_udids do
firebase_app_distribution_get_udids(
app: firebase_app_id,
output_file: tester_udids_file,
)
end
- 次のレーンを実行して UDID をダウンロードします。
$ fastlane download_udids
- ダウンロードしたファイルを印刷します。このファイルには、テストデバイスの UDID が含まれています。
$ cat tester_udids.txt
Apple Developer Console にデバイスを追加する
- 次のレーンを作成して、Apple Developer コンソールのデバイスリストに UDID を追加し、fastlane の
register_devices
アクションを使用してプロビジョニング プロファイルに追加できるようにします。
lane :add_new_devices do
register_devices(devices_file: tester_udids_file)
end
- 次に、レーンを実行します。
$ fastlane add_new_devices
デベロッパー コンソールのデバイスのリストに新しいデバイスが表示されます。
プロビジョニング プロファイルにデバイスを追加する
- ビルドするたびに新しいデバイスを強制的に取得するように、
build
レーンのプロビジョニング プロファイル ステップにforce
引数を追加します。
lane :build do
get_certificates()
get_provisioning_profile(adhoc: true, force: true)
build_app(export_method: "ad-hoc")
end
レーンを再実行してビルドしてアップロードする
次に、distribute
レーンを新しいレーンを使用して更新し、デバイスをプロビジョニング プロファイルに追加して、アプリを再ビルドし、配布します。
distribute
から新しいレーンを呼び出します。
lane :distribute do
download_udids
add_new_devices
build
firebase_app_distribution(
app: "1:123456789:ios:abcd1234",
release_notes: "Try out this app!"
testers: app_testers.join(","),
)
end
distribute
レーンを実行します。
$ fastlane distribute
この時点で、Fastfile は次のようになります。
firebase_app_id = "<your Firebase app ID>"
app_testers = [
"your@email.com",
"another@email.com",
]
tester_udids_file = "tester_udids.txt"
default_platform(:ios)
lane :build do
get_certificates()
get_provisioning_profile(adhoc: true, force: true)
build_app(export_method: "ad-hoc")
end
lane :distribute do
download_udids
add_new_devices
build
firebase_app_distribution(
app: firebase_app_id,
release_notes: "Try out this app!",
testers: app_testers.join(","),
)
end
lane :download_udids do
firebase_app_distribution_get_udids(
app: firebase_app_id,
output_file: tester_udids_file,
)
end
lane :add_new_devices do
register_devices(devices_file: tester_udids_file)
end
テストデバイスからリリースをダウンロードする
これで、アプリにテストデバイスの UDID が含まれるようになりました。テストデバイスにアプリをインストールできます。
- テストデバイスで、メール内のリンクまたはデバイスのホーム画面のアイコンを使用して、App Distribution テスター ウェブアプリに戻ります。
UDID Codelab アプリに移動すると、リリースをダウンロードできる状態になっていることがわかります。
- 実機をお持ちの場合は、ダウンロードを押してアプリをインストールして実行します。
7. 完了
これで、App Distribution と fastlane を構成して、プレリリース テストプロセスを自動化できました。これで、追加のテスターを招待したり、テスターの UDID をアプリに追加したりする際に、fastlane distribute
という 1 つのコマンドを実行するだけで済みます。
テスターから UDID を個別に収集したり、Apple Developer Console にアクセスしてデバイスリストやプロビジョニング プロファイルを更新したりする必要がなくなります。XCode を開く必要もありません。
このワークフローは、継続的インテグレーション環境で 1 時間ごとまたは 1 日ごとに実行するように簡単に設定できます。
関連情報
- iOS 向けインアプリ SDK など、Firebase App Distribution の機能を確認する
- fastlane の詳細
match
を使用してチームのコード署名を管理する- fastlane を CI に統合する