【Xcode】iPhoneアプリ開発バンドルIDを共存させたり、サーバー向き先を自動で切り替える方法(Swift版)

どうも、タカフです。

サーバー連携するiPhoneアプリを作るときに絶対に出てくるのが、サーバーへの向き先を切り替えたりバンドルID切り替えて1端末に共存させたりする要件が出てきますよね。今回はそれを記事にしたいと思います。

プロジェクト名を仮で「MyApp」とします。

まずはじめにStaging用のBuild Configurationsの追加です。
デフォルトでDebugとReleaseはあるのでStagingだけ追加します。

プロジェクト画面でPROJECTがMyAppのinfoタブのConfigurationsのとこで、+を押下します。2015_04_08_18_20
Duplicate “Debug” Configurations
Duplicate “Release” Configurations
で選択肢が出ますが、Stagingも開発用と見なすならDuplicate “Debug” Configurationsでいいでしょう。

名前をDebug CopyからStagingにします。
2015_04_08_18_24

次にTARGETSがMyAppのBuild Settingsで+ボタン押下でAdd User-Defined Settingを選択して、
BUNDLE_IDENTIFIER_SUFFIXという名前をします。そして
Debugのところを.debug
Stagingのところを.staging
にします。これがバンドルIDの最後に付与されます。
また、同じ方法で
BUNDLE_DISPLAY_NAME_PREFIX という名前を追加します。そして
Debugのところを D
Stagingのところを S
にします。これがアプリネームの先頭につきます。
1

次にTARGETSがMyAppのInfoタブにいきまして、

Bundle name の ${PRODUCT_NAME} を
${BUNDLE_DISPLAY_NAME_PREFIX}${PRODUCT_NAME}にします。
これが目に見えるアプリ名になります。
3

そして、Bundle identifier の example.com.${PRODUCT_NAME:rfc1034identifier} を
example.com.${PRODUCT_NAME:rfc1034identifier}${BUNDLE_IDENTIFIER_SUFFIX}
というように変更します。
これがバンドルIDになります。
2

この辺りは以下を参考にしました。
http://qiita.com/makoto_kw/items/015f218edbda287ef602

そしてソース中でサーバーの向き先を切り替える方法は、
Objective-CであればPreprocessor Macrosを使って#ifdefで切り替えるのですが、
Swiftの場合はPreprocessor Macrosを見ないので、Swift用に値を追加する必要があります。
これは以下を参考にしました。
http://qiita.com/qmihara/items/a6b88b74fe64e1e05ca4

Other Swift Flagsに追加します
TARGETSがMyAppのBuild Settingsを開いて、Swift Compiler – Other Swift Flagsのところで
Debugに、-D DEBUG
Stagingに、 -D STAGING
に設定します。
MyApp_xcodeproj 3

事前準備はこれで完了です。
これで、Edit Schemeを開いて、RunのところのBuild Configurationsを切り替えれば、
それぞれのバイナリをビルドして実行出来ます。

以下の通り一つのiPhoneに共存出来ていますし、名前も変わってわかりやすいです。
5

また、ソース中で、

#if DEBUG
var url = "http://dev.example.com";
#elseif STAGING
var url = "http://stg.example.com";
#else // RELEASE
var url = "http://www.example.com";
#endif

とすれば、それぞれ向き先も変えることが出来ます。

こういうのは開発の最初に設定しておきたいところですよね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です