目次
前提
## ローカル開発環境
$ flutter run --debug --flavor dev --dart-define=app.flavor=dev
## 開発環境ビルド(テスト配布用)
## 以下のコマンドを叩いたあと、Xcode上でSchemwをdevにして、Archive
$ flutter build ios --release --no-codesign --flavor dev --dart-define=app.flavor=dev
## 本番環境ビルド
## 以下のコマンドを叩いたあと、Xcode上ででSchemwをprodにして、Archive
$ flutter build ios --release --no-codesign --flavor prod --dart-define=app.flavor=prod
上記のコマンドで各環境を切り替えるようにする
--flavor
で schemaを切り替える--debug
と--release
でConfigurationsの名前を切り替える--dart-define=app.flavor
でFlutter内のコードを切り替える
方法(iOS側の設定)
– Runner.xcworkspaceをXcodeで開いて、以下の作業を行う。
Configurationsの追加
- Debug-devはDebugをコピーし、Release-dev, Release-prodはReleaseをコピーするようにする
Debug
,Release
が接頭に対応。--flavor
で設定する値が接尾になるように設定- Configuration Fileは、Flutter配下の*.xcconfigを読み取る

shcemeを追加

- New Schemaを選択し、Targetを「Runner」に設定し、dev, prodを作成する。
- Manage Schemesで「Runner」を削除する

- Edit SchemeでBuild Configurationを設定する
- dev scheme => Debug-devが基本。ArchiveのみRelease-dev
- prod => Release-dev

info.plistとBuild Settings
- Build SettingsでUser-Defined Settingを追加する。
- APP_DISPLAY_NAMEで追加し、アプリの表示名を変更する
- info.plistで開発環境、本番環境で分けたいものがある場合は、ここで定義

- Product Bundle Identifierの変更(Debug-dev, Release-devの接尾に.devをつける)

- info.plistのCFBundleDisplayNameを変更
- 開発環境、本番環境で分けたいものがある場合は、変数に変更
<key>CFBundleDisplayName</key>
<string>$(APP_DISPLAY_NAME)</string> <= 変更
GoogleService-info.plistの各環境の切り替え
- 以下の階層でフォルダ、ファイルを作成し、Xcodeでフォルダを追加

- Build PhasesでRun Scriptを追加
- 名前を「Copy GoogleService-info.plist」に変更
- Copy Bundle Resourcesの上に移動させて、以下のコードを登録
- Copy Bundle ResourcesにGoogleService-info.plistが存在すれば、削除しておく
environment=""
if [[ $CONFIGURATION =~ -([^-]*)$ ]]; then
environment=${BASH_REMATCH[1]}
fi
GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist
GOOGLESERVICE_INFO_FILE=${PROJECT_DIR}/config/${environment}/${GOOGLESERVICE_INFO_PLIST}
if [ ! -f $GOOGLESERVICE_INFO_FILE ]
then
echo "No GoogleService-Info.plist found."
exit 1
fi
PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
cp "${GOOGLESERVICE_INFO_FILE}" "${PLIST_DESTINATION}"


方法(Flutter側での切り替え)
--dart-define
が以下のコード取得できるので、環境ごとに変更することが可能
const flavor = String.fromEnvironment('app.flavor');
if (flavor == 'dev') {
...
} else {
...
}