LCL Engineers' Blog

バス比較なび・格安移動・バスとりっぷを運営する LCLの開発者ブログ

iOSアプリでデバッグ/テスト/リリース環境に応じてアプリを分ける

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を利用

以上となります。 簡単ですが、弊社での事例を紹介致しました。 ビルド定義の変更を毎回手作業で対応すると、つまらないミスも発生しますし、開発リズムも悪くなるので、開発の初期段階で完全に自動化しておくと安心です。