一つの端末に複数環境用にビルドされたapkをインストールする話
ひとつの端末に本番環境、ステージング環境、開発環境用のそれぞれの環境でビルドされたアプリをインストールするためには、動的にapp.config.js
のios.bundleIdentifier
フィールドとandroid.package
フィールドを変更する必要がある。
そのために環境変数APP_VARIANT
を今回は使用する。
APP_VARIANT
がdevelopment
の場合は開発環境を表、preview
の場合はステージング環境、何も設定されていない場合は本番環境を表すようにする。
この値を変更するためにeas.json
のenv
フィールドを利用する。
各ビルド用のプロファイルにenv.APP_VARIANT
フィールドを用意してそれぞれの値を準備する。
// eas.json { "build": { "development": { "developmentClient": true, "env": { "APP_VARIANT": "development", } }, "preview": { "extends": "production", "env": { "APP_VARIANT": "preview" } }, "production": {} } }
次に、app.config.jsを作成する今回はすでにapp.jsonファイルが事前に作成されていることを前提とする。
app.jsonとapp.config.jsを併用することで、最初にapp.jsonが読み込まれた後、正規化された内容がapp.config.jsでexport default
された関数に渡されます。それを使用することで既存の設定内容を活かしながら、動的にせって内容を変更することが可能になります。
// app.config.js const IS_DEV = process.env.APP_VARIANT === "development"; const IS_STAGING = process.env.APP_VARIANT === "preview"; function getAppIds() { let iOSBundleIdentifier = "com.company.myapp"; let androidPackage = "com.company.myapp"; if (process.env.APP_VARIANT === "development") { iOSBundleIdentifier = "com.company.myapp.dev"; androidPackage = "com.company.myapp.dev"; } if (process.env.APP_VARIANT === "preview") { iOSBundleIdentifier = "com.company.myapp.staging"; androidPackage = "com.company.myapp.staging"; } return { iOSBundleIdentifier, androidPackage, }; } export default ({ config }) => { const { iosBundleIdentifier, androidPackage } = getAppIds(); return { ...config, ios: { ...config.ios, bundleIdentifier: iosBundleIdentifier, }, android: { ...config.android, package: androidPackage, }, }; };
この設定によって、eas build --platform android --profile preview
を実行した場合は、環境変数APP_VARIANT
にpreview
が設定されるのでandroid.package
の値がcom.company.myapp.staging
に更新された上でビルドされる。