xcodebuild -exportArchive 失败,出现错误:定位签名资产失败。

15

我正在使用命令行xcodebuild工具从Xcode归档中导出.ipa文件。在Xcode 8.3.3之前一切都很正常。但是在Xcode 9测试版上,相同的设置已经无法工作了。现在它会出现以下错误:

IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7fc309310550>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed."

看起来Xcode 9无法找到配置文件,但为什么?


你正在执行哪些具体的xcodebuild命令? - Sven Driemecker
请尝试!> https://dev59.com/MKnka4cB1Zd3GeqPTslq#55042136 - PhuocLuong
2个回答

13
在我的情况下,问题是通过在-exportOptionsPlist属性列表中添加以下字段来解决的。
<dict>
  <key>compileBitcode</key>
  <false/>

  <key>method</key>
  <string>ad-hoc</string>

  <key>provisioningProfiles</key>
  <dict>
      <key>com.my.bundle.id</key>
      <string>AD_HOC_PROVISIONING_PROFILE_NAME</string>
  </dict>

  <key>signingCertificate</key>
  <string>CERTIFICATE_HASH</string>

  <key>signingStyle</key>
  <string>manual</string>

  <key>teamID</key>
  <string>TEAM_ID</string> 
</dict>

所以,显然我需要设置:compileBitcodemethodprovisioningProfilessigningCertificatesigningStyleteamID

在您的情况下,字段集可能不同。我通过在Xcode 9中对应用程序进行打包并导出.ipa文件来发现我的集合。Xcode将使用exportOptionsPlist导出其IPA,并显示它所使用的字段。

更多关于字段发现的信息:https://blog.bitrise.io/new-export-options-plist-in-xcode-9


谢谢!对我有用。compileBitCode不是签名问题的一部分,可能不需要。应该标记为解决方案... - moritz

11

我正在运行这个命令:

xcodebuild -exportArchive -archivePath archive.xcarchive -exportPath /my/export/path -exportOptionsPlist options.plist

我的项目使用手动签名。结果发现Xcode 9需要在options.plist中指定证书配置文件的名称或UUID才能对导出的.ipa文件进行签名。我将以下条目添加到我的options.plist文件中:

我的项目使用手动签名。结果发现Xcode 9需要在options.plist中指定证书配置文件的名称或UUID才能对导出的.ipa文件进行签名。我将以下条目添加到我的options.plist文件中:

<key>provisioningProfiles</key>
<dict>
    <key>com.myapp.bundle.id</key>
    <string>My AdHoc Provisioning Profile Name</string>
</dict>

并且"Locating signing assets failed"错误已经消失了。但是又出现了另一个错误:

IDEDistribution: Step failed: : Error Domain=IDEFoundationErrorDomain Code=1 "ipatool 失败并引发异常:#

Xcode 9 默认从bitcode重新编译应用程序。我通过向我的options.plist添加另一个条目来关闭bitcode以解决此错误:

<key>compileBitcode</key>
<false/>

现在我终于能够使用Xcode 9构建我的应用程序,并且使用xcodebuild导出ipa文件而不会出错。


我们已经尝试过这个(使用UUID和我们认为的名称),但是我们仍然遇到了相同的错误。如果xcodebuild能告诉你它正在查找哪里,尝试了哪些配置文件以及它们为什么不合适,那将非常有帮助。 - Robert Atkins
有人找出了“NonZeroExcitException”的实际原因吗?对我们来说,关闭Bitcode不是一个选项。 - Tres
与NonZeroExcitException相关的一些有用信息:它来自于Python脚本bitcode-build-tool在归档步骤期间。Xcode会在临时文件夹中创建日志。对我来说,它是:/var/folders/62/wwfl967573n9f1g2yqg_3zg80000j_/T/MyApp_2017-09-18_10-32-23.314.xcdistributionlogs。这些日志包含脚本的更详细输出。看起来在导出步骤中存在一些与位码相关的问题。 - Tres
我想跟进一下,为那些在谷歌上碰巧遇到这个问题的人提供帮助。如果您在Xcode中有嵌套项目,请确保将所有链接到子项目的库也链接到顶层项目下的“链接库”和“嵌入式二进制文件”,特别是在启用Bitcode时。 Bitcode工具从顶级链接列表中提取其命令行参数,如果您缺少任何参数,它将会出现一个名为“NonZeroExcitException”的错误提示信息,这个信息名字很怪,但幸运的是可以轻松地在谷歌上找到答案。 - Tres
它在我的XCode9上运行良好。对于“我的AdHoc配置文件名称”,我用下载的*.mobileprovision文件中的UUID替换了它,在“<key>UUID</key>”之后的一行。 - civic.LiLister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接