【Xcode9】Schemeを追加してDebug、Staging、Releaseの3つに処理を振り分ける方法【iOS11】
アプリ開発をしているとどうしても開発と本番でサーバーの向き先が違ったり、デバックログの出力のため処理を分けたかったり、様々な場合で開発環境と本番環境などで処理を分けたい場合があります。
XcodeではTARGETSを増やす方法とSchemeを追加する方法のどちらかで対応することが可能です。
今回はSchemeを追加し開発、検証、本番の3つの処理に振り分ける方法をご紹介します。
1.Schemeの追加

Schemeの選択の下にあるNew Schemeより新しいSchemeの追加を行います。

追加するSchemeの元となるTargetを選択してNameにScheme名を追加しOKを押します。
今回は「プロジェクト名-Staging」と「プロジェクト名-Relese」の2つを作成します。

このようになっていれば完了です。
2.Configurationsの追加

Configurationsの追加をします。
PROJECT→ Info → Configurations → + から新しいConfigurationsの追加をします。
Staging用のを追加するのでDebugを元に作成します。
「Duplicate "Debug" Configuration」を選択し「Staging」を作成しましょう。

Stagingが追加されれば完了です。
3.各SchemeのBuild Configurationを編集する

編集したいSchemeを選択した状態でEdit Schemeを選択し、Debug、Staging、Releseの各SchemeのBuild Configurationを編集していきます。
Build Configurationには先ほど作成したStagingと初期からあるDebug、Releseを含め3つあります。
SchemeがDebugの場合は全ての項目のBuild ConfigurationをDebugに
SchemeがStagingの場合は全ての項目のBuild ConfigurationをStagingに
SchemeがReleseの場合は全ての項目のBuild ConfigurationをReleseに変更してください。
主に使うのは通常のBuilで適応されるRunの設定と
AdHocやAppStoreへのアップロードに使うArchiveの設定になりますが全て変えておいた方がわかりやすいかと思います。
4.Preprocessor Macrosを設定する

TARGET → Build Setting → Preprocessor Macros のDebug、Release、Stagingを編集し
Debug に DEVELOP
Staging に STAGING
Relese に PRODUCTION
を追加してください。

このように設定します。
5.最後に処理を振り分ける
#import "AppDelegate.h"
#if DEVELOP
#define TEST @"開発です"
#elif STAGING
#define TEST @"検証です"
#else
#define TEST @"本番です"
#endif
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSLog(@"%@",TEST);
return YES;
}
あとは実行したいSchemeを選択してログの出力を確認してみてください。
開発、検証、本番とログが切り替わっていれば成功です。