gpt4 book ai didi

ios - 通过脚本在 Xcode 项目上启用 iCloud

转载 作者:IT老高 更新时间:2023-10-28 11:21:38 24 4
gpt4 key购买 nike

我正在尝试为 iOS 项目的持续build设置构建服务器。由于我需要经常重新创建 Xcode 项目(它是统一构建的),iCloud 将被重置为 OFF。

我可以通过脚本复制授权文件(使用 iCloud key ),但我仍然需要单击实际的复选框来打开 iCloud。

我设法手动更改了 XC 项目,但它不是很安全,因为 XC 项目结构可能会发生变化。

您知道更好的方法吗?干杯!

最佳答案

显然 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 应该“知道”权利文件(就像您的项目文件的其余部分一样)。

关于ios - 通过脚本在 Xcode 项目上启用 iCloud,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com