たかぎとねこの忘備録

プログラミングに関する忘備録を自分用に残しときます。マサカリ怖い。

ExpoのRelease ChannelsとRuntime Versionsを調べてみた。

Release Channelsとは

リリースチャンネルを使用することで、スタンドアロンアプリのビルド時に指定したリリースチャンネルと同じリリースチャンネルが指定されたアップデートを配信することができる。

これにより、複数の環境やバージョンを分けてアップデートを配信したりすることができる。

例えば、特定のリリースチャンネルでビルドされたアプリ向けにアップデートを公開する場合は--release-channelフラグを使用する。

expo publish --release-channel リリースチャンネル名

EAS Buildを使用してスタンドアロンアプリをビルドする際はビルドプロファイルにreleaseChannelフィールドを指定する。指定しない場合はdefaultチャンネルが使用される。

// eas.json
{
  "build": {
    "preview": {
      "distribution": "internal",
      "releaseChannel": "staging",
      "env": {
        "APP_VARIANT": "staging"
      }
    },
    "production": {
      "releaseChannel": "prod-v1"
    }
  }
}

ビルドするときは、--profileのみを指定し、release-channelは指定しない。

上記のeas.jsonの設定でproductionプロファイルにprod-v1releaseChannelが指定されているので、--profile productionを指定した場合はprod-v1リリースチャンネルでビルドされる。

eas build --platform android --profile production

prod-v1でビルドしたアプリはあとでrelease-channelprod-v2に変更してexpo publish --release-channel prod-v2を実行しても、prod-v1でビルドされたアプリではそのprod-v2で公開されたリリースを受け取ることはできない。

アプリストアで公開されている最新バージョンのアプリがprod-v2リリースチャンネルでビルドされていて、まだprod-v1リリースチャンネルのアプリを使いづけているユーザー向けに最新版のprod-v1リリースを配信することもできる。

Release channels - Expo Documentation

Runtime Versionsとは

ランタイムバージョンで表されるのは、アプリのビルド時に存在するネイティブコードとそのコードの組み合わせと構成である。そしてこれはアプリのバイナリをビルドするたびに固有なものである。

デフォルトの設定では、Expo SDKのバージョンによってRuntime Versionが決定される。しかし、これでは正しい意味でのRuntime Versionを表すことはできない。

本来は互換性のあるビルドに合わせてRuntime Versionを設定したい。Expo SDKのバージョンが異なっても互換性があるなら同じRuntime Versionを使用したい。

Runtime Versionを更新するタイミングは、プロジェクトのネイティブモジュールを更新したり、JS-nativeインターフェースを変更したりするときである。

eas.jsonruntimeVersion{"policy":"nativeVersion"}を設定すると自動的にRuntime Versionが生成される。

Runtime Versionはapp.jsonで設定する。

{
  "expo": {
    "runtimeVersion": "2.718"
  }
}

runtimeVersionが異なるビルドにはexpo publishで配信されたリリースは配信されない。同じruntimeVersionが設定されているビルドにのみ配信される。

Runtime Versions - Expo Documentation

まとめ

Release Channelが異なればそもそも新しく公開されたリリースは配信されない。

Release Channelが同じでもRuntime Versionが異なれば、新しく公開されたリリースは配信されない。

Release Channelが同じでRuntime Versionが同じ場合は、新しく公開されたリリースが配信される。

....はず。