问题描述
我需要在 Ionic Appflow 中的 iOS 构建期间运行原生 Xcode 构建脚本。
例如,我使用的是cordova-plugin-salesforce-snapins插件,根据他们的文档,我们需要运行这些脚本:
select Build Phases
create Run script
paste this line of code $PODS_ROOT/ServiceSDK/Frameworks/ServiceCore.framework/prepare-framework
在 Xcode 中是可能的,但在 ionic Appflow 中没有这样的方法来实现。
请帮我配置。
解决方法
我使用 npm 插件 cordova-node-xcode
,它允许您将构建阶段写入生成的 Xcode 项目文件。将 "xcode": "^3.0.1"
添加到 package.json 中的 devDependencies。
从 AddBuildScript.js
中的 Cordova“after_build”挂钩调用 .js 脚本 config.xml
:
<platform name="ios">
<hook src="AddBuildScript.js" type="after_build" />
脚本AddBuildScript.js
:
var xcode = require('xcode'),fs = require('fs'),projectPath = 'platforms/ios/MyProj.xcodeproj/project.pbxproj',proj = xcode.project(projectPath);
proj.parse(function (err) {
var scriptName = 'My Script';
var buildPhases = proj.getPBXObject('PBXShellScriptBuildPhase');
if (JSON.stringify(buildPhases).match(scriptName)) {
console.log('Xcode project not updated - ' + scriptName + ' already exists')
} else {
var options = {shellPath: '/bin/sh',shellScript: '$PODS_ROOT/ServiceSDK/Frameworks/ServiceCore.framework/prepare-framework'};
proj.addBuildPhase([],'PBXShellScriptBuildPhase',scriptName,proj.getFirstTarget().uuid,options);
fs.writeFileSync(projectPath,proj.writeSync());
console.log('Xcode project updated - added ' + scriptName);
}
});