メモ > 技術 > IDE: Xcode > 製品用、開発用などの切り分け
■製品用、開発用などの切り分け
BundleIDが同じアプリは上書きインストールされる
つまり、AppStoreからインストールした本番アプリがあると、その端末には開発版をインストールできない
が、スキーマを使用することによりこの問題を解消できる
iOS開発で環境ごとにアイコンやアプリ名、コード等を切り分けるオレオレプラクティス - Qiita
https://qiita.com/KazaKago/items/2835d76ced43f913c31d
■前提
Scheme
buildtest1 ... 製品用
buildtest1_develop ... 開発用
Build
Release ... 製品用
Debug ... 開発用
と設定するものとする
なお、Buildを一つにしてスキーマで以下のように3段階で分ける手も考えられる
(スキーマの切り替えは手軽だが、ビルドの切り替えはそれよりは少し手間)
buildtest1 ... 製品用
buildtest1_staging ... 検収用
buildtest1_develop ... 開発用
が、
・Xcodeがはじめから「Release」と「Debug」を用意している
・「製品版だがデバッグ情報は表示したい」にも対応できる
という理由から、
「リリース時は buildtest1+Release、開発時は buildtest1_develop+Debug だが、必要なら buildtest1+Debug などに切り替えることもできる」
で良さそうなので、最初に上げた切り分けで良さそう
■iOSアプリの作成
Xcodeでプロジェクトを作成する
Create a new Xcode project
↓
iOS
Application
Single View App
「Next」
↓
Product Name: buildtest1
Team: REFIRIO CO.,LTD. (Enterprise)
Organization Name: Refirio
Organization Identifier: net.refirio
Language: Swift
「Next」
↓
プロジェクトの作成場所を選択
「Create」
Bundle Identifier はプロジェクトのGeneralを確認すると「net.refirio.buildtest1」になっていた
エミュレータと実機で、アプリを起動できるかテストする
■ビルドの設定
画面左のツリーでプロジェクトをクリック
「General」「Capabilities」などが並んだ画面になる
その画面内の左側から
PROJECT → buildtest1 → info
と選択(「info」は画面の上部にある)
Configurationsの項目があり、初期状態では以下のようになっている
Name | Based on Configuration File
Debug | No Configurations Set
Release | No Configurations Set
今回は以下のように設定する
Name | Based on Configuration File
Develop_Debug | No Configurations Set ... 既存のDebugの名前を変更
Develop_Release | No Configurations Set ... 既存のReleaseから複製(下にある「+」をクリックして「Duplicate "Release" Configuration」を選択)して名前を変更
Production_Debug | No Configurations Set ... 既存のReleaseから複製(下にある「+」をクリックして「Duplicate "Release" Configuration」を選択)して名前を変更
Production_Release | No Configurations Set ... 既存のReleaseの名前を変更
■スキーマの設定
メニューから
Product → Scheme → Manage Schemes...
を選択
スキーマが一覧表示され、初期状態では以下のようになっている
Scheme | Container
buildtest1 | buildtest1 project
今回は以下のように設定する
Scheme | Container
buildtest1 | buildtest1 project
buildtest1_develop | buildtest1 project ... 下にある歯車をクリックしてDuplicateで複製。ダイアログ左上で名前だけ変更
それぞれのスキームに対して、ビルドの設定を行う
(スキームを選択して「Edit...」ボタンを押す。設定が完了したら「Manage Schemes...」で前の画面に戻ることができる。「Close」で完了する)
なお、「Shared」にチェックを入れておくと、この設定をリポジトリに含めることができるらしいので、付けておくと良さそう(未検証)
buildtest1
「Run」の「Build Configration」を「Production_Debug」に設定する
「Profile」と「Archive」の「Build Configration」を「Production_Release」に設定する
buildtest1_develop
「Run」の「Build Configration」を「Develop_Debug」に設定する
「Profile」と「Archive」の「Build Configration」を「Develop_Release」に設定する
※「Run」の「Debug executable」にあるチェックを外すと、Distribution証明書でも直接実機にインストールできるみたい?
でもチェックを外すことにより、デバッグ情報が表示されなくなるみたい?
他の設定も関連するかもしれないので要調査
■BundleIDの設定(1つの端末に、本番アプリや開発アプリを同時にインストールできるようにする)
「PROJECT」の下にある「TARGETS」からアプリを選択
「Build Settings」内のページ中程「Packaging」内にある「Product Bundle Identifier」にカーソルを合わせると表示される、三角をクリックする
つまり
TARGETS → buildtest1 → Build Settings → Product Bundle Identifier
を選択
BundleIDが一覧表示され、初期状態では以下のようになっている
Develop_Debug | net.refirio.buildtest1
Develop_Release | net.refirio.buildtest1
Production_Debug | net.refirio.buildtest1
Production_Release | net.refirio.buildtest1
今回は以下のように設定する(右側の値をクリックすると、編集状態になる)
Develop_Debug と Production_Debug は「net.refirio.buildtest1.dev.debug」「net.refirio.buildtest1.debug」にするのもアリか。検証したい
Develop_Debug | net.refirio.buildtest1.dev
Develop_Release | net.refirio.buildtest1.dev
Production_Debug | net.refirio.buildtest1
Production_Release | net.refirio.buildtest1
※「General → Identity → Bundle Identifier」でも設定できる。ただしその場所で設定すると、
上で設定した Bundle Identifier がすべて上書きされてしまうので注意(上書きされたものを戻したければ、再度手動で設定が必要)
■アプリケーション名の設定(インストール後に本番アプリか開発アプリかを判断できるようにする)
TARGETS → buildtest1 → info → Custom iOS Target Properties
Bundle name が「$(PRODUCT_NAME)」になっていることを確認する
TARGETS → buildtest1 → Build Settings → Product Name
Develop_Debug | buildtest1
Develop_Release | buildtest1
Production_Debug | buildtest1
Production_Release | buildtest1
今回は以下のように設定する(編集時、「buildtest1」は「$(TARGET_NAME)」と表示されるが、気にせず後ろに文字列を追加する)
デバッグ版は後ろに「Debug」を付けるのもアリか。検証したい
Develop_Debug | buildtest1 Dev
Develop_Release | buildtest1 Dev
Production_Debug | buildtest1
Production_Release | buildtest1
■署名/証明書の設定
必要に応じて、それぞれのBuild設定ごとに設定する
■スキーマの切り替え
Xcode左上の「実行」「停止」ボタンの右にある「buildtest1」部分で切り替えられる
■ビルドの切り替え
Xcode左上の「実行」「停止」ボタンの右にある「buildtest1」をクリックして表示される「Edit Scheme...」をクリックし、
「Build Configration」で切り替えることができる
■ビルド設定によるプログラムの分岐
TARGETS → buildtest1 → Build Settings → Swift Compiler - Custom Flags → Other Swift Flags
※フィルタで「Basic」になっていると、「Swift Compiler - Custom Flags」が表示されないので注意
「All」にすると、ページの下の方に表示される。見つからなければ、ページ上部の検索ボックスで「Swift」を検索してみる
Develop_Debug | (空欄)
Develop_Release | (空欄)
Production_Debug | (空欄)
Production_Release | (空欄)
今回は以下のように設定する
Develop_Debug | -D DEVELOP_DEBUG
Develop_Release | -D DEVELOP_RELEASE
Production_Debug | -D PRODUCTION_DEBUG
Production_Release | (空欄)
Swiftプログラム内では、以下のようにすると処理の分岐ができる
print("TEST START")
#if DEVELOP_DEBUG
print("DEVELOP_DEBUG")
#elseif DEVELOP_RELEASE
print("DEVELOP_RELEASE")
#elseif PRODUCTION_DEBUG
print("PRODUCTION_DEBUG")
#else
print("PRODUCTION_RELEASE")
#endif
print("TEST END")
ただし環境が増えると分岐の対象が多くなるので、以下のように分けて設定するのも有効かもしれない(要検証)
Develop_Debug | -D DEVELOP -D DEBUG
Develop_Release | -D DEVELOP -D RELEASE
Production_Debug | -D PRODUCTION -D DEBUG
Production_Release | -D PRODUCTION -D RELEASE
print("TEST START")
#if DEVELOP && DEBUG
print("DEVELOP && DEBUG")
#elseif PRODUCTION && DEBUG
print("PRODUCTION && DEBUG")
#endif
print("TEST END")
■その他参考になりそうなページ
iPhoneアプリ開発でデバッグ版とリリース版をきれいに同居させる - しめ鯖日記
http://www.cl9.info/entry/2015/07/29/010020
XcodeでDevelop/Staging/Release環境を上手に切り分ける方法 - Qiita
https://qiita.com/Todate/items/a2e6a26731c79bd23e02
[Xcode] ビルド環境を切り替えるためにSchemeを追加する | DevelopersIO
https://dev.classmethod.jp/smartphone/iphone/xcode-build-environment-adding-scheme/
テスト用iOSアプリの配布方法 - Qiita
https://qiita.com/mishimay/items/47f7680014fc6141f5c4