Firebase App DistributionでのiOSアプリ配布をfastlaneで自動化


![](https://i.imgur.com/or5wpLt.png)

先日Firebase App Distributionのbeta版がリリースされました。

https://firebase.google.com/docs/app-distribution#example_implementation_path
> Firebase App Distribution を使用すると、Trusted Tester（テスター）にアプリを簡単に配布できます。アプリをテスターのデバイスに迅速に配布できるので、早い段階からフィードバックを得ることができます。

これからアプリ配布がFirebase上で実現できるようになります。
Fabricで今までアプリ配布してた場合、今後はFirebaseへの移行が推薦されると思います。

この記事では、

- Firebase App Distributionを手動で利用する作業について
- fastlaneを用いたFirebase App Distributionアップロード方法
- BitriseでFirebase App Distributionにアップロードする方法
- Firebase App Distributionの使い勝手について

を記載します。

## Firebase App Distributionを手動で利用する作業について

Firebase App Distributionがコンソール画面に登場しました。

<img width=240px src="https://i.imgur.com/bbN7fwW.png">

fastlaneを用いないで、手動で利用する場合の作業は主に2つ。

- テスターの追加・テストグループの作成
- .ipaファイルをドラッグ&ドロップして配信

### テスターの追加・テストグループの作成

Firebase App Distributionでアプリを配布する際、
全端末で簡単にアプリをインストールできるわけではありません。

テスターにメールアドレスを登録する必要があります。
テスターの追加方法は2種類あります。

すでにFirebase Consoleに追加済みのメンバーの場合、
以下の「テスターを追加する」にアドレスを入力するだけでOKです。

![](https://i.imgur.com/wh7v2Wj.png)

Firebase Consoleに追加されていないメンバーの場合、
招待リンクを作成して、配布することができます。

![](https://i.imgur.com/VERGse7.png)

テスターを追加したら、テストグループを作成することができます。

### .ipaファイルをドラッグ&ドロップして配信

XcodeでArchive実行して、.ipaファイルをExportします。
（詳しい説明は省略します。）

作成した.ipaファイルを以下にドラッグ&ドロップします。

![](https://i.imgur.com/bUu6Zun.png)

その後、手順に沿って

1. テスター又はテスターグループを選択
2. リリースノートを記載（任意）
3. 配信

を行えば、アプリ配布が完了です。
テスターを選択する際、毎回テスター全員分を選択するのは面倒なので、
事前にテスターグループを作成しておくと、ここの作業が楽になります。

### アプリをインストールする

配信が行われると、テスターにメールが送られます。
以下の手順に沿ってアプリをインストールします。

1. メールのAccept Invitationをタップ
2. Safariで起動
3. Googleサインイン（テスターとして登録したアドレス）
4. 同意にチェックを入れてAccept Invitationをタップ
5. Install Firebase Profileをタップ
6. アラートのAllowを選択
7. Closeをタップ
8. Profileがインストールするために、設定アプリを立ち上げる
9. トップ画面にある「プロファイルをダウンロード」を選択
10. インストールを選択
11. パスコードを入力してインストール
12. 完了すると「App Distribution」というアプリがインストール、立ち上げる
13. Test apps一覧が表示されたらOK。対象のアプリをインストールします。

### 注意1: アプリをインストールできない時

テスターに追加するだけでは、アプリを端末にインストールできない場合があります。
その場合は、Apple Developer Programの方に端末登録していないか確認してください。

EnterpriseならApple Developer Programの方に登録しなくても大丈夫（なはず）ですが、
Adhocなどの場合は端末登録が必須です。

### 注意2: GoogleサインインはSafariで

メールアプリでAccept Invitationをタップしたら、
メールアプリ内でGoogleサインイン画面が出てきます。
ここでサインインをするのは推薦しません。

後々アプリインストール処理はSafariアプリで行います。
そのため、サインインをするのは、Safariアプリに移動してからするのを推薦します。

### 注意3: アプリのインストールにめっちゃ時間がかかる

アプリインストールを開始すると「？」のついたアイコンが出現します。
そして、なかなかインストール完了してくれません。
自分の環境では、調子悪いときは15分くらいインストールに時間がかかります。

ここはグッとこらえて、「？」アイコンを途中で押したりせず、時間を待ちましょう。
Firebaseさんにここは改善して欲しいです。

## fastlaneを用いたFirebase App Distributionアップロード方法

ここからが本題です。fastlaneを用いて、
Firebase App Distributionへの.ipaアップロードを自動化します。

### fastlaneとは

詳しい説明・セット方法は今回は省略しますが、簡単に言うと、
アプリ（iOS,Android）のリリース作業を自動化するCUIツールです。

Rubyで出来ており、プロジェクトのrootディレクトリ階層に、

fastlane
└Fastfile
└Appfile

というフォルダ構成で、FastfileとAppfileという2つのファイルがメインであります。
Fastfileに自動化のコードを書きます。
以下ではFastfileに書く内容を記載しています。

### Firebase App Distributionへのアップロードを実現するコード

先にFastfileに書く内容を提示してから、補足説明をします。
※hogeは自身の環境のものに置き換えてください。

```ruby
  desc "deploy STG on Firebase App Distribution"
  lane :distribution do
    # .ipaファイルの作成
    gym(
      workspace: "hoge.xcworkspace",
      scheme: "hoge",
      export_method: "ad-hoc",
      export_options: {
        method: 'ad-hoc',
        teamID: 'hoge',
        provisioningProfiles: {
          'hoge（Bundle Identifier）' => 'hoge（Provisioning Profile Name）'
        }
      }
    )

    # firebase app distributionに.ipaアップロード
    firebase_app_distribution(
      app: "hoge（appId）",
      testers: "hoge1@example.com, hoge2@example.com",
      release_notes: "hoge",
      firebase_cli_path: "node_modules/.bin/firebase"
    )
  end
```

上記の場合、プロジェクトRootディレクトリで、

```
$ fastlane distribution
```

とコマンドを打てば実行されます。
fastlaneのバージョンをbundlerで管理している場合は、

```
$ bundle exec fastlane distribution
````

となります。

### .ipaファイルの作成

.ipaファイルを作成するためのコードを書きます。
既に.ipaファイルが作成されている場合は省略できます。

上記ではgymで書いていますが、 `build_app` で書いてもいいと思います。

- workspace: 対象のworkspace名、cocoapods未使用ならxcodeproj
- scheme: 対象のscheme名
- export_method: [app-store, ad-hoc, enterprise, development]
- method: export_methodと合わる
- teamID: https://developer.apple.com/account/#/membershipで確認
- provisioningProfiles: Bundle IdentifierとProvisioning Profileのセット

### firebase app distributionに.ipaアップロード

firebase app distributionにアップロードするためのコードを書きます。

- app: FirebaseのアプリID、コンソールの設定画面から確認
- testers: テスターのアドレス
- release_note: リリースノート（任意項目）
- firebase_cli_path: 後述

testersには、テスターグループを設定できない説。
自分が調べた限りでは見つかりませんでした。ここはグループを設定したい。

### 補足: firebase_cli_pathについて

FirebaseのCLIのpathです。そのまんまですね。

プロジェクトファイルに`package.json`が入ってない方へ。
以下の作業が必須となります。

一言でいうと、firebase-toolsを利用できるようにする必要があります。
firebase-toolsを使って、Firebase App Distributionへアップロードをするのです。

まずnpmのinitialize。package.jsonが作成されます。
※npmのセットアップについて今回は説明を省略します。

```
$ npm init
```

続いて、npmでfirebase-toolsをインストール。

```
$ npm install firebase-tools
```

これでfirebase-toolsがインストールされました。
node_modulesはgit管理する必要はないので、.gitigoreに追記しておきます。

```
node_modules/
```

これにより、FirebaseのCLIが用意されたことになります。
おそらく `node_modules/.bin/firebase` になると思います。
これをfirebase_cli_pathに設定してあげれば良いわけです。

### 補足: Firebaseログイン

ターミナルでFirebaseログインできていなかったら、
コマンドを打ってもFirebase App Distributionへアップロードはできません。

事前にログインしておく必要があります。
下記コマンドを打って、ブラウザ上でログインしてください。
※コマンド実行には、firebase-toolsが必要です。

```
$ firebase login
```

<img width=480px src="https://i.imgur.com/8lngexg.png">

ログインが完了すると、ターミナルに `token` が表示されます。
これはBitriseで設定などする際に必要なので、どこかにメモしておいてください。

### 補足: fastlaneにプラグイン追加

fastlaneにfirebase_app_distributionプラグインを追加する必要があります。

```
$ fastlane add_plugin firebase_app_distribution
```

又は、

```
$ bundle exec fastlane add_plugin firebase_app_distribution
```

### fastlaneコマンド実施

設定についての説明は以上です。
これで実行できれば良いのですが、まだまだ躓く可能性があります。

いくつかケースを以下に記載します。

### 困ったこと: "プロジェクト名.app" requires a provisioning profile with the Push Notifications feature.

Provisioning Profileがないという。

automatically manage signingの設定だったので、
対象のProvisioning Profileが作れてなかったのでした。。

## BitriseでFirebase App Distributionにアップロードする方法

こちらがかなり参考になります。
https://qiita.com/xxminamixx/items/2d21bdb729d5c5d6717c

ただ自分の環境だと、別問題でなんかうまくいかない...
ちゃんと設定できたら記載したいと思います。

TBA（To Be Action）

## Firebase App Distributionの使い勝手について

完全に個人的な印象ですが、記載しておきます。

- わりと使いやすい印象です。無料プランでも利用できるのでお手軽。
- 端末にアプリインストールする時間が結構かかるのは難点。
- DeployGateは使いやすいと思うので、使ってる方はわざわざ移行しなくても良いかも。
- FabricやBitriseなど使ってた方は移行した方が良さそう。

## まとめ

少しでも皆さんの参考になれば幸いです。

## 参考

- 公式: Firebase コンソールを使用してテスターにiOSアプリをテスターに配布する  
https://firebase.google.com/docs/app-distribution/ios/distribute-console
- 公式: fastlaneでFirebase App Distributionにアップロード  
https://firebase.google.com/docs/app-distribution/ios/distribute-fastlane
- Bitrise公式: iOS Auto Provision  
https://devcenter.bitrise.io/jp/code-signing/ios-code-signing/ios-auto-provisioning/
- Bitrise公式: Apple DeveloperアカウントをBitriseと連携させる  
https://devcenter.bitrise.io/jp/getting-started/connecting-apple-dev-account/
- fastlane公式: gym  
https://docs.fastlane.tools/actions/gym/
- fastlane公式: Building your app  
https://docs.fastlane.tools/getting-started/ios/beta-deployment/
- [iOS] Firebase App Distributionを使用してiOSアプリを配布する  
https://dev.classmethod.jp/smartphone/ios-firebase-distribution/
- Could not find transporter at /Applications/Xcode-beta.app/Contents/Developer/  
https://stackoverflow.com/questions/57754658/xcode-11-fastlane-deliver-failed
- https://qiita.com/nokono/items/733bb32bf7cc899fe79c
- https://qiita.com/koogawa/items/fb89c1ae8ff6913a184d
- https://qiita.com/Yoshipe/items/f89449b716968a59e57d