使用带有 PROVISIONING_PROFILE 的 xcodebuild 命令行签署应用程序失败

Posted

技术标签:

【中文标题】使用带有 PROVISIONING_PROFILE 的 xcodebuild 命令行签署应用程序失败【英文标题】:Signing app with xcodebuild command line with PROVISIONING_PROFILE fails 【发布时间】:2017-07-12 07:56:45 【问题描述】:

我尝试使用 Xcode 为我的应用命令行签名。

MyApp.xcodeproj 上运行xcodebuild 命令行就像这样

xcodebuild -project "MyApp.xcodeproj" -target "MyApp" -sdk "iphoneos" -configuration *Release* PROVISIONING_PROFILE="xxxx-xxxx-xxxx-xxxx" CODE_SIGN_IDENTITY="iPhone Developer: something.com (SOMEVALUE)"

出现以下错误:

Check dependencies
Provisioning profile "ios Team Provisioning Profile: *" doesn't include signing certificate "iPhone Developer: something.com (SOMEVALUE)".
Provisioning profile "iOS Team Provisioning Profile: *" is Xcode managed, but signing settings require a manually managed profile.
Code signing is required for product type 'Application' in SDK 'iOS 10.3'

** BUILD FAILED **

怎么了?我的xcodebuild 命令中缺少什么?

我怎样才能包含它询问的签名证书?

我从下面的答案和 cmets 中尝试了什么 据我了解,发布版本应使用专用的distribution profile。这存在于系统中。如果可以的话,我只需要知道如何将它与xcodebuild 命令一起用于手动签名。

执行security find-identity -p codesigning -v | grep "$CODE_SIGN_IDENTITY" 会给出一个包含 5 个签名身份的列表,其中一个明确声明为iPhone Distribution: My Company (SOME123ID)

*那么,我可以将分发配置文件与 xcodebuild 手动签名一起使用吗?如果是,我如何获取分发配置文件的实际 ID 以与 xcodebuild 命令一起使用?

【问题讨论】:

【参考方案1】:

自 Xcode8 以来不推荐使用 PROVISIONING_PROFILE。请改用PROVISIONING_PROFILE_SPECIFIERPROVISIONING_PROFILE_SPECIFIER="Human Readable Prov Profile Name"

可能还需要关闭 Xcode 的自动签名:

Xcode9:只需将 CODE_SIGN_STYLE="Manual" 附加到您的 xcodebuild 命令

Xcode8:sed -i '' 's/ProvisioningStyle = Automatic;/ProvisioningStyle = Manual;/' TestApp/TestApp.xcodeproj/project.pbxproj && xcodebuild ...

您可以在命令行中使用xcodebuild -version检查您的 Xcode 版本

【讨论】:

1.您确定要使用 Release 配置但 Development 签名来构建您的项目吗?似乎有点奇怪。您可能想要切换到-configuration Debug 或明确配置分发证书和配置文件。 2. 仔细检查配置的证书是否真的链接在 Prov 配置文件中 3. 您可以在配置文件本身中查找配置文件的名称:在任何 TextEditor 中打开并搜索 Name 4. 您可能有多个同名的配置文件安装在$HOME/Library/MobileDevice/Provisioning Profiles。确保所有配置文件都有一个唯一的名称 没问题 :) iOS Team Provisioning Profile ... 总是指开发配置文件,所以这对你的情况没有帮助。您需要一个分发配置文件来匹配您的分发证书和发布配置。备份$HOME/Library/MobileDevice/Provisioning Profiles,然后清除文件夹,然后让 Xcode UI 使用 Release 配置构建您的项目。 Xcode 的自动代码签名应该为您下载正确的配置文件。然后,您可以使用配置文件的名称作为 PROVISIONING_PROFILE_SPECIFIER 的值 您可以在调用 xcodebuild 时覆盖任何构建设置,因此您当然可以执行 DEVELOPMENT_TEAM="ABCDEFGH"(应该是 10 个字符,请参阅您的 prov 配置文件中的<key>com.apple.developer.team-identifier</key> 不客气。就像我上面所说的,您不能将团队供应配置文件用于手动发布构建。您必须设置一个专用的分发配置文件。或者让 Xcode 的自动代码签名为您完成这项工作 是否可以通过这种方式提供多个配置文件(以防您需要构建应用扩展而不需要一个配置文件)?

以上是关于使用带有 PROVISIONING_PROFILE 的 xcodebuild 命令行签署应用程序失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 xcodebuild 指定单个目标构建设置

xcode 命令行 archive,生成ipa包

XCode-Project文件.pbxproj - 如何在Version Control中处理它?

Your build settings specify a provisioning profile with the UUID “bd4ae966-4d2c-4966-99eb"(示例代码

使用带有 uuencode 的“sendmail”发送邮件,并带有主题

HBase - 使用带有值列表的一列与使用带有列列表的一列族的优缺点是啥?