ios – 通过脚本在Xcode项目中启用iCloud

前端之家收集整理的这篇文章主要介绍了ios – 通过脚本在Xcode项目中启用iCloud前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为iOS项目上的连续建筑设置一个构建服务器.
因为我需要经常重新创建 Xcode项目(这是一个构建),iCloud将被重置为OFF.

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

我设法手动更改XC项目,但由于XC项目结构的可能变化,它并不是很安全.

你知道一个更好的方式吗?
干杯!

解决方法

显然,TO解决了这个问题,但是由于似乎有更多的人对此感兴趣,这里有一个可能的解决方案.

您可以编写脚本来编辑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 */

您要将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部分”,然后查找“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;
};

请注意,XCode应该“知道”权利文件(就像其余的项目文件).

猜你在找的iOS相关文章