Memo

メモ > 技術 > 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」になっていた。 エミュレータと実機で、アプリを起動できるかテストする。 ■ビルドの設定 画面左のツリーでプロジェクト名をクリック。 ビルドなどの設定が並んだ画面が表示される。 その画面内の左側から「PROJECT」内にある「buildtest1」をクリックし、さらに画面上部にある「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」の「Info → Build Configration」を「Production_Debug」に設定する。 「Profile」と「Archive」の「Info → Build Configration」を「Production_Release」に設定する。 buildtest1_develop 「Run」の「Info → Build Configration」を「Develop_Debug」に設定する。 「Profile」と「Archive」の「Info → 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 → Packaging 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」を検索してみる。 (「Other Swift Flags」にカーソルを合わせると表示される、三角をクリックする。) 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")
■プッシュ通知を使用する場合 ※未検証 Apple Developer Programで、アプリIDとそれに対するプロビジョニングプロファイルを作成する。 作成したプロビジョニングプロファイルを、Xcodeに適用する。 ■その他参考になりそうなページ 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

Advertisement