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>
我正在尝试使用 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>