posted: 2020/07/25
Expoでflavorっぽいことをする
このドキュメントはすでに古くなっています。
https://docs.expo.io/workflow/configuration/#dynamic-configuration-with-appconfigjs
app.config.js
によってdynamic conifgがすでに可能ですhttps://docs.expo.io/workflow/configuration/#dynamic-configuration-with-appconfigjs
stagingのときに別bundleIdentifierにしたりアイコンにstaging帯つけたいなーみたいな事がある。(例えばこういうことがやりたいときとか)
flavorとか言うのが近いやつ。ざっくりだけど簡易なスクリプトで解決した
方針
- app.jsonを書き換えればflaveorっぽいことが出来そう
- やり方として、flavoer部分をオーバーライドするように差分を書いておく
deepmerge
してstaging用のapp.jsonを生成する- ↑このコードをbuild前に発火するように
prebuild
として仕込む
コード
app-staging-override.json
例えばbundlerIdを変更したいならこんなの
{
"expo": {
"slug":"my-application-staging"
"ios": {
"bundleIdentifier": "com.foo.baz.staging"
}
}
}
}
bin/generate-staging-app-json.js
はこんな具合にjsonをmergeしてstdoutするだけ。fileでセーブするとこまでやっても良いけど今回はパイプで処理することにしたconst merge = require("deepmerge")
const baseAppJson = require("../app.json")
const override = require("../app-staging-override.json")
const merged = merge.all([baseAppJson, override])
console.log(JSON.stringify(merged, null, 2))
package.jsonはこんな具合
"scripts:"{
"build:ios:production": "expo build:ios --type archive --release-channel=YOUR_PRODUCTION_CHANNEL"
// ↓stagingのときはprebuildをかける
"prebuild:ios:staging": "node bin/generate-staging-app-json.js > app.staging.generated.json",
"build:ios:staging": "expo build:ios --config app.staging.generated.json --type archive --release-channel=YOUR_STAGING_CHANNEL "
}