Contents
はじめに
モバイルアプリ開発において、環境ごとにビルド先を変更して開発するのが一般的です。

どういうことかというと同じアプリでも、リリース用とテスト用と開発用で分けるという意味です。
以下の対応を行うと、同じXcodeプロジェクトで三つの同じ内容のアプリをインストールできるようになります。

Dev(Debug):開発用
なんらかの機能を実装するときに、適当なデータを入れて確認したり、実装するときのビルド環境。主に開発者が使う。
Staging:テスト用
機能の実装が終わり、しっかりとその機能が動いているかを確認するときに使うビルド環境。主に顧客(第三者)が使う。
Release(prod):リリース用
名前の通り、現在リリースされているアプリと全く同じ動きをするビルド環境。一般のユーザーが使う。
ということで、今回は上記のように、Dev、Staging、Releaseにビルド環境を分ける方法を解説していきます。
ビルド環境の分け方
プロジェクト作成
まずはプロジェクトを作成します。今回はStoryboardで作成しました。

Stagingを作成
次に、Staging環境を作成していきたいと思います。
まずは、現状のビルド環境を確認しましょう。

①左のメニューからプロジェクトを選択
②PROJECTを選択
③Infoを選択
そうすると、真ん中らへんにConfigurationsという項目でDebugとReleaseが表示されています。つまり、開発用とリリース用は元からあります。なのでここではStaging環境を追加するだけでOKです。

プラスボタンを押して、Duplicate "Debug" Configurationsをクリック

STEP.2で追加したConfigurationsのNameにStagingと入力
これで、ConfigurationsにStagingが追加されました。

①Build Settingを選択
②右上の検索バーにActive Compilation Conditionsと検索する。
③Stagingの右側をSTAGINGに変更
これで、とりあえずStagingの追加が完了しました。
アプリごとにスキーマを設定

次に、この画像のところでDebug、Staging、Releaseを選択できるようにしていきましょう。

上のShemeからManage Schemes…をクリック

①元からあるSchemeを選択
②設定のアイコンをクリック
③Duplicateをクリック

①Runを選択
②Stagingに変更
③Infoを選択
④Build ConfigurationをStagingに変更
⑤Closeをクリック

①Stagingを選択
②設定のアイコンをクリック
③Duplicateをクリック

①Releaseに変更
②Build ConfigurationをReleaseに変更
③Closeをクリック
同じように、複製しDubugも作成します。


最初あったスキーマを削除しましょう。

Deleteをクリック
以下の状態になればOK


これでスキーマを分けることができました。
環境ごとに処理を分岐
スキーマが分けられているかを確認しましょう。
スキーマごとに処理を分けるには以下のように記述します。ViewDidLoadに記述してprintで確認してみましょう。
#if DEBUG
print("🛠Debug")
#elseif STAGING
print("🧑🏻💻Staging")
#else
print("📱Release")
#endif


上記のコードを記述した状態で、まずはDebugで実行してみましょう。
以下のように、🛠Debugと表示されるはずです。

Stagingで実行してみると、🧑🏻💻Stagingと表示されるはずです。

環境ごとにアプリを別々にする
スキーマは分けることができましたが、現状、同じアプリで実行するような形になってしまっています。


①左のxcode.projをクリック
②PROJECTをクリック
③Build Settingsをクリック
④プラスボタンをクリック
⑤Add User-Defined Settingをクリック

BUNDLE_DISPLAY_NAME_SUFFIXと入力

①矢印をクリック
②DebugはDebug、Releaseは何もなし、StagingはStagingに変更しましょう。

①TARGETSをクリック
②Build Settingsをクリック
③Product Nameで検索する

①Product Nameと書いてある右側をダブルクリック
②$(TARGET_NAME)${BUNDLE_DISPLAY_NAME_SUFFIX}と入力

前回ビルドしたアプリは紛らわしいので削除しましょう。
それぞれのスキーマで実行してみてください。以下のように、アプリが別々でインストールされるはずです。

完成
