【Xcode】アプリを環境ごとに共存させる方法!Bundle IDを本番と開発で切り替える

この記事からわかること

  • Xcodeシミュレーター内に同じアプリ複数共存させる方法
  • 本番(Release)、開発(dev)、ステージングなどを切り替える方法
  • アプリ名Bundle ID環境ごとに変える方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

今回の目標は以下のような感じです。

【Xcode】アプリを環境ごとに共存させる方法!Bundle IDを本番と開発で切り替える

シミュレーター内に同じアプリを複数共存させる方法

APIとやり取りをするアプリなど環境に応じて中身のリクエストURLを変更させることはよくあります。スキームを変更することで簡単に環境を切り替えることはできますが、シミュレーター内には基本同じアプリは存在できないため、その都度切り替えてビルドする作業を行う必要があります。

アプリにはアプリを識別するための値としてBundle IDが振られていますが、これが同じものは同じアプリとしてみなされます。なので逆にBundle IDをビルドする前に変更すれば同じアプリを共存させることができるようになります。これは手動で行っても良いですが面倒なのでスキームに応じて自動で切り替わるように設定していきたいと思います。

Bundle IDを環境によって切り替える方法

今回は開発(dev)、ステージング(stg)、本番(Release)の3つの環境を用意した上でBundle IDとアプリ名を環境に応じて変化できるようにしていきます。まずはステージング環境を追加していきます。

「PROJECT」>「Info」>「Configurations」内に環境が定義されているので「+」をクリックして「Duplicate "Debug" Configuration」を選択します。(ステージングは開発環境寄りなので)

【Xcode】アプリを環境ごとに共存させる方法!Bundle IDを本番と開発で切り替える

続いて「PROJECT」>「Build Settings」>「+」>「Add User-Defined Setting」をクリックしてUser-Definedを追加していきます。

おすすめ記事:【Xcode】User-Definedで環境変数やビルド設定を変更する

【Xcode】アプリを環境ごとに共存させる方法!Bundle IDを本番と開発で切り替える

ここにキー値はなんでも良いですが今回はBUNDLE_DISPLAY_NAME_PREFIXBUNDLE_ID_SUFFIXを追加して値には以下のようにBUNDLE_DISPLAY_NAME_PREFIXには接頭辞につけたいDSを、BUNDLE_ID_SUFFIXには接尾辞には.dev.stgを渡します。ここではまだ定義しただけですので何も変わりません。

【Xcode】アプリを環境ごとに共存させる方法!Bundle IDを本番と開発で切り替える

続いて「TARGETS」>「Build Setting」>「Product Bundle Identifier」を探します。こちらは「TARGETS」側です。ここにBundle IDが定義されているのでそれぞれ変更します。以下のステージングのように先ほどのBUNDLE_ID_SUFFIX${BUNDLE_ID_SUFFIX}形式で追加します。確定すると自動でここの見た目は変わります。

【Xcode】アプリを環境ごとに共存させる方法!Bundle IDを本番と開発で切り替える

これでBundle IDが環境によって自動で切り替わるようになりました。次のアプリ名を分かりやすく変更されるように設定していきます。

アプリ名を環境によって切り替える方法

アプリ名を変更するには「TARGETS」>「Info」タブの中にBundle display nameを追加し、$(BUNDLE_DISPLAY_NAME_PREFIX)$(PRODUCT_NAME)と入力します。これで「接頭辞+アプリ名」が表示されるようになります。

【Xcode】アプリを環境ごとに共存させる方法!Bundle IDを本番と開発で切り替える

環境の違うスキームを入れ替えてアプリをビルドして見てください。以下のようになっていれば成功です。

【Xcode】アプリを環境ごとに共存させる方法!Bundle IDを本番と開発で切り替える

ちなみにBundle IDは「TARGETS」>「Info」タブの中にBundle Identifierとありますがここのみに$(PRODUCT_BUNDLE_IDENTIFIER)${BUNDLE_ID_SUFFIX}と入力してもすぐに戻されてうまく変化しませんでしや。

開発環境をコードから参照する方法

せっかくステージング環境を追加したのでコードから環境状態を取得して分岐できるようにしておきます。「Project」>「Build Settings」>「Swift Compiler - Custom Flags」>「Active Compilation Conditions」にステージングが追加されているのでSTAGINGと追加することでコードから参照できるようになります。

【Xcode】アプリを環境ごとに共存させる方法!Bundle IDを本番と開発で切り替える
#if DEBUG
  print("開発")
#elseif STAGING
  print("ステージング")
#else
  print("本番")
#endif

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index