在 Xcode 中保留 Cordova 设置

Persist Cordova settings in Xcode

我希望能够构建我的项目并在 Xcode 中打开它,而不必通过 Xcode UI 手动设置变量。我开始使用 Cordova 的 buildConfig 参数来指定一些设置(尤其是使用遗留构建系统并设置 Swift 版本),这适用于命令行构建,但它们不会转移到 Xcode 项目中文件。

我正在使用自定义挂钩修改我的 project.pbxproj 文件中的构建设置,但我希望这不是必需的 - 只是弄清楚调用什么设置以及它在哪个文件中是一件痛苦的事.

我无法在 Cordova 文档中找到它,所以我想问...Cordova 是否有办法在 Xcode 中保留这些构建设置?

Cordova 本身不支持直接操作 Xcode 项目文件 (project.pbxproj),但您可以使用 cordova-custom-config 来实现。

将其作为插件添加到您的项目中:

cordova plugin add cordova-custom-config

然后在你的项目config.xml中添加一个<custom-preference>,例如:

<custom-preference name="ios-XCBuildConfiguration-SWIFT_VERSION" value="2.3" />

目前cordova-custom-config只支持操作XCBuildConfiguration块。 但是,使用 xcodefunc preferences, you can directly call functions of the pbxProject interface of cordova-node-xcode 可以让您做一些额外的事情(尽管该接口当前未记录,因此您必须查看代码),例如:

<custom-preference name="ios-xcodefunc" func="addResourceFile">
    <arg type="String" value="src/content/image.png" flag="path" />
</custom-preference>

cordova-custom-config 将使用 Cordova 构建生命周期挂钩应用配置,以确保更改保留在本机 Xcode 项目中。

你说你试过使用自定义钩子,这个方法完全有效。如果您正在这样做,则不必自己手动编辑文件。使用钩子并使用 xcode npm package will make this a lot easier. In this case you only need to specify the key and value you want to change in the project file. If you want to change your workspace configuration (build system options) you would want to use the plist npm package。如果您发现使用这些工具比发布的其他答案更容易,那么使用这些工具对您来说可能不会那么痛苦。

项目编辑示例:

var xcode = require('xcode'),
    fs = require('fs'),
    plist = require('plist'),
    projectPath = 'myproject.xcodeproj/project.pbxproj',
    workspacePath = 'myproject.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings',
    myProj = xcode.project(projectPath);

myProj = myProj.parseSync();

// Add variable
myProj.AddBuildProperty('DEVELOPMENT_TEAM', 'XXXX', 'Debug');

// Save project file
fs.writeFileSync(projectPath, myProj.writeSync());

// Change workspace settings (build system)
fs.writeFileSync(workspacePath, plist.build({"BuildSystemType": "Original"}));