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-v1
のreleaseChannel
が指定されているので、--profile production
を指定した場合はprod-v1
リリースチャンネルでビルドされる。
eas build --platform android --profile production
prod-v1
でビルドしたアプリはあとでrelease-channel
をprod-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.jsonのruntimeVersion
に{"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が同じ場合は、新しく公開されたリリースが配信される。
....はず。