One IT Thing

IT業界を楽しむ為の学習系雑記

AppStore

Cordovaのconfig.xmlのid属性値を動的に切り替える

投稿日:2019年6月25日 更新日:

目的

レアなケースかも知れませんが、スマホアプリを開発する上で運営と開発の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なりにジョブ登録しておき、納品時に必ず流すルールにしてしておけば安心です。

-AppStore
-, ,

執筆者:

関連記事

PWAストアの実現性についての考察

(*)この記事内では「Google Play」、「App Store」、「Microsoft Store」で公開されているアプリを「ストアアプリ」と呼んでいます。 先日B2Bアプリはストアアプリにする …

B2BスマホアプリをGooglePlay、AppStoreに公開することがお勧め出来ない7つの理由とその対策

商材の性質やシーンに応じてスマホアプリをGooglePlayやAppleStoreのようなストアに公開することがマイナスに働くこともあります。 商材として価値の有る電子データをお持ちの商社さんとアプリ …


shingo nakanishi。東京で消耗中の職歴20年越え中年ITエンジニアです。「生涯現役プログラマを楽しむ」ことができる働き方探しをライフワークにしています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。