Expoによるストア公開なしでアップデート配布「Over the Air」
Expoを使ったことがある人はご存知かと思いますが、ストアでの審査なしでアプリの更新を配布することができます。
「“Over the Air” (OTA) updates」と呼ばれています。
ストアでの審査を通さなくても良いので便利です。間違ってもエラー起きるリリースとかをしないように最新の注意を払う必要があります。なんだかんだ、ストアの審査でエラーが見つかることもありますので、その辺は自己責任になります。
以下簡単に手順と必要な設定を記載します。とても簡単で、むしろデフォルトが有効になっていますので特に苦戦することもないです。
OTAアップデート
ドキュメント
上記ドキュメントに詳しいことが書かれています。英語ですがそれほど難しくはないです。専門用語が多いのでわからない点もあると思いますが、調べながら進めましょう。
app.json
app.jsonにて以下の指定をする必要があります。
"updates": {
"enabled": true,
"fallbackToCacheTimeout": 30000
}
fallbackToCacheTimeout
はミリ秒です。「30000」がデフォルトで、更新リクエストの際に最大30秒まで待てることになります。少し減らしておいてもいいと思います。10秒位とか。
enabled
をfalseに変えておけば、OTAが無効になった状態でアプリがビルドされます。不要なのであれば早いうちに変更しておきましょう。未指定の場合はtrueとして扱われます。
更新の実行
expoサーバでビルドを行えば、自動的に更新が公開され配布されます。
実際にはアプリが起動した際に上記のupdates
のenabled
がtrueの場合は、更新があるかどうかexpoのサーバに問い合わせています。
更新のバージョンがあればそれをサーバからインストールしています。特にユーザー側での操作も必要ないのでとても簡単です。
OTAで更新できないこと
以下の内容に関してはOTAでの更新はできません。app.jsonで以下を変更した場合、スタンドアローンアプリをストアで公開してアップデートする必要があります。
- Expo SDKのVersionアップデート
ios
android
notification keys
splash
icon
name
owner
scheme
facebookScheme
assetBundlePatterns
expoのSDKのバージョンを更新した場合は内容がOTAで配布されません。各端末のSDKと、ビルドサーバにアップしたSDKのバージョンに差異がある場合はアップデートされないようです。
ストアで新しいバージョンのSDKを含むアプリを配布することで、両環境のSDKバージョンの差異がなくなりOTAでアップデートが可能になります。
おわりに
ストアでの審査を体験したことのある人ならこの機能の便利さが伝わると思います。
ただ、絶対必要な機能というわけではないので無効にするのも方針として有りです。私はいくつかのアプリでは無効にしています。
実機でのテストをしっかり行いたい場合など邪魔になる機能ですので、開発初期段階で一度検討して方針を決めておきましょう。