Chi*_*odo 12 xcode continuous-integration build ios icloud
我正在尝试为iOS项目上的连续构建设置构建服务器.由于我需要经常重新创建Xcode项目(它是统一的构建),iCloud将重置为OFF.
我可以通过脚本复制授权文件(使用iCloud密钥),但我仍然需要单击实际的复选框以打开iCloud.
我设法手动更改了XC项目,但由于XC项目结构可能发生变化,因此不太安全.
你知道更好的方法吗?干杯!
显然,TO解决了这个问题,但由于似乎有更多的人对此感兴趣,这里有一个可能的解决方案.
您可以创建一个脚本来编辑xcodeproj文件中的project.pbxproj(可以在finder中查看例如"show package contents"选项).
在这个文件中有一个名为PBXProject部分的项目设置部分.在那里,您可以添加目标的功能.您可能需要编写自定义解析逻辑,因为此文件是以XCode配置格式编写的,没有像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 */
Run Code Online (Sandbox Code Playgroud)
您想要将iCloud功能添加到目标.这看起来像这样:
SystemCapabilities = {
com.apple.iCloud = {
enabled = 1;
};
};
Run Code Online (Sandbox Code Playgroud)
因此,假设您要将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 */
};
};
Run Code Online (Sandbox Code Playgroud)
现在,您需要确定一些事项才能执行此操作:
1.确定该部分
我让脚本查找字符串"Begin PBXProject section",然后查找"TargetAttributes",这两个文件在文件中都是唯一的.从理论上讲,"TargetAttributes"应该足够但更好才能安全......并且记得在脚本中添加适当的日志记录并验证结果,因为这些字符串在将来的XCode版本中很容易改变(我已经看到它们没有变化,但是,一段时间已经).
2.确定目标
此文件中有多个部分,您可以在其中查看与名称关联的目标的ID.我只是自己查看并在脚本中对其进行硬编码,因为除非您重新创建目标,否则此ID不会更改.如果你确实需要它,你也可以通过查找你的目标名称以及它与id相关联的格式来实现自动化.还应该有其他配置文件出现此关联(在此文件中,名称只显示为注释).
3.处理已存在目标的SystemCapabilities条目的情况,以及已存在iCloud条目.
如果您的目标具有其他功能,则此条目可能已存在.此外,如果您已经启用了iCloud,或者如果您启用了iCloud并将其禁用,则该条目也将存在(具有0值).这必须在脚本中处理(如果项目文件是新的,最新应该不是问题).
除此之外,您还可能需要添加对权利文件的引用.您必须将其添加到相应目标的构建配置中.为了这:
4.找到构建配置ID
您的目标可能有多个构建配置,例如调试和发布.您必须找到要为其添加对权利文件的引用的构建配置的ID.要做到这一点,有一个名为XCConfigurationList的部分(查找/*Begin XCConfigurationList部分*/).查找我们在1中获得的目标ID,然后找到所需配置的配置ID.
5.在XCBuildConfiguration部分中查找构建配置标识
转到/*开始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;
};
Run Code Online (Sandbox Code Playgroud)
请注意,XCode应该"知道"权利文件(就像项目文件的其余部分一样).