In Cordova, How Can I Specify Different Package Names For Ios And Android?
Solution 1:
This is now built into CLI (finally):
In you your config.xml file-
Example:
<widgetandroid-packageName="com.example.android"ios-CFBundleIdentifier="com.example.ios">
Source:
https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/configparser/ConfigParser.js#L92
Edit: (Cordova-Lib has since been moved)
Solution 2:
A way to automate this is by adding in an after prepare hook. I started out with the example of how to Replace Text Depending on Environment from here: http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/.
I've got a project.json in my project that specifies what id I want to use for each platform:
{"android":{"app_id":"<my Android Package name>"},"ios":{"app_id":"<my iOS Bundle Identifier>"}}
Then in the /hooks directory I have an /after_prepare directory with a replace_text.js as follows:
#!/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];
functionreplace_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");
}
functionupdate_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);
} elseif (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 filesupdate_app_id(rootdir, "android", configobj);
update_app_id(rootdir, "ios", configobj);
}
Please make sure to replace the values indicated with < > brackets with the values that pertain to your app/project.
Solution 3:
Note:This has not been tested, but i think it should work.
After creating a new IOS platform in Cordova CLI, Edit the package name in the files below.
app/platforms/ios/<APP_NAME>/config.xml
app/platforms/ios/www/config.xml
To avoid an ugly complication, i suggest you try this first in a different Git Branch of your project.
Post a Comment for "In Cordova, How Can I Specify Different Package Names For Ios And Android?"