iOSアプリ開発において、接続先のサーバー等を切り替えた複数のアプリを用意するのは一般的かと思います。 弊社では、Debug版、Test版、RC版、Release版の4種類に分けています。
環境の種類
それぞれ以下の定義としています。
Debug版
- 開発者のシミュレーターでのデバッグ用
- アプリから、接続するサーバーは開発者ローカルマシン上のサーバ
Test版
- 実機テスト用
- アプリから、接続するサーバーはテストサーバ
- Provisioning ProfileはAdhoc
- 1日数回テスト配布する
RC版
- AppStore申請前の最終チェック用
- アプリから、接続するサーバーはプロダクションサーバ
- Release版との違いは、bundle_idのみ
- Provisioning ProfileはAdhoc
Release版
- AppStoreへの公開用
- アプリから、接続するサーバーはプロダクションサーバ
- Provisioning ProfileはAppStore
切り替えの方法
スキーマとビルド設定を利用して、切り替えを行っています。 詳細は以下の記事が詳しいので、割愛します。
ビルドとテスト配布
ビルドはfastlane + bitrise を使用しています。
Bitrise,fastlane,CrashlyticsでiOSアプリのテスト配布を自動化する - LCL 開発者ブログ
fastlaneでは、ビルド環境に応じたレーンを用意し、先頭で環境に応じたパラメータをセットしています。(schemeなど)
# テスト用ビルド lane :test do build( bundle_id: "com.xxx.yyy.zzz-test", scheme: "xyz-test", display_name: "TEST XYZ", adhoc: true, ) ・・・ end # RC用ビルド lane :release do build( bundle_id: "com.xxx.yyy.zzz-rc", scheme: "xyz-release", display_name: "RC XYZ", adhoc: false, ) ・・・ end # リリース用ビルド lane :release do build( bundle_id: "com.xxx.yyy.zzz", scheme: "xyz-release", display_name: "XYZ", adhoc: false, ) ・・・ end # ビルド処理 (共通) private_lane :build do |options| sigh( adhoc: options[:adhoc], app_identifier: options[:bundle_id], ) ・・・ gym( clean: true, scheme: options[:scheme], ) end
なお、Test版・RC版・Release版のアプリを実機で同居させるために、Info.plistの以下属性をビルド時に動的に書き換えてます。
- bundle identifier ( app_identifier )
- display_name
fastlaneでinfo.plistを書き換えるためのメソッドが既に用意されているので、gymでのビルドの前後で下記の記述をすれば、簡単に対応できます。
PLIST_PATH = "./app/Info.plist" # 既存ファイルをバックアップ backup_file(path: PLIST_PATH) # 書き換え ( update_info_plist( plist_path: PLIST_PATH, app_identifier: options[:bundle_id], display_name: options[:display_name] ) ・・・ビルド・・・ # バックアップからのリストア restore_file(path: PLIST_PATH)
Fabric とTestflightの使い分け
テスト配布は、Fabric CrashlyticsとTestflightを利用しています。
以下の理由からTest版・RC版はFabric、Release版はTestFlightというように使い分けています。
- TestFlightは配布に少し時間がかかるので、配布頻度が高いTest版・RC版はFabricを利用
- Release版は、AppStore申請直前の最終確認のためTestFlightを利用
以上となります。 簡単ですが、弊社での事例を紹介致しました。 ビルド定義の変更を毎回手作業で対応すると、つまらないミスも発生しますし、開発リズムも悪くなるので、開発の初期段階で完全に自動化しておくと安心です。