【问题标题】:Setting Xcode Build Settings Terminal设置 Xcode 构建设置终端
【发布时间】:2015-12-20 23:22:49
【问题描述】:

我想更改 .xcodeproj 的构建设置,而不使用 Xcode IDE,而是通过终端命令(准确的说是 Codesigning Identity and Provisioning Profile)。

我已经到处搜索,但只找到了从终端构建/存档项目的命令,我不想要。我想要的只是更改设置,这样当我打开Xcode 中的项目,它的签名身份和配置文件设置为我在终端中设置的内容。

Xcodebuild 命令只是使用我作为参数传递的内容来构建/归档项目,它不会在项目的构建设置中将它们设置为值。

在我的项目所在的终端中运行 xcodebuild -target <target-name> -showBuildSettings 为我提供了项目的完整构建设置,但我没有任何方法来设置它们。

我还阅读了here 关于使用-setObject 的信息,但这也对我没有帮助,因为它还使用我提供的参数值而不是实际设置它们来构建代码。

目前使用 Xcode 6.3 和 Xcode 7。

我们将不胜感激。

【问题讨论】:

    标签: xcode terminal continuous-integration xcodebuild xcode-server


    【解决方案1】:

    所有 Xcode 设置实际上都存储在 <project-name>.xcodeproj/project.pbxproj 中。 好像

    buildSettings = {
        CODE_SIGN_ENTITLEMENTS = "";
        CODE_SIGN_IDENTITY = "iPhone Developer";
        "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
    
        ...
    
        PRODUCT_NAME = "$(TARGET_NAME)";
        PROVISIONING_PROFILE = "";
        SKIP_INSTALL = YES;
    };
    

    代码签名身份CODE_SIGN_IDENTITY键控制,Provisioning ProfilePROVISIONING_PROFILE键控制。

    project.pbxproj 是一个文本文件,可以在 CLI 中通过传统的文本处理工具进行编辑,例如 sed

    sed -ie 's/CODE_SIGN_IDENTITY = "iPhone Developer"/CODE_SIGN_IDENTITY = ""/g' <project-name>.xcodeproj/project.pbxproj
    sed -ie 's/PROVISIONING_PROFILE = ""/PROVISIONING_PROFILE = "1c28c979-6bef-4917-aa34-92aecd91315c";/g' <project-name>.xcodeproj/project.pbxproj
    

    您可以使用

    获取可用的签名身份列表
    security find-identity -v -p codesigning
    

    对于PROVISIONING_PROFILE,是配置文件的UUID,可以用

    grep -aA1 UUID /path/to/mobileprovision
    

    【讨论】:

    • 嘿.. 谢谢你的回答..:) 好的.. 所以我使用了你的步骤和哇哦.. 我需要的已经实现了(尽管在弄清楚 sed 命令做了什么之后)。但是,有一个问题..! sed"iPhone Developer" 替换为 "",这意味着我需要将该值设置为我知道的值(此处为 "iPhone Developer")。与供应配置文件类似的情况。我可以不只是用我需要的内容覆盖那些字段中写入的内容吗??
    • 我想你误解了我的意思。该项目附带的 Codesigning and Provisioning Profile 在我的 MacBook 上不可用,因此我无法弄清楚在 sed 命令中放入什么。上述命令仅在 Codesign and Provisioning Profile 设置为自动时有效。在所有其他情况下,例如像这样的配置文件15adc2c7-a08b-4541-a549-ea09f7deeeb4 并且每次我得到一个项目时,它都有一些像这样的配置文件,我需要用本地存在的配置文件覆盖。
    • 如果您在本地没有编码证书和配置文件?您如何构建项目?你从哪里得到它们没有什么区别。您需要使用 sed 设置的值对于特定证书和配置文件始终相同
    • 我拥有同一个人资料的不同版本。例如,当新设备添加到配置文件时,它的配置文件标识符从“ewer-qwe-qer”更改为“zcnaj-dna-snf”。开发人员提供的代码没有最新的配置文件,所以我想用我的 mac 上的最新配置文件覆盖它。
    • 那为什么grep -aA1 UUID /path/to/lastest/profile 不能在你的 Mac 上运行呢?
    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 2013-06-30
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多