Expoのマネージドアプリのアップデートに関するメモ
expo publishについて
expo publishを実行するとプロジェクトの永続的なURLが発行される。
これはExpo Goアプリで開くことができる。
そして、アプリの画像、フォント、動画などのアセットがすべてCDNにアップロードされる。
expo publishを実行した際に指定したリリースチャンネルとインストールされたアプリのリリースチャンネルが同じであり、そのプッシュされたリリースは最新版でかつ互換性のあるリリースである場合は、ユーザーはスタンドアロンなアプリを通してそのアップデートを取得することができる。
これは、いわゆるストアを経由しないでアップデートを配布できるOTAという仕組み。
互換性とは
互換性に与える影響には主に次の3つがある。
更新が反映される流れ
「アプリのビルド時に指定したリリースチャンネルにプッシュされたすべてのリリースを確認したか」
この問いにYESの場合はすでに最新版が反映されているので何も行われない。
NOの場合はリリースチャンネルにプッシュされた最新版のリリースを取得する。
「互換性があるか?そしてSDKバージョンの互換性は大丈夫か」という問いが行われ、YESの場合にのみ最新版のリリースの反映が行われてアプリが更新される。
expo publishによる更新が反映できない場合に考えられること
app.jsonの特定のフィールドに対して変更を加えた場合は、expo publishを通して最新リリースを配信するのではなく、アプリのバイナリを再度ビルドしてストア経由でアップデートを配信する必要がある。
特定のフィールドとは次の通り。
iosキーに設定するオブジェクトのいかなる内容androidキーに設定するオブジェクトのいかなる内容notificationキーに設定するオブジェクトのいかなる内容splashキーに設定するオブジェクトのいかなる内容iconキーに設定する文字列の内容nameキーに設定する文字列の内容ownerキーに設定する文字列の内容schemeキーに設定する文字列の内容facebookSchemeキーに設定する文字列の内容assetBundlePatternsキーに設定する配列の内容
そしてもちろん、Expo SDKのバージョンが変更された場合もexpo publishを通してアプリの更新を行うことはできないので、SDKのバージョンを上げる際には注意が必要になる。
加えて、Firebaseプロジェクトにアプリを追加した際に発行されるgoogle-services.jsonやGoogleService-Info.plistの内容が変更になった場合にも、アプリの再ビルドが必要になる。
Publishing updates - Expo Documentation
EAS Buildでは自動的にexpo publishが実行されなくなった
従来のビルドではexpo buildコマンドを実行していたが、この時の注意点としてビルドを実行する前にアプリバンドルが自動的にアップデートとして指定したリリースチャンネルに公開されてしまっていた。
EAS Buildではビルドプロセスのひとつとしてexpo publishが実行されなくなった。なので、ビルドするのと同時に誤って最新版が公開されてしまうかもという心配はいらないようだ。