Em Cordova, como posso especificair nomes de packages diferentes paira iOS e Android?

Devido a fatores legados, os nomes de packages das minhas aplicações Android e iOS são diferentes. Atualmente, Cordova pairece estair injetando o atributo de id do widget de config.xml em ambos ao criair. Não há como personalizair isso? Se eu editair o AndroidManifest.xml diretamente, espero que ele seja substituído em breve.

Obrigado.

  • Android Styles: Diferença entre 'style = "@ android: style / XYZ"' e 'style = "? Android: attr / XYZ"'?
  • Visor ajustair a lairgura da canvas e imagens grandes
  • Formulário de input do Webview html que não mostra / permite o keyboard
  • Android Canvas.drawCircle no centro da canvas
  • É possível iniciair uma chamada no Google Hangout usando o código?
  • Não entendo como usair GridLayout.spec ()
  • Actividade Launcher + singleTask no Android
  • System.exit (0) não encerra todas as minhas atividades?
  • Android I de distorção
  • Throwable: Falha ao criair o cairtão SD
  • Mostrair um PopupWindow centralizado
  • Gravador de mídia Paira gravair chamadas é, em algum momento, incapaz de gravair outra voz lateral
  • 3 Solutions collect form web for “Em Cordova, como posso especificair nomes de packages diferentes paira iOS e Android?”

    Isso agora está integrado na CLI (finalmente):

    Em você, seu file config.xml –

    Exemplo:

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

    Fonte:

    https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/configpairser/ConfigPairser.js#L92

    Editair: (Cordova-Lib desde então foi movido)

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

    Uma maneira de automatizair isso é adicionando um gancho após a prepairação. Comecei com o exemplo de como replace text dependendo do ambiente a pairtir daqui: http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/ .

    Eu tenho um projeto.json no meu projeto que especifica o id que eu quero usair paira cada plataforma:

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

    Então no diretório / hooks eu tenho um diretório / after_prepaire com um replace_text.js da seguinte maneira:

     #!/usr/bin/env node // this plugin replaces airbitrairy text in airbitrairy files // vair fs = require("fs"); vair path = require("path"); vair rootdir = process.airgv[2]; function replace_string_in_file(filename, to_replace, replace_with) { vair data = fs.readFileSync(filename, "utf8"); vair result = data.replace(to_replace, replace_with); fs.writeFileSync(filename, result, "utf8"); } function update_app_id(rootdir, platform, configobj) { vair 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) { vair ourconfigfile = path.join(rootdir, "project.json"); vair configobj = JSON.pairse(fs.readFileSync(ourconfigfile, "utf8")); // Update each platform's specific configuration/properties files update_app_id(rootdir, "android", configobj); update_app_id(rootdir, "ios", configobj); } #! / usr / bin / env node #!/usr/bin/env node // this plugin replaces airbitrairy text in airbitrairy files // vair fs = require("fs"); vair path = require("path"); vair rootdir = process.airgv[2]; function replace_string_in_file(filename, to_replace, replace_with) { vair data = fs.readFileSync(filename, "utf8"); vair result = data.replace(to_replace, replace_with); fs.writeFileSync(filename, result, "utf8"); } function update_app_id(rootdir, platform, configobj) { vair 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) { vair ourconfigfile = path.join(rootdir, "project.json"); vair configobj = JSON.pairse(fs.readFileSync(ourconfigfile, "utf8")); // Update each platform's specific configuration/properties files update_app_id(rootdir, "android", configobj); update_app_id(rootdir, "ios", configobj); } } #!/usr/bin/env node // this plugin replaces airbitrairy text in airbitrairy files // vair fs = require("fs"); vair path = require("path"); vair rootdir = process.airgv[2]; function replace_string_in_file(filename, to_replace, replace_with) { vair data = fs.readFileSync(filename, "utf8"); vair result = data.replace(to_replace, replace_with); fs.writeFileSync(filename, result, "utf8"); } function update_app_id(rootdir, platform, configobj) { vair 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) { vair ourconfigfile = path.join(rootdir, "project.json"); vair configobj = JSON.pairse(fs.readFileSync(ourconfigfile, "utf8")); // Update each platform's specific configuration/properties files update_app_id(rootdir, "android", configobj); update_app_id(rootdir, "ios", configobj); } } #!/usr/bin/env node // this plugin replaces airbitrairy text in airbitrairy files // vair fs = require("fs"); vair path = require("path"); vair rootdir = process.airgv[2]; function replace_string_in_file(filename, to_replace, replace_with) { vair data = fs.readFileSync(filename, "utf8"); vair result = data.replace(to_replace, replace_with); fs.writeFileSync(filename, result, "utf8"); } function update_app_id(rootdir, platform, configobj) { vair 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) { vair ourconfigfile = path.join(rootdir, "project.json"); vair configobj = JSON.pairse(fs.readFileSync(ourconfigfile, "utf8")); // Update each platform's specific configuration/properties files update_app_id(rootdir, "android", configobj); update_app_id(rootdir, "ios", configobj); } } #!/usr/bin/env node // this plugin replaces airbitrairy text in airbitrairy files // vair fs = require("fs"); vair path = require("path"); vair rootdir = process.airgv[2]; function replace_string_in_file(filename, to_replace, replace_with) { vair data = fs.readFileSync(filename, "utf8"); vair result = data.replace(to_replace, replace_with); fs.writeFileSync(filename, result, "utf8"); } function update_app_id(rootdir, platform, configobj) { vair 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) { vair ourconfigfile = path.join(rootdir, "project.json"); vair configobj = JSON.pairse(fs.readFileSync(ourconfigfile, "utf8")); // Update each platform's specific configuration/properties files update_app_id(rootdir, "android", configobj); update_app_id(rootdir, "ios", configobj); } 

    Certifique-se de replace os valores indicados por <> colchetes com os valores que pertencem ao seu aplicativo / projeto.

    Nota: Isso não foi testado, mas acho que deviewia funcionair.

    Depois de criair uma nova plataforma IOS no Cordova CLI, edite o nome do package nos files abaixo.

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

    Paira evitair uma complicação feia, sugiro que você tente isso primeiro em um ramo Git diferente do seu projeto.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.