web-dev-qa-db-ja.com

コルドバで、iOSとAndroidに異なるパッケージ名を指定するにはどうすればよいですか?

レガシー要因により、my AndroidとiOSアプリのパッケージ名は異なります。現在、Cordovaはビルド時にconfig.xmlからウィジェットID属性を両方に挿入しているようです。これをカスタマイズしますか?AndroidManifest.xmlを直接編集すると、すぐに上書きされると思います。

ありがとう。

18
smoyth

これは現在CLIに組み込まれています(最終的に):

あなたのconfig.xmlファイル-

例:

<widget
    Android-packageName="com.example.Android"
    ios-CFBundleIdentifier="com.example.ios">

ソース:

https://github.com/Apache/cordova-lib/blob/master/cordova-lib/src/configparser/ConfigParser.js#L92

編集:(Cordova-Libはその後移動されました)

https://github.com/Apache/cordova-lib/blob/master/cordova-common/src/ConfigParser/ConfigParser.js#L109

43
tabrindle

これを自動化する方法は、afterprepareフックを追加することです。ここから、環境に応じてテキストを置き換える方法の例から始めました: http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/

プロジェクトにproject.jsonがあり、各プラットフォームで使用するIDを指定しています。

{ 
    "Android": 
    {
        "app_id": "<my Android Package name>"
    },
    "ios": 
    {
        "app_id": "<my iOS Bundle Identifier>"
    }
}

次に、/ hooksディレクトリに、replace_text.jsを含む/ after_prepareディレクトリがあります。

#!/usr/bin/env node

// this plugin replaces arbitrary text in arbitrary files
//

var fs = require("fs");
var path = require("path");

var rootdir = process.argv[2];

function replace_string_in_file(filename, to_replace, replace_with) {
    var data = fs.readFileSync(filename, "utf8");

    var result = data.replace(to_replace, replace_with);
    fs.writeFileSync(filename, result, "utf8");
}

function update_app_id(rootdir, platform, configobj) {
    var appId = configobj[platform].app_id,
        stringToReplace = "<value of the widget id property in the config.xml>";

    if (platform === "Android") {

        replace_string_in_file(path.join(rootdir, "platforms/Android/AndroidManifest.xml"), stringToReplace, appId);
        replace_string_in_file(path.join(rootdir, "platforms/Android/res/xml/config.xml"), stringToReplace, appId);

    } else if (platform === "ios") {

        replace_string_in_file(path.join(rootdir, "platforms/ios/<app name>/<app name>-Info.plist"), stringToReplace, appId);
        replace_string_in_file(path.join(rootdir, "platforms/ios/<app name>/config.xml"), stringToReplace, appId);

    }
}

if (rootdir) {
    var ourconfigfile = path.join(rootdir, "project.json");
    var configobj = JSON.parse(fs.readFileSync(ourconfigfile, "utf8"));

    // Update each platform's specific configuration/properties files
    update_app_id(rootdir, "Android", configobj);
    update_app_id(rootdir, "ios", configobj);
}

<>括弧で示された値は、アプリ/プロジェクトに関連する値に置き換えてください。

1
SunshinyDoyle

注:これはテストされていませんが、動作するはずです。

CordovaCLIで新しいIOSプラットフォームを作成した後、以下のファイルでパッケージ名を編集します。

app/platforms/ios/<APP_NAME>/config.xmlapp/platforms/ios/www/config.xml

醜い複雑さを避けるために、プロジェクトの別のGitブランチで最初にこれを試すことをお勧めします。