显然 TO 解决了这个问题,但由于似乎有更多人对此感兴趣,这里有一个可能的解决方案。
您可以编写一个脚本来编辑您的 xcodeproj 文件中的 project.pbxproj(例如,可以使用 finder 中的“显示包内容”选项查看)。
在此文件中有一个项目设置部分,称为 PBXProject 部分。在那里,您可以为目标添加功能。您可能需要编写自定义解析逻辑,因为这个文件是用XCode config format 编写的,没有像 XML 或 JSON 这样流行的东西。
您要更新的部分如下所示:
/* Begin PBXProject section */
EB1DDE9C1A3334EC00D778DE /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0610;
/* ...more settings */
TargetAttributes = {
EB1DDEA31A3334EC00D778DE = {/* this is one target */
CreatedOnToolsVersion = 6.1.1;
DevelopmentTeam = 37QAPDY2PR;
/* ...more settings */
};
EB9F6CE11A8812550038355B = {/* another possible target */
CreatedOnToolsVersion = 6.2;
DevelopmentTeam = 37QAPDY2PR;
/* ...more settings */
};
};
};
/* ...more settings */
};
/* End PBXProject section */
您想将 iCloud 功能添加到目标。这看起来像这样:
SystemCapabilities = {
com.apple.iCloud = {
enabled = 1;
};
};
假设您想将 iCloud 功能添加到目标 EB1DDEA31A3334EC00D778DE,那么 TargetAttributes 条目将如下所示:
TargetAttributes = {
EB1DDEA31A3334EC00D778DE = {/* this is one target */
CreatedOnToolsVersion = 6.1.1;
DevelopmentTeam = 37QAPDY2PR;
SystemCapabilities = {
com.apple.iCloud = {
enabled = 1;
};
};
};
EB9F6CE11A8812550038355B = {/* another possible target */
CreatedOnToolsVersion = 6.2;
DevelopmentTeam = 37QAPDY2PR;
/* ...more settings */
};
};
现在你需要确定一些事情才能做到这一点:
1.识别部分
我会让脚本查找字符串“Begin PBXProject section”,然后查找“TargetAttributes”,这两个字符串在文件中都是唯一的。从理论上讲,“TargetAttributes”应该足够了,但更好的是安全......并记住在脚本中添加适当的日志记录并验证结果,因为这些字符串在未来的 XCode 版本中很容易改变(我已经看到它们没有改变,不过,一段时间已经)。
2。确定目标
此文件中有多个部分,您可以在其中看到与名称关联的目标的 id。我只是自己查找并在脚本中对其进行硬编码,因为除非您重新创建目标,否则此 ID 不会更改。如果您真的需要它,您还可以自动执行此操作...通过查找目标的名称及其与 id 关联的格式。应该还有其他配置文件出现此关联(在此文件中,名称仅显示为注释)。
3.处理目标已经有 SystemCapabilities 条目,并且已经有 iCloud 条目的情况。
如果您的目标具有其他功能,则此条目可能已经存在。此外,如果您已经启用了 iCloud,或者您曾经启用和禁用了 iCloud,则该条目也将存在(值为 0)。这必须在脚本中处理(如果项目文件是新的,那么最新的应该不是问题)。
除此之外,您可能还必须添加对权利文件的引用。您必须将其添加到相应目标的构建配置中。为此:
4.查找构建配置 ID
您的目标可能有多个构建配置,例如调试和发布。您必须找到要为其添加对权利文件的引用的构建配置的 ID。为此,有一个名为 XCConfigurationList 的部分(查找 /* Begin XCConfigurationList section */)。在那里寻找我们在 1. 中得到的目标 id,然后找到您需要的配置的配置 id。
5.在 XCBuildConfiguration 部分中查找构建配置 ID
转到 /* Begin XCBuildConfiguration 部分 */ 并查找在 5. 中找到的 id,然后将路径添加到它的 buildSettings。例如:
例如你有这样的东西
EB9F6CF33A861055BB38355B /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = B82B36921BDRI3622B0EC99 /* Pods-mytargetname.debug.xcconfig */;
buildSettings = {
/* build settings... */
CODE_SIGN_ENTITLEMENTS = mytargetname/myentitlements.entitlements; /* <-- add this */
};
name = Debug;
};
请注意,XCode 应该“知道”权利文件(就像您的项目文件的其余部分一样)。