【iOSアプリ審査対策】Firebase Hostingを使ってApple審査員とデモ動画を共有する


## 概要

ようやく開発が完了し、喜び勇んでアプリを審査に提出するも２、３日後あたりに

**「New Message from App Store Review Regarding...」**の件名メールが。

緊張しながら、Resolution Centerを開いてみると

**Guideline 2.1 - Information Needed**でのリジェクト！

内容は**「デモ動画を共有してくれ」**で、少しだけホッとするというケース。あるかと思います。（私はあります）

新規の初回審査には、このアプリの動作を説明するデモ動画を要求されるパターンが多く

本来は審査提出前に予め準備して置いた方がベターだと思います。

Appleの審査チームへのデモ動画の共有は、Google DriveやDropboxでも良いのですが

アプリで既に、Firebaseを使っている場合では

Firebase Hostingを使った方が手っ取り早かったので、その手順のメモです。


## 環境

- macOS Catalina 10.15.6
- npm 6.14.5
- firebase CLI 8.7.0

## Firebase Hositing

[Firebase Hosting](https://firebase.google.com/docs/hosting)

> Firebase Hosting は、ウェブアプリ、静的コンテンツと動的コンテンツ、マイクロサービス向けの高速で安全性の高いホスティングを提供します。


保存容量や転送容量の制限はありますが、無料で利用出来ます。


## Firebase CLIをインストール

[Firebase CLI リファレンス](https://firebase.google.com/docs/cli?authuser=1#windows-npm)

npmを使った方法で進めます。(npmがまだであればまずはそちらから準備)

まず、firebase-toolsをインストールします。(既に環境があればアップデート)

```shell
npm install -g firebase-tools
```

インストール済みでも、↑を実行して最新バージョンにしておく事が推奨されている様です。

無事に完了したら、次はFirebaseにGoogleアカウントでログインします。

## Firebaseへのログイン認証

```shell
firebase login:ci
```

を実行すると

```
visit this URL on this device to log in:
https://accounts.google.com/o/oauth2/auth?client_id=xxxxxxx...

```

というメッセーが表示され、デフォルトブラウザが起動。

Googleの認証ページが開くので、Firebaseで使用しているアカウントでログイン。

認証が成功した後、ターミナルへ戻るとトークンが表示されています。


```
✔  Success! Use this token to login on a CI server:

XXXXXXXXXXX（トークン）

```

このトークンをコピーしておきます。

## トークンを環境変数へ保存

毎回、コマンドに指定してもいいのですが面倒なので環境変数にFIREBASE_TOKENとして保存しておきます。

```shell
export FIREBASE_TOKEN="コピーしたトークン"
```

一応、以下で確認

```shell
printenv
```

変数の一覧が表示されます。

```
.
.
.
FIREBASE_TOKEN=トークン
```


## 初期化

まずプロジェクトのディレクトリを作成

```shell
mkdir demo-video-hosting
```

作成したディレクトリに移動し

```shell
cd demo-video-hosting
```

初期化を実行します。

```shell
firebase init
```

を実行すると、以降は対話形式でのプロジェクト設定になります。

こんな感じで進みます（Versionによって変わるかも？）

```
? Please select an option: Use an existing project → 既存プロジェクトを使用する

? Select a default Firebase project for this directory:xxxxx  → プロジェクトを選択

? What do you want to use as your public directory?  → 公開ディレクトリ設定。publicのまま

? Configure as a single-page app (rewrite all urls to /index.html)? → SPAにするか？今回はしない
```

全て完了すると、現在のディレクトリに初期ファイルが作成されます。

出来上がった構成

```
./
├── firebase.json
└── public
    ├── 404.html
    └── index.html
```

ここで生成されたindex.htmlには、firebaseの初期化コードなども記述されているので

今回は不要ならば消しておく方が良いと思います。
(ファイルは残して中身を空にするなど)


## デモ動画をアップロード

初期化時に指定した公開ディレクトリ（そのままであれば**public**)

にデモ動画を設置して

```shell
firebase deploy --only hosting
```

を実行。ホスティング環境へデプロイします。

完了すると、メッセージの最後にドメインが表示されます。

```
Hosting URL: https://xxxx-xxxx-xxxx.web.app
```

なお、デプロイ前にテストする場合は

```shell
firebase serve --only hosting
```

を実行すると、ローカルで確認が出来ます。

ただ、手元の環境では何故か動画が再生出来ませんでした。
（index.htmlなどは表示される。動画のURLを叩くとクラッシュしてしまう。。）


## デモ動画の再生を確認

ブラウザ(Safari)から表示させて、きちんと動画が再生されるか確認します。
（ここ審査員サイドなので大事です）

```
https://xxxx-xxxx-xxxx.web.app/demo-video.mp4
```

なお、Firebaseの無料プランでは、月の転送量制限が10GBなので

デモ動画のサイズが大きい場合は注意が必要です。(審査中の一時的な利用であれば問題無いはず)

## 終わりに

デモ動画のおかげで無事に審査承認され、リリースする事が出来ました。

最後に、目的を果たしたら動画を片付けます。

```shell
firebase hosting:disable
```
これで、アップロードしたファイル一式がホスティング上から削除されます。


-----
[Firebase Hosting](https://firebase.google.com/docs/hosting)
[Firebase Pricing](https://firebase.google.com/pricing?hl=ja)