Firebase で開発環境と本番環境を切り替える方法 (iOS)

## はじめに
こんにちは！ iOSエンジニアの[やまたつ](https://twitter.com/yamatatsu109_ja) です☺️
[Oshidori](https://apps.apple.com/jp/app/oshidori/id1463179915#?platform=iphone)というアプリを個人で開発し、リリースしています！

Oshidoriを開発する時に、Firebaseをバックエンドとして利用しています。
今までは本番環境のみで利用してきましたが、ユーザーが少しずつ増え（本当にちょっとだけ）、本番環境で開発していると誤ってユーザーの情報を消してしまう恐れが出てきたり、下手にテストができなくなってきました。
そのため、本番環境と開発環境を作成し、開発するときは開発環境のFirebaseプロジェクト、リリースするときは本番環境のFirebaseプロジェクトに分けました！

その備忘録と、私のように環境を分けたい方向けの資料になります！
内容が良かったら「いいね」をお願いいたします🙇‍♂️（励みになります）

## 対象者
- Scheme の切替でFirebaseのプロジェクトつなげ先を変えたい人
- できるだけ簡単に済ませたい人


## Firebaseでプロジェクトを２つ作成

以下の方法で2つのプロジェクトを作成し、GoogleService-info.plist を入手しましょう。
Firebaseはドキュメントが充実していて嬉しい。

[Firebase公式ドキュメント：Firebase を iOS プロジェクトに追加する
](https://firebase.google.com/docs/ios/setup?hl=ja)

![スクリーンショット 2019-10-22 午後3.01.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326574/b517dc8f-7c80-eef3-c40d-bd334b5bce39.png)



## TARGET の作成

TARGET の切替で本番環境と開発環境を分けたいので、TARGETを作成します。
複製したいTARGETの上で右クリックすると、`Duplicate` と出てくるのでクリックすると、複製できます！(Schemeも追加される)
以下を参考にするとできるかと！
Info.plist も1つで管理した方が良いと思うので、記事を参考に進めてみてください。

[iOSアプリのビルドTARGETを複数作る @alt_yamamoto さん](https://qiita.com/alt_yamamoto/items/c3b78b24d0ff5ddc93f9)


## GoogleService-Info.plist の設定

アプリにディレクトリ分けて入れておく。
そうすると名前を変更せずに入れることができます。

<img width="258" alt="スクリーンショット 2019-10-22 午後5.09.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326574/dfe2c973-95d1-124c-9bf8-db948b858ec5.png">

あとは使うものにチェックを入れるだけ！どちらかにしないとダメですよ！

|本番環境|開発環境|
|---|---|
|<img width="262" alt="スクリーンショット 2019-10-22 午後5.11.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326574/c84b3805-7c11-e911-f1fd-bcb4dece910e.png">|<img width="264" alt="スクリーンショット 2019-10-22 午後5.11.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326574/025680ca-fe76-0cda-26bb-411aaa86c3b6.png">|


どうでしたか？スムーズにできていたら嬉しいです！


# +α
余裕がある方はもう少し設定を加えてみましょう☺️

## TARGET の設定

`Bundle Identifier`　を変更しましょう！
アプリを起動したときに、2つのアプリとして認識されます。

<img width="716" alt="スクリーンショット 2019-10-22 午後3.11.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326574/158098ac-2bc6-c308-ec02-125ee9d0cb33.png">
<img width="649" alt="スクリーンショット 2019-10-22 午後3.10.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326574/471ac4ef-eb06-0d72-0840-63bcb2875410.png">

こんな感じ↓↓↓↓↓
![スクリーンショット 2019-10-22 午後4.37.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326574/d6f0b822-7eb6-69e1-7175-bc1578d24f1c.png)


## アイコンを変更する

上記の写真ではアイコンが分かれていますがその設定方法です！

1. 開発環境用のAppIconを追加
2. 開発環境用を Build Setting > Asset Catalog App Set Name を 1で追加したときの名前にする 

**本番用**
<img width="841" alt="スクリーンショット 2019-10-22 午後5.16.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326574/632a7679-de01-d8d8-31c1-c6fd9fccfae5.png">
<img width="784" alt="スクリーンショット 2019-10-22 午後5.17.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326574/2723f19e-0f95-0193-6acd-a13db21731ba.png">
**開発用**
<img width="831" alt="スクリーンショット 2019-10-22 午後5.17.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326574/6af9fc59-cffc-7cda-985b-6b03efb01a86.png">
<img width="750" alt="スクリーンショット 2019-10-22 午後5.17.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326574/9058d5d3-edd7-0583-9c79-c63aff01e3d7.png">




↓↓↓アイコン作成に便利なサイト↓↓↓
[makeappicon ここでアイコン作成すると全サイズ作成してくれるので便利](https://makeappicon.com/)

### 懸念したこと

> 単一のターゲットにGoogleService-Info.plistの名前を変更して環境を分けると、アナリティクスの収集に影響する可能性があるらしいです。

今回は GoogleService-Info.plist の名前を変更せずにディレクトリを分けています。
plist の名前を `Run Scripts` で変更する方法もあるみたいですが、名前は変更しない方が無難だと思います。

[参考：Firebase 公式ドキュメント：複数のプロジェクトを構成する > iOSアプリケーションで複数の環境をサポートする](https://firebase.google.com/docs/projects/multiprojects?hl=ja)


## 参考にさせていただいた記事🙇‍♂️
[iOSアプリのビルドTARGETを複数作る](https://qiita.com/alt_yamamoto/items/c3b78b24d0ff5ddc93f9#other-swift-flags)
[iOS開発で環境ごとにアイコンやアプリ名、コード等を切り分けるオレオレプラクティス](https://qiita.com/KazaKago/items/2835d76ced43f913c31d)
[FirebaseのProjectをstaging, productionで分けるときの指針](https://qiita.com/hirothings/items/c6140526fbe0bbe669c1)

### TARGETを追加してハマったら読んでほしい記事
[TARGET を追加したら Pod が読み込まれなくて死ぬほどハマったので備忘録](https://qiita.com/yamatatsu10969/items/1a9ab6cf38e2d2e7a79b)