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
が実行されなくなった。なので、ビルドするのと同時に誤って最新版が公開されてしまうかもという心配はいらないようだ。