たかぎとねこの忘備録

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

Expoのマネージドアプリのアップデートに関するメモ

expo publishについて

expo publishを実行するとプロジェクトの永続的なURLが発行される。 これはExpo Goアプリで開くことができる。

そして、アプリの画像、フォント、動画などのアセットがすべてCDNにアップロードされる。

expo publishを実行した際に指定したリリースチャンネルとインストールされたアプリのリリースチャンネルが同じであり、そのプッシュされたリリースは最新版でかつ互換性のあるリリースである場合は、ユーザーはスタンドアロンなアプリを通してそのアップデートを取得することができる。

これは、いわゆるストアを経由しないでアップデートを配布できるOTAという仕組み。

互換性とは

互換性に与える影響には主に次の3つがある。

  • Expo SDKのバージョン
  • iOSAndroidなどのプラットフォーム
  • リリースチャンネル
更新が反映される流れ

「アプリのビルド時に指定したリリースチャンネルにプッシュされたすべてのリリースを確認したか」

この問いに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.jsonGoogleService-Info.plistの内容が変更になった場合にも、アプリの再ビルドが必要になる。

Publishing updates - Expo Documentation

ExpoのOTA updateの仕様について

EAS Buildでは自動的にexpo publishが実行されなくなった

従来のビルドではexpo buildコマンドを実行していたが、この時の注意点としてビルドを実行する前にアプリバンドルが自動的にアップデートとして指定したリリースチャンネルに公開されてしまっていた。

EAS Buildではビルドプロセスのひとつとしてexpo publishが実行されなくなった。なので、ビルドするのと同時に誤って最新版が公開されてしまうかもという心配はいらないようだ。

Migrating from "expo build" - Expo Documentation

React Native + ExpoのアプリにHermes、EAS Build、EAS Submitを導入した