Closed1
EAS で build number にタイムスタンプを使いたい
-
app.config.ts
で buildNumber 等を埋めるのは Bare workflow + EAS では意味をなさない - 自動で書き換える仕組みとしては
appVersionSource: remote
にしてautoIncrement: true
として 1 ずつインクリメントするものしかなさそう - 適当な数値よりはタイムスタンプで埋めたい
とりあえず、実行すると Info.plist の build number をタイムスタンプで埋めるスクリプトを書いた
import fs from "fs/promises";
const dateToTimestamp = (date) => {
return [
date.getFullYear(),
`${date.getMonth() + 1}`.padStart(2, "0"),
`${date.getDate()}`.padStart(2, "0"),
`${date.getHours()}`.padStart(2, "0"),
`${date.getMinutes()}`.padStart(2, "0"),
`${date.getSeconds()}`.padStart(2, "0"),
].join("");
};
const bundleVersion = dateToTimestamp(new Date());
const infoPlistPath = "ios/your-app/Info.plist";
const infoPlistContent = await fs.readFile(infoPlistPath, "utf-8");
await fs.writeFile(
infoPlistPath,
infoPlistContent.replace(
/(<key>CFBundleVersion<\/key>\s*<string>).*(<\/string>)/,
`$1${bundleVersion}$2`,
),
);
これが実行されればタイムスタンプ YYYYMMDDHHmmss が build number として埋まることとなる。
ただ eas-build-pre-install
フック等で実行しても生成される ipa を見ると Info.plist の更新が確認できなかった。恐らく EAS build のその後の Configure Xcode project
ステップで Info.plist が上書きされているのだと思われる。
そこで、Xcode の Build Phases のおよそ先頭に Run script
を配置し、そこで実行するようにした。これにより意図通りの挙動が確認できた。
cd ..
node scripts/set-timestamp-to-build-number.mjs
ただ、 Expo のビルド一覧等に表示される build number は各種ステップ実行前に評価されるもののようで、そこと差が生じる点に注意が必要。
このスクラップは2022/10/18にクローズされました