App Distribution と fastlane を使用して、プレリリース版の iOS ビルドを迅速に配布します

1. 始める前に

4cddd34bd261cea0.png

この Codelab では、Firebase App Distribution とその fastlane プラグインを使用して、テスターに iOS アプリを配布し、テストデバイスの UDID を収集してアプリのプロビジョニング プロファイルに登録する方法を学びます。これにより、テスターに Ad Hoc ビルドを迅速に提供できます。

学習内容

  • Firebase App Distribution と fastlane を使用して、プレリリースの iOS アプリ(アドホック)をアップロードしてテスターに配布する方法。
  • テスターとして登録し、配布されたアプリをテストデバイスにダウンロードする方法
  • App Distribution の fastlane プラグインでテストデバイスの UDID をエクスポートして、テストデバイスをすばやく登録する方法。
  • アプリのプロビジョニング プロファイルを更新し、配信用に再アップロードする方法。

必要なもの

  • Google アカウント
  • XCode 11.7 以降がインストールされた Apple マシン
  • Xcode で構築された、Ad Hoc のプレリリース版 iOS アプリ
  • 有料の Apple Developer アカウント
  • テスト用の物理 iOS デバイス。

ほとんどの Codelab では iOS シミュレータ アプリを使用できますが、リリースはダウンロードできません。

App Distribution テスター ウェブアプリに [ダウンロード] ボタンが表示されていれば、設定が正常に機能していることを確認できます。

2. 使ってみる

fastlane を設定する

App Distribution は fastlane と統合されており、アプリのプレリリース版ビルドの配布を自動化できます。App Distribution は fastlane 構成と統合されています。

  1. fastlane をインストールしてセットアップします
  2. セットアップ中にプロジェクトのルート ディレクトリで fastlane init を実行し、[手動セットアップ] を選択します。fastlane というサブディレクトリがあり、FastfileAppfilePluginfile が含まれています。これらは 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 でアプリをビルドする

アプリをビルドする

  1. ./fastlane/Appfile.fastlane のグローバル変数を設定します。アプリの ID と Apple ID を含めます。
app_identifier("<your app's bundle identifier>")
apple_id("<your Apple id>")
  1. 最初のレーンを作成し、fastlane の build_app アクション(gym とも呼ばれます)を使用して ./fastlane/Fastfile に以下を追加し、アプリをビルドします。
default_platform(:ios)

lane :build do
    build_app(export_method: "ad-hoc")
end
  1. アプリに署名して配布する。

この Codelab では、get_certificatescert とも呼ばれます)を使用して独自の証明書とプロファイルを管理します。署名証明書はローカルで生成され、すべてが macOS キーチェーンに保存されます。ただし、通常は fastlane sync_code_signing actionmatch とも呼ばれます)を使用して、チームのコード署名証明書とプロファイルを安全に管理することをおすすめします。

lane :build do
    get_certificates()
    build_app(export_method: "ad-hoc")
end
  1. get_provisioning_profile アクション(sigh)を使用して、アプリのプロビジョニング プロファイルを設定します。これにより、アプリをテスターと共有できるようになります。
lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true)
    build_app(export_method: "ad-hoc")
end
  1. [省略可] アプリを初めて実行する場合は、次のコマンドを実行して Apple Developer Console でアプリを作成します。

$ fastlane produce --skip_itc

  1. 最後に、レーンを実行してアプリをビルドします。

Apple ID、パスワード(キーチェーンに保存されているパスワード)、アプリのバンドル ID を入力するよう求められます。

$ fastlane build

問題が発生した場合は、fastlane のトラブルシューティング ガイドをご覧ください。

4. アプリを Firebase にアップロードする

アプリがビルドされたので、次は App Distribution にアプリをアップロードします。

Firebase プロジェクトを作成して設定する

  1. Firebase にログインします。
  2. Firebase コンソールで新しいプロジェクトを作成または追加し、プロジェクトに「UDID Export Codelab」という名前を付けます。

このプロジェクトでは Google アナリティクスを有効にする必要はありません。

  1. [プロジェクトの作成] をクリックします。

iOS アプリをプロジェクトに追加する

  1. iOS アイコンをクリックして新しい Firebase iOS アプリを作成し、アプリのバンドル ID を入力します。

9c26c130a6c42212.png

  1. 次の数ステップをスキップして、[コンソールに進む] をクリックします。後でアプリに SDK を追加します。

これで、[プロジェクトの概要] ページでプロジェクトとアプリを利用できるようになります。

66f79cc8a97fa8e9.png

App Distribution を有効にする

  1. [Release & Monitor] セクションで、[App Distribution] をクリックします。
  2. 利用規約に同意したら、[始める] をクリックして、アプリの App Distribution を有効にします。

460213326c2784ae.png

fastlane にディストリビューションを設定する

  1. iOS プロジェクトのルートから次のコマンドを実行して、App Distribution を fastlane 構成に追加します。

コマンドでオプションを求められたら、[Option 3: RubyGems.org] を選択します。

$ fastlane add_plugin firebase_app_distribution

  1. プラグインがインストールされていることを確認します。

$ fastlane

出力では、インストールされているプラグインのリストに fastlane-plugin-firebase_app_distribution が表示されます。

  1. プラグインがインストールされていることを確認したら、オプション 0 を選択してキャンセルします。

Firebase プロジェクトを認証する

fastlane プラグインを使用するには、まず Firebase プロジェクトを認証します。

  1. 次のコマンドを実行して、CLI を Google アカウントに接続します。

$ firebase login

  1. コマンドによって認証リンクが出力されたら、ブラウザでそのリンクを開きます。
  2. プロンプトが表示されたら、Google アカウントにログインし、Firebase プロジェクトにアクセスする権限を付与します。

アプリを配布する

アプリを配布する準備が整いました。

  1. ./fastlane/Fastfile の先頭に、firebase_app_id という変数を定義します。<your_app_id> は、作成したアプリの Firebase アプリ ID に置き換えます(これはプロジェクトの設定ページで確認できます)。

Fastfile は Ruby で記述されているため、Ruby 構文を使用して変数を定義します。

firebase_app_id = "<your_app_id>"
  1. ビルドレーンを呼び出す distribute という新しいレーンを追加し、firebase_app_distribution アクションを使用してアプリを配布します。
lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
    )
end
  1. 新しいレーンを実行してアプリをビルドし、配信を作成します。

$ 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 コンソールを更新すると、アプリの新しいリリースが表示されます。

c59dc1a94de3bf3c.png

5. アプリをダウンロードするようテスターを招待する

テスターがアドホック ビルドのテストへの招待を承諾すると、UDID を共有する許可を求められます。同意した場合、App Distribution はデバイス情報を収集し、メールでデベロッパーに通知します。このセクションでは、自分自身をテスターとして追加し、配布したアプリをダウンロードしてテストします。

自分自身をリリースのテスターとして追加する

  1. Fastfile の上部にある firebase_app_id で、テスターを格納する変数を作成します。ここに、あなた自身のメールアドレスと、使用したいその他のメールアドレスを入力します。
firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]
  1. 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
  1. もう一度レーンを走らせよう。

$ fastlane distribute

レーンを実行すると、追加したテスターに、新しく利用可能になったリリースを通知する招待メールが App Distribution から届きます。これで、アプリのリリースに追加したテスターを Firebase コンソールで確認できるようになりました。

2e0fc9603b868af8.png

メールアドレスを入力したので、アプリのテストを案内するメールが Firebase App Distribution から届きます。これで最初のテスターになりました。テストデバイスでテスターとして設定するには、以下の操作に進みましょう。

テストデバイスを登録する

テスターとして招待されたアプリのリリースにアクセスするには、テストデバイスで Google にログインする必要があります。テストビルドはアドホック リリースであるため、Firebase プロファイルをインストールしてテストデバイスも登録する必要があります。その後、利用可能になったリリースには、デバイスのホーム画面に追加されたウェブクリップを使用して、App Distribution テスター ウェブアプリからアクセスできます。

  1. iOS のテストデバイスで、Firebase App Distribution から送信されたメールを開き、[使ってみる] リンクをタップします。Safari でリンクを開きます。
  2. App Distribution テスター ウェブアプリが表示されます。表示されたページで Google アカウントでログインし、[招待に応じる] をタップします。

d833407de251b89f.png

  1. 招待されているリリースが表示されます。いずれかのリリースの下にある [デバイスを登録] をタップします。

fd141215e54a938d.png

  1. プロンプトが表示されたら、Firebase プロファイルをダウンロードして、設定アプリにプロファイルをインストールします。

プロファイルをインストールすると、Firebase に次の権限が付与されます。

  • デバイスの一意のデバイス ID(UDID)を収集して、テストデバイスを登録します。

Firebase プロジェクトのオーナーと編集者全員に、テストデバイスの UDID を含むメールが送信されます。

  • テストデバイスのホーム画面にウェブクリップをインストールします。ウェブクリップで App Distribution テスター ウェブアプリが開き、すべてのテストアプリをインストールしてアクセスできます。

App Distribution テスター ウェブアプリで、アプリのリリース用にテストデバイスが登録されます。

fe93d649dfa25877.png

テストデバイスの UDID が Firebase と共有され、デベロッパーとして再開できるようになりました。App Distribution ダッシュボード[テスター] タブで、アプリのリリースの下にテスター情報が [承認済み] ステータスで表示されます。

7b9f665a63a384cf.png

次のセクションでは、デバイスの UDID をアプリのプロビジョニング プロファイルに追加してから、テストデバイスで動作するアプリのバージョンを構築します。

テスター デバイスの UDID をエクスポートする

デベロッパーには、テストデバイスの UDID が記載されたメールが Firebase から届きます。オプションの App Distribution では、Firebase コンソールから未加工のテキスト ファイルとして直接エクスポートできるため、複数の新しいデバイス UDID を一度に簡単に収集できます。

  1. すべての UDID をエクスポートするには、[テスターとグループ] タブを開きます。

241a9936898a2fc0.png

  1. [Export Apple UDIDs] をクリックします。

bcf0c26c522d9b4e.png

このファイルには、テストデバイスの UDID が含まれている必要があります。

Device ID            Device Name                            Device Platform
1234567890     udid.codelab.tester@gmail.com - iPhone SE 2nd Gen        ios

UDID は、次のセクションで fastlane を使ってコマンドラインからエクスポートすることもできます。

6. アプリのプロビジョニング プロファイルを更新して再構築する

次に、テストデバイスの UDID をアプリのプロビジョニング プロファイルに追加し、デバイスで動作するアプリのバージョンを再ビルドして、新しいバージョンを配布します。

UDID エクスポート レーンを追加

  1. Fastfile の先頭に別の変数を追加し、テスターのデバイス UDID をダウンロードするファイルパスを設定します。
firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]
tester_udids_file = "tester_udids.txt"
  1. コンソールから行ったように、App Distribution プラグインの UDID エクスポート アクションを使用してテスターの UDID をダウンロードする新しいレーンを設定します。
lane :download_udids do
    firebase_app_distribution_get_udids(
        app: firebase_app_id,
        output_file: tester_udids_file,
    )
end
  1. 次のレーンを実行して UDID をダウンロードします。

$ fastlane download_udids

  1. ダウンロードしたファイルを出力します。このファイルには、テストデバイスの UDID が含まれています。

$ cat tester_udids.txt

Apple Developer Console にデバイスを追加する

  1. 次のレーンを作成して Apple Developer Console のデバイスリストに UDID を追加します。これにより、fastlane register_devices アクションを使用してプロビジョニング プロファイルに追加できます。
lane :add_new_devices do
    register_devices(devices_file: tester_udids_file)
end
  1. 次に、レーンを実行します。

$ fastlane add_new_devices

デベロッパー コンソールのデバイスリストに新しいデバイスが表示されます。

プロビジョニング プロファイルにデバイスを追加する

  1. build レーンのプロビジョニング プロファイル ステップに force 引数を追加し、ビルドのたびに新しいデバイスが認識されるようにします。
lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true, force: true)
    build_app(export_method: "ad-hoc")
end

レーンを再実行し、ビルドしてアップロードする

次に、デバイスをプロビジョニング プロファイルに追加し、アプリを再ビルドして配布するために、distribute レーンを新しいレーンで更新します。

  1. 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
  1. 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 が追加されたので、テストデバイスにインストールできます。

e275f73d57cc8fb1.png

  1. テストデバイスで、メールに記載されているリンクまたはデバイスのホーム画面のアイコンを使用して、App Distribution テスター ウェブアプリに戻ります。

UDID Codelab アプリに移動すると、リリースをダウンロードする準備ができていることがわかります。

dad6d03b6ad78746.png

  1. 実機を使用している場合は、[Download] を押してアプリをインストールして実行します。

7. 完了

これで、プレリリース テストプロセスを自動化するための App Distribution と fastlane の構成が完了しました。1 つのコマンド(fastlane distribute)を実行するだけで、テスターを追加招待したり、アプリにテスターの UDID を追加したりできます。

そのため、テスターから UDID を個別に収集したり、Apple Developer Console にアクセスしてデバイスリストを更新したり、プロファイルをプロビジョニングしたりする必要がなくなります。XCode を開く必要はありません。

このワークフローは、継続的インテグレーション環境で毎時間または毎日実行するように簡単に設定できます。

関連情報