Xcode 9 分发构建失败,因为 exportOptions.plist 的格式在新版本中已更改

Xcode 9 distribution build fails because format of exportOptions.plist has changed in new release

我正在尝试使用 SDK 版本 6.1.2 和 Xcode 9 beta 为我的应用程序编译一个临时 IPA(尝试查看该应用程序是否适用于新版本)。我的构建失败并显示以下错误消息:

Error Domain=IDEProvisioningErrorDomain Code=9 ""DGHospice.app" 
requires a provisioning profile." UserInfo=
{NSLocalizedDescription="DGHospice.app" requires a provisioning 
profile., NSLocalizedRecoverySuggestion=Add a profile to the 
"provisioningProfiles" dictionary in your Export Options property  
list.}

分发配置文件有效,如果我使用 iOS SDK 10,我可以创建一个 IPA。构建仅在 11.0 中失败。 有人可以帮我查明问题吗?

您似乎在使用手动代码签名(由错误消息中的 Export Options property list 推断)。如果适合您的需要,您可能应该切换到 Apple 推荐的自动代码签名。

问题似乎是 exportOptions.plist 格式与 Xcode 9 不兼容。 Xcode 9 的基本分布 plist 现在看起来类似于:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
      <key>provisioningProfiles</key>
      <dict>
        <key>MY_APP_BUNDLE_ID</key>
        <string>MY_PROFILE_NAME_AS_SHOWN_BY_XCODE or UUID_FOUND_IN_MOBILEPROVISION_FILE</string>
      </dict>
      <key>signingCertificate</key>
      <string>iOS Distribution</string>
      <key>signingStyle</key>
      <string>manual</string>
      <key>teamID</key>
      <string>MY_TEAM_ID</string>
  </dict>
</plist>

您可以通过 运行 xcodebuild -help 查看 exportOptions.plist 支持的选项列表。

您可以通过观看此视频获得关于这些东西在 Xcode 9 中如何工作的有用概述: https://developer.apple.com/videos/play/wwdc2017/403/

您还可以通过在 Xcode 的搜索字段中搜索 'Manual Signing' 来获得帮助。

您可以按照 BitRise 的 Anna Bátki 在此处记录的过程创建虚拟 exportOptions.plist 文件: http://blog.bitrise.io/2017/08/15/new-export-options-plist-in-Xcode-9.html

您应该知道,如果您按照 Anna 的步骤使用 Xcode 9 beta 5,则不会导出 exportOptionsPlist。此行为在 Xcode 9 GM.

中再次起作用

要确定您的配置文件在 exportOptionsPlist 文件中的值,您可以查看您希望使用的 .mobileprovision 文件的内容并将密钥设置为您的应用程序的包 ID ('com.foo') 和 .mobileprovision 文件中的 UUID 的值。

您可以在此处查看构建将使用的配置文件: ls ~/Library/MobileDevice/Provisioning\ Profiles/

另一个有用的工具是使用 Finder 的 QuickLooks 功能来查看配置文件的值,而无需启动编辑器。

使用命令/Applications/Xcode-beta.app/xcodebuild -help。您将获得有关 exportOptionsPlist 的详细信息 -exportOptionsPlist 的可用键:

....

provisioningProfiles : Dictionary

For manual signing only. Specify the provisioning profile to use for each executable in your app. Keys in this dictionary are the bundle identifiers of executables; values are the provisioning profile name or UUID to use.

....

这是一个关于选项 plist 的示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>provisioningProfiles</key>
    <dict>
        <key>com.aaa.bbb</key>
        <string>adhoc_bbb</string>
        <key>com.aaa.ccc</key>
        <string>adhoc_ccc</string>
    </dict>
    <key>method</key>
    <string>ad-hoc</string>
    <key>uploadBitcode</key>
    <false/>
    <key>uploadSymbols</key>
    <true/>
</dict>
</plist>