LoginSignup
44
41

More than 5 years have passed since last update.

1端末内に同じアプリを共存させる方法(ios編)

Last updated at Posted at 2016-07-26

概要

開発用、本番用など同じ端末に接続先の違うアプリを入れられると便利です。
1端末に同じ Bundle Identifier では入れられないので、環境によって Bundle Identifier を変えることで実現できます。

なおPush通知をするアプリの場合は Bundle Identifier 毎に証明書が必要になるので注意が必要です。
つまり、開発、ステージング、本番接続用のアプリを共存させたければ、それぞれのサーバー用のBundle Identifierを作り、それぞれに別のPush証明書をサーバーに配置する必要があります。

やり方

  • まずは、Configurationsを追加します。
    add-configuration.png

  • その後、Objective-cなら Preprocessor Macros 、Swiftなら Other Swift Flags を設定します。(Swiftの場合は、 -D DEBUG のようにする)
    add-macro.png

  • Objective-Cの場合は、 Preprocessor Macros を見てプログラム上で以下のように分岐します。

#ifdef DEBUG
   // ...
#elif RELEASE
   // ...
#else
   // ...
#endif
  • Swiftの場合は Other Swift Flagsを見てプログラム上で以下のように分岐します。
  #if DEBUG
    // ...
  #elseif RELEASE
    // ...
  #else
    // ...
  #endif

あとは、Bundle Identifier を変更するだけです。

  • プロジェクトのGeneralで指定するのは、debug用を入れておきます。
    例) ko2ic.sample.dev
    default-identifierpng.png

  • Build Settings → Packaging → Product Bundle Identifier で、それぞれの環境ごとに変えます。
    同様に Product Nameをそれぞれの環境ごとに変えます。
    Product Module Nameはすべて同じ名前にするといいでしょう。Module名なのでアルファベットで書きます。

change-identifier-filename.png

  • Info.plist のBundle nameを $(PRODUCT_NAME) にする。

  • テストターゲットで TEST_HOST を検索して、それぞれのProduct Nameに合わせて書き直します。これが違うとテストが動作しません。

  • 最後にスキームごとにビルドすれば完成です。

Apnsを使ったりする場合は、Code Signing EntitlementsもConfigurationごとに作ります。そうしないとios10以降ではデバイストークンが受けられません

開発.entitlements
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>aps-environment</key>
	<string>development</string>
</dict>
</plist>
ステージング.entitlements
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>aps-environment</key>
	<string>ad-hoc</string>
</dict>
</plist>
本番.entitlements
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>aps-environment</key>
	<string>production</string>
</dict>
</plist>
44
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
41