概要
AndroidStudioでの開発では、Flavorsでデバッグ版とか開発版とか定義できて便利だったのですが、NativeScriptでは多分そのような仕組みは用意されていません。
なので、直接設定ファイルを置き換えるスクリプトを作成してみました。
内容
アプリIDを変えるには、下記のファイルを書き換える必要があります。
./package.json
./app/App_Resources/Android/app.gradle
コード
最近はWindowsでもbashが使えるようになったので、以下のようなshスクリプトを用意してみました。
switch.sh
#!/bin/sh
case "$1" in
"stg")
sed -E "s/applicationId = \".*\"/applicationId = \"com.hogehoge.dev\"/g" ./app/App_Resources/Android/app.gradle > ./app.gradle.tmp
cp ./app.gradle.tmp ./app/App_Resources/Android/app.gradle
rm ./app.gradle.tmp
sed -E "s/\"id\": \".*\"/\"id\": \"com.hogehoge.dev\"/g" ./package.json > ./package.json.tmp
cp ./package.json.tmp ./package.json
rm ./package.json.tmp
echo "switch to staging."
;;
"prod")
sed -E "s/applicationId = \".*\"/applicationId = \"com.hogehoge\"/g" ./app/App_Resources/Android/app.gradle > ./app.gradle.tmp
cp ./app.gradle.tmp ./app/App_Resources/Android/app.gradle
rm ./app.gradle.tmp
sed -E "s/\"id\": \".*\"/\"id\": \"com.hogehoge\"/g" ./package.json > ./package.json.tmp
cp ./package.json.tmp ./package.json
rm ./package.json.tmp
echo "switch to production."
;;
esac
こんな感じに置き換えてやると、
./switch stg
とした時は、com.hogehoge.dev、
./switch prod
とした時は、com.hogehogeというパッケージ名になります。
プログラム内で分岐したい場合は、
let application = require('application');
let applicationId;
if(application.android){
applicationId = application.android.context.getPackageName();
}
if(application.ios){
let mainBundle = utils.ios.getter(NSBundle, NSBundle.mainBundle);
applicationId = mainBundle.bundleIdentifier;
}
みたいな感じでアプリIDが取得できますので、これを利用すれば良いと思います。
もっと良い方法があるかもしれません。