Ios 在基于Cordova的Xcode项目中自动添加构建阶段
我有一个基于Cordova的iOS项目,在该项目中,我需要向构建阶段添加自定义脚本。我有一个设置,它可以正常工作,但是我需要能够以某种方式自动添加构建阶段,因为我需要项目能够在CI服务器上自动安装和构建,而无需在Xcode中手动添加阶段 为了澄清这一点,当运行Ios 在基于Cordova的Xcode项目中自动添加构建阶段,ios,xcode,cordova,Ios,Xcode,Cordova,我有一个基于Cordova的iOS项目,在该项目中,我需要向构建阶段添加自定义脚本。我有一个设置,它可以正常工作,但是我需要能够以某种方式自动添加构建阶段,因为我需要项目能够在CI服务器上自动安装和构建,而无需在Xcode中手动添加阶段 为了澄清这一点,当运行cordova platform add ios时,项目是在没有构建阶段的情况下创建的,我需要在cordova build ios之前(或期间)以编程方式添加构建阶段 我可以在.xcconfig文件中添加自定义构建设置,是否有地方可以定义构
cordova platform add ios
时,项目是在没有构建阶段的情况下创建的,我需要在cordova build ios
之前(或期间)以编程方式添加构建阶段
我可以在.xcconfig文件中添加自定义构建设置,是否有地方可以定义构建阶段?我看到构建阶段出现在我的.pbxproj文件中,但是这是自动生成的,并且包含一些随机ID,所以我不确定我是否可以解析并插入任意内容?我找到的解决方案是使用Xcode项目解析器,这里有一些。我使用了
cordova节点xcode
。我找不到任何API文档,但单元测试有助于确定我需要什么。我需要使用proj.addBuildPhase
方法,这里可以看到一个使用该方法添加运行脚本的示例:基于一个可接受的答案,我创建了代码,也许有人可以使用它:)
使用以下设备安装xcode npm:
npm i xcode
在根目录中创建extend_build_phase.js:
var xcode = require('xcode');
var fs = require('fs');
var path = require('path');
const xcodeProjPath = fromDir('platforms/ios', '.xcodeproj', false);
const projectPath = xcodeProjPath + '/project.pbxproj';
const myProj = xcode.project(projectPath);
// Here you can add your own shellScript
var options = { shellPath: '/bin/sh', shellScript: 'echo "hello world!"' };
myProj.parse(function(err) {
myProj.addBuildPhase([], 'PBXShellScriptBuildPhase', 'Run a script',myProj.getFirstTarget().uuid, options);
fs.writeFileSync(projectPath, myProj.writeSync());
})
function fromDir(startPath, filter, rec, multiple) {
if (!fs.existsSync(startPath)) {
console.log("no dir ", startPath);
return;
}
const files = fs.readdirSync(startPath);
var resultFiles = [];
for (var i = 0; i < files.length; i++) {
var filename = path.join(startPath, files[i]);
var stat = fs.lstatSync(filename);
if (stat.isDirectory() && rec) {
fromDir(filename, filter); //recurse
}
if (filename.indexOf(filter) >= 0) {
if (multiple) {
resultFiles.push(filename);
} else {
return filename;
}
}
}
if (multiple) {
return resultFiles;
}
}
你上面链接的线路现在是130
<platform name="ios">
...
<hook src="extend_build_phase.js" type="after_platform_add" />
...
</platform>
ionic cordova platform rm ios
ionic cordova platform add ios
ionic cordova build ios