如何使用xcodebuild命令行与Xcode9进行自动签名?

时间:2017-09-26 17:24:51

标签: ios xcode provisioning-profile xcodebuild xcode9

我的OSX机器上安装了Xcode9。我使用xcodebuild命令行来签署我的应用程序,当然使用最新的基于Xcode9的commaline工具。

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

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,我尝试使用project.pbxprojsed文件上进行切换。

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

但这没有帮助

4 个答案:

答案 0 :(得分:3)

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

在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

答案 1 :(得分:1)

尝试添加 export_xcargs:“ - allowProvisioningUpdates”,这将有效

答案 2 :(得分:1)

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

总是会忘记xcodebuild -project ...的语法。只需保持此插件最新。

我通过执行$ ./gradlew xcodebuild

来运行构建

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

答案 3 :(得分:0)

  

xcodebuild -project -scheme   WebDriverAgentRunner-目标   id = 7b7ba65e1f3bbb87460aef17866efe6f6e473c24-配置发布   -xcconfig -allowProvisioning更新测试构建

XCODE配置文件:创建包含以下详细信息的文件

  • DEVELOPMENT_TEAM =“ MY_TEAM_ID”
  • CODE_SIGN_IDENTITY = iPhone开发人员