📲

Expo(EAS)で環境ごとにアプリをインストールできるようにする

2024/03/21に公開

Expoで開発しているアプリを実機にインストールする時に、ProductionとDevelopmentを別のアプリとしてインストールする方法。

前提

基本的には公式通りに進めれば問題ないが、記載されていない箇所もあるのでメモを残しておく。
https://docs.expo.dev/build-reference/variants/

Bundle Identifierを作成する

Bundle IdentifierをDevelopment用に追加で作成する。
Apple DeveloperのIdentifiersのページから作成する。

もともとのIdentifiersがcom.xxx.appnameだった場合、com.xxx.appname.developなどにしておけばOK。

ファイルの変更

公式ドキュメントの通り、app.jsonをapp.config.jsonに書き換える。
nameとbundleIdentifierを環境変数で分けるようにする。

const IS_DEV = process.env.APP_VARIANT === 'development';

export default {
  name: IS_DEV ? 'MyApp (Dev)' : 'MyApp',
  slug: 'my-app',
  ios: {
    bundleIdentifier: IS_DEV ? 'com.myapp.dev' : 'com.myapp',
  },
  android: {
    package: IS_DEV ? 'com.myapp.dev' : 'com.myapp',
  },
};

eas.jsonにもAPP_VARIANTを追加する

{
  "build": {
    "development": {
      "developmentClient": true,
      "env": {
        "APP_VARIANT": "development"
      }
    },
    "production": {}
  }
}

package.jsonのdev scriptも、VARIANTを指定する。

{
  "scripts": {
    "dev": "APP_VARIANT=development npx expo start"
  }
}

EASでビルドする

まずは通常通りビルドコマンドを実行する。

eas build --profile development --platform ios

Team, ProviderはProductionと同じでいいので、同じものを選択する。
そうすると、app.config.jsに記載していたbundleIdentifierが登録される

✔ Select a Team › Team Name
✔ Select a Provider › Provider Name
✔ Bundle identifier registered com.myapp.dev

その他に、Reuse this distribution certificate?のように過去に使った設定を使い回すか聞かれるので、同じもので問題ないのであれば再利用を選択すればOK。

Sign in with Appleの設定

SupabaseでAppleログインを設定していたので、Authorized Client IDs (iOS, macOS, watchOS, tvOS bundle IDs or service IDs)にカンマ区切りでDevelopment環境用のIdentifiersを追加する。

Discussion