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」になっていた エミュレータと実機で、アプリを起動できるかテストする ■ビルドの設定 画面左のツリーでプロジェクトをクリック 「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

Advertisement