因为我需要经常重新创建 Xcode项目(这是一个构建),iCloud将被重置为OFF.
我可以通过脚本复制授权文件(使用iCloud键),但是我仍然需要点击实际的复选框来打开iCloud.
我设法手动更改XC项目,但由于XC项目结构的可能变化,它并不是很安全.
你知道一个更好的方式吗?
干杯!
解决方法
您可以编写脚本来编辑xcodeproj文件中的project.pbxproj(可以在finder中使用“show package contents”选项查看).
在这个文件中有一个名为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 */
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部分”,然后查找“TargetAttributes”,这两个文件都是唯一的.理论上“TargetAttributes”应该是足够的,但更好的是安全的…并且记得添加正确的日志到脚本并验证结果,因为这些字符串可能很容易改变在未来的XCode版本(我已经看到他们不变,虽然,一段时间已经).
2.确定目标
此文件中有多个部分可以看到与名称相关联的目标的ID.我只是看看自己,并在脚本中硬编码,因为这个id不会改变,除非你重新创建目标.如果您真的需要它,您还可以通过查找目标的名称和与ID相关联的格式来自动化.应该还有其他配置文件,这个关联出现(在这个文件中,这个名称只是出现在一个注释中).
3.处理目标已经有一个SystemCapabilities条目的情况,以及已经有iCloud条目.
如果您的目标具有其他功能,则此条目可能已存在.此外,如果您已经启用了iCloud,或者如果您曾经启用iCloud并禁用它,该条目也将存在(带0值).这必须在脚本中处理(如果项目文件是新的,最新不应该是一个问题).
此外,您还可能需要添加对权利文件的引用.您必须将其添加到各个目标的构建配置中.为了这:
4.查找构建配置ID
您的目标可能有多个构建配置,例如调试和释放.您必须找到要为其添加对授权文件的引用的构建配置的ID.为此,有一个名为XCConfigurationList的部分(寻找/ * Begin XCConfigurationList部分* /).找到我们在1.中找到的目标ID,然后找到所需配置的配置ID.
5.在XCBuildConfiguration部分中查找构建配置ID
转到/ *开始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; };