如何在 Ionic Appflow 中添加构建阶段运行脚本阶段

问题描述

我需要在 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);
        }
});