如何在NativeScript中的“准备之前”钩子中操作projectIdentifiers / app标识符

时间:2020-01-10 13:26:39

标签: nativescript

是否可以通过NativeScript(6.3)中的特定钩子(例如,准备前)来更改/操作应用程序ID( com.somename.xyz )?

我们正在使用带有一些符号链接的白标应用程序(来自同一代码库的多个客户端)来使用不同的CSS文件,字体等,并希望以编程方式更改包名称:

文件:/hooks/before-prepare/app-identifier.js

module.exports = function ($logger, $projectData, $injector, hookArgs) {
  return new Promise((resolve, reject) => {
    $projectData.projectIdentifiers.ios = 'com.somename.xyz'
    $projectData.projectIdentifiers.android = 'com.somename.xyz'
    resolve()
  })
}

...但是应用程序以

开头

在设备模拟器上成功同步了应用程序 com.brand.abc ...

(在我们的package.json中定义)

1 个答案:

答案 0 :(得分:0)

您可以在a钩中执行此操作-对于Android,可以通过修改after-prepare文件;对于iOS是,可以通过编辑strings.xml

plist

请注意,以上假设在var plist = require('simple-plist'); var path = require("path"); var fs = require("fs"); module.exports = function($logger, $projectData, hookArgs) { return new Promise(function(resolve, reject) { const platformFromHookArgs = hookArgs && (hookArgs.platform || (hookArgs.prepareData && hookArgs.prepareData.platform)); const platform = (platformFromHookArgs || '').toLowerCase(); var env = (hookArgs.platformSpecificData || hookArgs.prepareData).env; if (platform === 'ios') { let infoFile = path.join($projectData.platformsDir, "ios", $projectData.projectName, $projectData.projectName + '-Info.plist'); if (fs.existsSync(infoFile) && env && env.version ) { let parts = env.version.split('.'); let data = plist.readFileSync(infoFile); if (env.environment && env.environment !== 'prod') { data.CFBundleDisplayName = env.environment + ' - ' + data.CFBundleDisplayName } plist.writeFileSync(infoFile, data); } } if (platform === 'android') { infoFile = path.join($projectData.platformsDir, 'android','app', 'src', 'main', 'res','values', 'strings.xml'); if (fs.existsSync(infoFile) && env && env.environment && env.environment !== 'prod') { let contents = fs.readFileSync(infoFile,'utf8'); contents = contents.replace(/MyNativeScriptAppName/g, env.environment + ' - MyNewEnvname'); fs.writeFileSync(infoFile, contents); } } resolve(); }); } 命令中设置了环境变量。这可以通过将tns build用于webpack来完成:

DefinePlugin
相关问题