やりたいこと
- 以前、ExpoでiOSアプリをeas buildする時はbuildNumberをapp.config.tsで動的に設定すると楽だよって話という記事を書いた。
- これはExpo上でiOSアプリのbuildNumberを日付にすることで、eas buildするたびに手動でインクリメントする必要がなくて楽だという記事。
- しかし、buildNumberのandroid版であるversionCodeは最大値の問題で同じ戦略は取れなかった。
- 今回はその問題を解決する。
app.jsonのversionCodeをインクリメントするスクリプトを用意する
力技感があるが、今回はapp.jsonを丸ごと書き換えてしまうという作戦をとることにした。
以下のscriptをプロジェクトのルートに用意する
updateAndroidVesionCode.ts
const fs = require("fs")
const appJson = JSON.parse(fs.readFileSync("./app.json", "utf8"))
appJson.expo.android.versionCode += 1
fs.writeFileSync("./app.json", JSON.stringify(appJson, null, " "))
app.jsonを読み込んできて、versionCodeを1インクリメントし、保存するというスクリプト
package.jsonをスクリプトを実行するように書き換える
これをeas buildの前に実行すればよいので、package.jsonを以下のように書き換える
package.json
{
"name": "hogehoge",
"version": "1.0.0",
"main": "node_modules/expo/AppEntry.js",
"scripts": {
"start": "expo start",
~省略~
"build:android": "node updateAndroidVesionCode.ts && eas build --platform android",
"test": "jest",
~省略~
},
~省略~
}
まとめ
iOSのbuildNumberも同じやり方ができるはずなので、これからExpoでアプリを作る人はそうすると良いと思う。
自分はiOSのほうは日付を使ってしまっているので、そのまま日付を使い続けるしかないが。
追記
この記事を書き終わって数日後にExpoが公式で自動インクリメントをサポートしてることを知った。
https://docs.expo.dev/build-reference/app-versions/
ちなみにこの設定を導入している個人開発アプリは↓です
【個人開発】「後で」返事ができる文通チャットアプリ「レイター」を作った話:技術編
Twitterもやってるので、よければフォローお願いします。
→https://twitter.com/ObataGenta