Skip to main content

iOS Env

Overview

プロジェクトごとに Apple アカウント・Bundle ID を分けるには?

複数の iOS アプリや Flutter プロジェクトを運用していると、Xcode の設定(Apple Developer アカウントや Bundle ID)が混在してしまうことがある。
プロジェクトごとに設定を整理することで、ビルド・配布が安定し、管理も容易になります。

方法1:Xcode の設定をプロジェクト単位で保持する

Xcode の「チーム(DEVELOPMENT_TEAM)」や「Bundle Identifier」は、プロジェクトファイル内(ios/Runner.xcodeproj/project.pbxproj)に保存されるため、Gitで管理可能。
これによりプロジェクト単位で Apple Developer アカウントの設定を保持できます。

方法2:xcconfig とスキームで環境を分離する

開発・本番など複数の環境を切り替える場合、以下の構成がおすすめです。

  • RunnerDev.xcconfigcom.naohito.xoda.dev
  • RunnerProd.xcconfigcom.naohito.xoda
  • スキーム:Runner (Dev) / Runner (Prod)
  • チームID(DEVELOPMENT_TEAM)や署名方法(自動/手動)もファイルごとに定義可能
// RunnerDev.xcconfig
PRODUCT_BUNDLE_IDENTIFIER = com.naohito.xoda.dev
DEVELOPMENT_TEAM = ABCDEFG123

方法3:Flutter Flavor を使ってビルド切り替え

Flutter 側では --flavor オプションを使って iOS 側の設定を切り替えることができます:

flutter build ios --flavor dev
flutter build ios --flavor prod

環境ごとに別バンドルIDが必要な理由と運用方法

Apple Developer および App Store Connect の仕様により、com.naohito.xoda(本番)と com.naohito.xoda.dev(開発)といったように、Bundle Identifier が異なる場合、それぞれは「別のアプリ」として扱われます。

そのため、開発環境用に com.naohito.xoda.dev を使いたい場合は、以下の手順で登録・運用する必要があります。

なぜ別バンドルIDが必要か?

  • Apple にとって Bundle ID はアプリの一意な識別子
  • 本番用(xoda)と開発用(xoda.dev)を区別して署名・配信・TestFlight管理したいため
  • 実機インストールやTestFlight配信でもアプリ単位での制御が必要なため

Apple Developer側での設定

  1. Apple Developer Portal にログイン
  2. Identifiers > + をクリックして App ID を作成
  3. Bundle ID に com.naohito.xoda.dev を入力
  4. 必要な Capabilities(例:Push通知)を設定

App Store Connect側での設定(必要に応じて)

  • TestFlight で xoda.dev を配信したい場合、App Store Connect 上にも「新しいアプリ」として com.naohito.xoda.dev を登録する必要があります

運用上の構成例

環境Bundle ID用途Apple 上の扱い
productioncom.naohito.xoda本番アプリApp Store 公開用
devcom.naohito.xoda.dev開発・テスト用TestFlight 用など

Flutter + Xcode Flavor の併用

Flutter では flavor 切り替えと .xcconfig を併用することで、以下のような切り替えが可能です:

flutter build ios --flavor dev
flutter build ios --flavor prod
// RunnerDev.xcconfig
PRODUCT_BUNDLE_IDENTIFIER = com.naohito.xoda.dev
DEVELOPMENT_TEAM = ABCDEFG123

このように設定することで、ビルド時点で「どの Apple アカウント・Bundle ID を使うか」が明確になり、安全かつ効率的に管理できます。