【问题标题】:How to use xcodebuild command line to do automatic signing with Xcode9?如何使用 xcodebuild 命令行使用 Xcode9 进行自动签名?
【发布时间】:2017-09-26 17:24:51
【问题描述】:

我在我的 OSX 机器上安装了 Xcode9。我正在使用xcodebuild 命令行为我的应用程序签名,该应用程序当然使用了最新的基于 Xcode9 的逗号工具。

以下是我尝试签署我的应用程序的方式:

xcodebuild -project "MyProject.xcodeproj" -scheme "MyProject" -sdk "iphoneos" -configuration Release PROVISIONING_PROFILE="MyProject_ProvisioningProfile" DEVELOPEMENT_TEAM="MY_TEAM_ID"

但是,它给出了以下错误。

Code Signing Error: Provisioning profile "profile_name" is Xcode managed, but signing settings require a manually managed profile.
Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 11.0'

但是当我使用 Xcode9 UI IDE 选择“自动签名”进行构建时,它可以工作。我想使用xcodebuild 命令行复制相同的内容。

我读到安装了 Xcode 9 后,我们可以像 Xcode UI 一样从命令行进行自动签名。

问题:
我应该如何修改xcodebuild 命令以像在基于 Xcode UI 的工具上那样进行自动签名?

我从official documentation 了解到,应该更喜欢自动签名。但是如何使用xcodebuild 命令行来做到这一点

查看this discussion,我尝试使用sedproject.pbxproj 文件上切换它。

sed -i '' 's/ProvisioningStyle = Manual;/ProvisioningStyle = Automatic;/' <ProjectName>.xcodeproj/project.pbxproj

但这并没有帮助

【问题讨论】:

    标签: ios xcode provisioning-profile xcodebuild xcode9


    【解决方案1】:

    根据错误,您似乎没有在项目设置中启用自动签名。当您的项目配置为手动签名时,无法从命令行执行一次性自动签名构建。

    在 XCode 中打开您的项目后,在左侧的 Project Navigator 中选择您的根项目。单击要配置的目标。单击常规选项卡。在签名部分勾选“自动管理签名”复选框。您还必须选择一个开发团队。如果您有多个目标,您可能需要对所有目标重复这些步骤。

    完成此操作后,XCode 将自动创建、管理和使用团队配置文件。 -allowProvisioningUpdates 告诉 xcodebuild 执行 XCode IDE 隐式执行的相同配置管理。请注意,这些配置文件在开发门户中对您不可见。

    您将遇到新的配置错误,因为您正在指定配置文件。自动签名意味着你必须让 XCode 弄清楚一切。如果你试图告诉它你的开发团队以外的任何东西,它就会抱怨。在您的情况下,您告诉xcodebuild 要使用哪个配置文件。但是 XCode 坚持使用它管理的团队配置文件,如果被告知,它会厌恶地举手:

    Code Signing Error: MyProject has conflicting provisioning settings. MyProject is automatically signed, but provisioning profile MyProject_ProvisioningProfile has been manually specified. Set the provisioning profile value to "Automatic" in the build settings editor, or switch to manual signing in the project editor.
    

    我们用于构建自动配置的xcodebuild 命令如下所示:

    xcodebuild -configuration Release PLATFORM_NAME=iphoneos SDKROOT=iphoneos11.2 -project myproject.xcodeproj -allowProvisioningUpdates build
    

    基于此,在您在项目设置中启用自动签名后尝试使用此版本的命令:

    xcodebuild -project "MyProject.xcodeproj" -scheme "MyProject" -sdk "iphoneos" -configuration Release DEVELOPEMENT_TEAM="MY_TEAM_ID"
    

    需要注意的另一件事是xcodebuild 不会更新托管配置文件,除非它无法在本地找到它们。在我们的 CI 服务器上,我们有一个预构建步骤,可以删除它们以强制刷新。 XCode 将其托管配置文件存储在 ~/Library/MobileDevice/Provisioning\ Profiles 下。

    【讨论】:

    • 非常酷,亚当!使用 archive-exportArchive 时,您希望在这两个命令中都包含 -allowProvisioningUpdates
    【解决方案2】:

    尝试添加 export_xcargs: "-allowProvisioningUpdates",这样会起作用

    【讨论】:

    • 在您的回答中,您能否修改与问题中相同的xcodebuild 命令?
    • 所以我不应该再在xcodebuild 命令中指定配置文件了吗?
    • xcodebuild -project "MyProject.xcodeproj" -scheme "MyProject" -sdk "iphoneos" -configuration Release PROVISIONING_PROFILE="MyProject_ProvisioningProfile" DEVELOPEMENT_TEAM="MY_TEAM_ID" export_xcargs: "-allowProvisioningUpdates" 喜欢这样吗?
    • xcodebuild -project "MyProject.xcodeproj" -scheme "MyProject" -sdk "iphoneos" -allowProvisioningUpdates -configuration Release PROVISIONING_PROFILE="MyProject_ProvisioningProfile" DEVELOPEMENT_TEAM="MY_TEAM_ID"。试试这个
    • 不起作用。抱怨Provisioning profile "profile_id" Xcode managed, but signing settings require a manually managed profile。我应该在我的 Xcode 中做些什么来解决这个问题?
    【解决方案3】:

    在我的项目中,我使用gradle-xcodePlugin 实用程序。对于 iOS 开发来说,使用 Gradle 并不常见 :),但它是一个很好的工具。它是xcodebuild 工具下的包装器。设置非常简单,配置在build.gradle 文件中。 GitHub 上有足够的文档来设置它。它会自动构建、导出、交付到 TestFlight beta 测试等。我用了一年。

    您将永远忘记xcodebuild -project ... 的语法。保持这个插件是最新的。

    我通过执行$ ./gradlew xcodebuild 来运行构建

    也许这个工具可以帮助您避免花费时间来解决每个 Xcode 更新的问题,就像它对我所做的那样;)

    【讨论】:

      【解决方案4】:

      xcodebuild -project -scheme WebDriverAgentRunner -destination id=7b7ba65e1f3bbb87460aef17866efe6f6e473c24 - 配置发布 -xcconfig -allowProvisioningUpdates build-for-testing

      XCODE CONFIG FILE:创建一个包含以下详细信息的文件

      • DEVELOPMENT_TEAM = "MY_TEAM_ID"
      • CODE_SIGN_IDENTITY = iPhone 开发者

      【讨论】:

        猜你喜欢
        • 2015-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-02
        • 1970-01-01
        • 2014-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多