React Native Xcode プロジェクトに staging/production ビルド用設定を追加する

Xcode に staging/production ビルド用の設定を追加する
===

staging/production 用のビルド設定を追加したい、ということがあるはず。
ここでは production ビルドをユーザーが実際に使うもの、 staging ビルドを production ビルドと同一だけど限られた範囲で使うもの、という前提で書いていく。

元ネタはこちら。
https://github.com/facebook/react-native/issues/11813

production ビルド用設定を追加する
---

簡単な production 用ビルドから。

### Scheme の追加

Scheme 選択欄から `Manage Schemes...` を選ぶ。

<img width="234" alt="スクリーンショット 2017-12-07 10.51.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/27516/b558446e-4994-4153-a357-8673d84ceb2a.png">

Xcode メニューの `Product` -> `Scheme` -> `Manage Schemes...` からでもアクセスできる。

対象の Scheme を選択して、ギアアイコンから `Duplicate` を選択する。

<img width="787" alt="duplicate.png" src="https://qiita-image-store.s3.amazonaws.com/0/27516/429c5de4-4c19-99fb-01e4-a749f1bd1bd0.png">

次にやることは 3 つ。

1. 名前を適当なものに変更する、ここでは最後に `-production` をつけた
2. `Build Configuration` を `Release` にする
3. `Shared` にチェックをいれる

<img width="915" alt="prod.png" src="https://qiita-image-store.s3.amazonaws.com/0/27516/172a097c-92ae-660d-507c-990277ab666f.png">

これで完了。

staging ビルド用設定を追加する
---

### Configuration の追加

プロジェクトルートを選択すると出てくる設定画面で、 PROJECT 欄にある項目を選択、 `Info` タブの `Configurations` という設定項目の `+` を押す。

<img width="1343" alt="add-config.png" src="https://qiita-image-store.s3.amazonaws.com/0/27516/f7579bc0-25ee-cf40-6bd0-4b7286504a51.png">

するとベースの設定をどうするか聞いてくるので、 `Duplicate "Release" Configuration` を選択する。

<img width="252" alt="スクリーンショット 2017-12-07 11.18.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/27516/b69b1acc-4324-55f4-a74d-3ab14191c560.png">

`Staging` と名前をつける。

<img width="513" alt="スクリーンショット 2017-12-07 11.19.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/27516/1da25498-c075-dfb0-ed3d-1ea1b26e2a71.png">

### Scheme の追加

production と同様、 `Manage Schemes...` を選択。
今度は production ビルドを選択して `Duplicate` する。

<img width="765" alt="dup.png" src="https://qiita-image-store.s3.amazonaws.com/0/27516/49b47a86-6088-ea90-f51d-8d9656f70a89.png">

やることは 3 つ。

1. 名前を適当なものに変更する、ここでは最後に `-staging` をつけている
2. `Build Configuration` を `Staging` にする
3. `Shared` にチェックをいれる

### Header Search Path の追加

プロジェクトルートを選択すると出てくる設定画面で、 TARGETS 欄の設定変更したいターゲットを選択、 `Build Settings` タブの `Header Search Paths` 内、 `Staging` の項目を変更する。

<img width="1483" alt="header.png" src="https://qiita-image-store.s3.amazonaws.com/0/27516/c913de57-b7a6-5816-a0f8-f216f75c6e54.png">

`$(BUILD_DIR)/Release-$(PLATFORM_NAME)/include` を `non-recursive` で追加する。

なぜこの設定が必要かというと、依存しているパッケージのビルド設定は普通 Development / Release しか存在しないため。　そのままだと依存パッケージの Staging ビルドを探しにいって、存在しないので怒られるというコンボが発生する。これを回避するために Release のビルド結果を参照できるようにしている。

<img width="517" alt="head.png" src="https://qiita-image-store.s3.amazonaws.com/0/27516/d00c2b88-0a58-ce57-6bc7-327f6b95861b.png">

### Library Search Path の追加

`Header Search Paths` のすぐ下にある `Library Search Paths` の `Staging` の項目を変更する。

<img width="1483" alt="lib.png" src="https://qiita-image-store.s3.amazonaws.com/0/27516/d50f0b08-85e7-8d43-c040-1e323c67eb6a.png">

`$(BUILD_DIR)/Release-$(PLATFORM_NAME)` を `recursive` で追加する。

この設定が必要な理由は Header Search Path と同様。

<img width="515" alt="lib-path.png" src="https://qiita-image-store.s3.amazonaws.com/0/27516/81ebf14b-f9c9-f51c-c205-d8a7b881ae80.png">

### テストターゲットの設定変更

テストターゲットの方も `Header Search Paths` と `Library Search Paths` を同様に設定してやる。

<img width="1483" alt="test.png" src="https://qiita-image-store.s3.amazonaws.com/0/27516/430b55d2-b2dc-804d-c554-37f771e7204d.png">

これで完了。