目的
レアなケースかも知れませんが、スマホアプリを開発する上で運営と開発のApple Developperライセンスを職務分掌的に統一出来ないことがあります。リリースする前は気にならないのですが、リリース後にアップデート開発案件が入ると以下のような問題が発生してしまいます。
AppIDは全世界でユニークである為、Developper IDが異なり、同じAppIDでアプリを公開しようとするとこうなります。このケースに遭遇したとして、出来るだけ楽をして齟齬を埋めるようにします。
対策
cordovaを使ったハイブリッドアプリの場合、プロジェクトルートに作成されたconfig.xmlのWidgetタグid属性値がAppIDとして扱われます。
<?xml version='1.0' encoding='utf-8'?>
<widget id="jp.co.xyz.awesomeapp" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Aweome App</name>
:
(省略)
納品する前の開発中はこのidを「jp.co.xyz.awesomeapp-devel」などにしておけば既存AppIDとは被らない為、開発中のリリースビルドも通るようになります。
変えたことを忘れてもいいように
納品時には元に戻すスクリプトを書いておきます。
XMLファイルを読み込み、編集して保存する為にxml2jsモジュールを使います。
$ npm i xml2js
+ xml2js@0.4.19
added 2 packages and updated 2 packages in 21.217s
例として{プロジェクトルート}/tools/prepareReleaseBuild.jsをこんな感じで作っておきます。
var fs = require("fs");
var xml2js = require("xml2js");
fs.readFile("./config.xml", (err, data) => {
xml2js.parseString(data.toString(), (err, result) => {
if (err) {
console.log(err);
} else {
result.widget.$.id = "jp.co.xyz.awesomeapp"
var builder = new xml2js.Builder();
var xml = builder.buildObject(result);
fs.writeFile("./config.xml", xml, err => {
if (err) {
console.log(err);
}
});
}
});
});
後はpackage.jsonでnpmスクリプトにしておき、npm run prepareReleaseBuildすればconfig.xmlのidが元通りになるようにしておきます。
"pre-release-build": "node ./tool/prepareReleaseBuild
まとめ
人間は忘れる生き物ですし、引き継いだ担当者が「jp.co.xyz.awesomeapp」に戻さずに納品してしまうリスクは取り除いておきたいので、上記のスクリプトをJenkinsなりにジョブ登録しておき、納品時に必ず流すルールにしてしておけば安心です。