是否可以通过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中定义)
答案 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