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
 

東京在勤、1977年生まれ、IT職歴2n年、生涯技術者として楽しく生きることを目指しています。デスマに負けず健康第一。