xcodebuild -exportArchive:键 'method' 的 exportOptionsPlist 错误:应为 {} 之一
xcodebuild -exportArchive: exportOptionsPlist error for key 'method': expected one of {}
我正在使用命令行 xcodebuild 工具从我的存档中导出临时分发 ipa 文件,如下所示:
xcodebuild -exportArchive -archivePath /path/Archive.xcarchive -exportPath /path -exportOptionsPlist /path/options.plist
但是,此命令因错误而失败
exportArchive: exportOptionsPlist error for key 'method': expected one of {}, but found ad-hoc
无论我在我的导出选项 plist 中提供什么 'method',它总是失败并出现此错误。如果我从 plist 文件中删除 'method' 选项,它也会失败。
我最初怀疑是xcodebuild工具,但结果是存档文件无效。当我在 Xcode 中打开存档文件并尝试手动导出 ipa 文件时,我注意到 "Upload to App Store" 和 "Validate" 按钮被禁用。单击 "Export" 按钮后,它给了我两个选项:"Save Built Products" 和 "Export as an Xcode Archive",但是没有导出临时分发和其他常规选项。
事实证明,存档中我的 .app 文件中几乎没有库文件。 Xcode 认为这是一个通用存档而不是应用程序存档。检查项目设置中的构建阶段以复制头文件和库文件。
有关详细信息,请参阅 https://developer.apple. com/library/ios/technotes/tn2215/_index.html
我在我的一个项目中遇到了这个问题。将 Cocoapods 从 0.38.2 更新到 0.39.0 后,它就消失了。
另外,我有一个不同的相关问题。导出失败并出现以下错误:
2015-10-22 17:16:12.568 xcodebuild[91172:2171408] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/_l/2rl169m16p717gzldvh7n0600000gq/T/MyDriveEU_2015-10-22_17-16-12.568.xcdistributionlogs'.
2015-10-22 17:16:12.860 xcodebuild[91172:2171408] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7fbc13f0c970>: Error Domain=IDEDistributionErrorDomain Code=1 "The operation couldn’t be completed. (IDEDistributionErrorDomain error 1.)"
error: exportArchive: The operation couldn’t be completed. (IDEDistributionErrorDomain error 1.)
Error Domain=IDEDistributionErrorDomain Code=1 "The operation couldn’t be completed. (IDEDistributionErrorDomain error 1.)"
** EXPORT FAILED **
原来 xcodebuild 不喜欢我添加到 exportOptions.plist
的 teamID
参数。我删除后,应用导出成功
两天前我遇到了同样的问题,
问题来自 Apple 证书。
从您的钥匙串中删除 Apple Worldwide Developer Relations certification Authority(将于 2 月 14 日到期),然后通过下载更新它:
我遇到了同样的问题,在查看 KeyChain 时发现用于签名的证书已被吊销。存档工作正常,但是当我们使用 -exportArchive 时,我们遇到了这个神秘的错误。 HTH.
这个论坛帮助我解决了这个问题。
https://forums.developer.apple.com/message/59201#59201
解决方案: 在 exportOptionsPlist 中将密钥从 'method' 更改为 'export_method'。
检查以下原因:
- 您的存档包含头文件。
- 您的存档包含静态库或框架。
在我的例子中,我的一个静态库没有启用 Skip Install
,这导致了同样的问题。当我为该项目将 xcode Skip Install
设置为 Yes
时,我解决了该问题。
Pavel P 的解决方案是
In my case one of my static libs did not have Skip Install enabled and this resulted in the same problem. When I set in xcode Skip Install to Yes for that project I fixed that problem.
同样,我调用 "xcodebuild" 并传入 SKIP_INSTALL=NO 作为选项。
例如,
xcodebuild clean analyze archive -workspace MyWorkspace.xcworkspace -scheme MyScheme -configuration Debug SKIP_INSTALL=NO -archivePath /MyPath/MyArchive.xcarchive
在这种情况下删除 SKIP_INSTALL=NO 解决了我的特殊情况。
在我的例子中,命令失败是因为 method
键丢失或错误。根据 xcodebuild 的手册页,这是允许的方法列表:
app-store、validation、ad-hoc、package、enterprise、development、developer-id 和 mac-application
请注意,默认值为“development”。如果您未指定方法或指定“developer-id”,则您还需要提供一个有效的 teamID
密钥,该密钥在证书的 CN 中报告由 Apple 提供,用于签署应用程序(teamID 是 CN 字段末尾的字母数字字符串)。
在我们的例子中,Apple 证书仅安装在构建 machine 中,没有开发人员可以将其安装在个人计算机或 VM 上。因此,为了测试包的创建和签名,我们使用报告的步骤创建了一个自签名证书 here。无论如何,由于我们的证书中不存在 teamID,我们必须将 method
设置为“mac-application”。在这种情况下,xcodebuild 没有抱怨并且包已正确生成。
我们的 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>teamID</key>
<string>F4keTeamID0</string>
<key>compileBitcode</key>
<true/>
<key>method</key>
<string>mac-application</string>
</dict>
</plist>
旧线程,但 运行 今天刚加入 Xcode 13.3,因为 .docarchive
被添加到 Products/Applications
文件夹(均来自 Xcode和 xcodebuild。在 Xcode 13.2 及更早版本中,文档存档未添加到此文件夹,因此提交和存档导出工作正常。如 tech note TN2215 中所述,只能有一个产品。
Xcode 13.2 及更早版本
Xcode13.3
一种解决方法是关闭构建设置中的 Build Documentation during 'Build'
设置。这对我有用。
我正在使用命令行 xcodebuild 工具从我的存档中导出临时分发 ipa 文件,如下所示:
xcodebuild -exportArchive -archivePath /path/Archive.xcarchive -exportPath /path -exportOptionsPlist /path/options.plist
但是,此命令因错误而失败
exportArchive: exportOptionsPlist error for key 'method': expected one of {}, but found ad-hoc
无论我在我的导出选项 plist 中提供什么 'method',它总是失败并出现此错误。如果我从 plist 文件中删除 'method' 选项,它也会失败。
我最初怀疑是xcodebuild工具,但结果是存档文件无效。当我在 Xcode 中打开存档文件并尝试手动导出 ipa 文件时,我注意到 "Upload to App Store" 和 "Validate" 按钮被禁用。单击 "Export" 按钮后,它给了我两个选项:"Save Built Products" 和 "Export as an Xcode Archive",但是没有导出临时分发和其他常规选项。
事实证明,存档中我的 .app 文件中几乎没有库文件。 Xcode 认为这是一个通用存档而不是应用程序存档。检查项目设置中的构建阶段以复制头文件和库文件。
有关详细信息,请参阅 https://developer.apple. com/library/ios/technotes/tn2215/_index.html
我在我的一个项目中遇到了这个问题。将 Cocoapods 从 0.38.2 更新到 0.39.0 后,它就消失了。
另外,我有一个不同的相关问题。导出失败并出现以下错误:
2015-10-22 17:16:12.568 xcodebuild[91172:2171408] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/_l/2rl169m16p717gzldvh7n0600000gq/T/MyDriveEU_2015-10-22_17-16-12.568.xcdistributionlogs'.
2015-10-22 17:16:12.860 xcodebuild[91172:2171408] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7fbc13f0c970>: Error Domain=IDEDistributionErrorDomain Code=1 "The operation couldn’t be completed. (IDEDistributionErrorDomain error 1.)"
error: exportArchive: The operation couldn’t be completed. (IDEDistributionErrorDomain error 1.)
Error Domain=IDEDistributionErrorDomain Code=1 "The operation couldn’t be completed. (IDEDistributionErrorDomain error 1.)"
** EXPORT FAILED **
原来 xcodebuild 不喜欢我添加到 exportOptions.plist
的 teamID
参数。我删除后,应用导出成功
两天前我遇到了同样的问题, 问题来自 Apple 证书。 从您的钥匙串中删除 Apple Worldwide Developer Relations certification Authority(将于 2 月 14 日到期),然后通过下载更新它:
我遇到了同样的问题,在查看 KeyChain 时发现用于签名的证书已被吊销。存档工作正常,但是当我们使用 -exportArchive 时,我们遇到了这个神秘的错误。 HTH.
这个论坛帮助我解决了这个问题。
https://forums.developer.apple.com/message/59201#59201
解决方案: 在 exportOptionsPlist 中将密钥从 'method' 更改为 'export_method'。
检查以下原因:
- 您的存档包含头文件。
- 您的存档包含静态库或框架。
在我的例子中,我的一个静态库没有启用 Skip Install
,这导致了同样的问题。当我为该项目将 xcode Skip Install
设置为 Yes
时,我解决了该问题。
Pavel P 的解决方案是
In my case one of my static libs did not have Skip Install enabled and this resulted in the same problem. When I set in xcode Skip Install to Yes for that project I fixed that problem.
同样,我调用 "xcodebuild" 并传入 SKIP_INSTALL=NO 作为选项。
例如,
xcodebuild clean analyze archive -workspace MyWorkspace.xcworkspace -scheme MyScheme -configuration Debug SKIP_INSTALL=NO -archivePath /MyPath/MyArchive.xcarchive
在这种情况下删除 SKIP_INSTALL=NO 解决了我的特殊情况。
在我的例子中,命令失败是因为 method
键丢失或错误。根据 xcodebuild 的手册页,这是允许的方法列表:
app-store、validation、ad-hoc、package、enterprise、development、developer-id 和 mac-application
请注意,默认值为“development”。如果您未指定方法或指定“developer-id”,则您还需要提供一个有效的 teamID
密钥,该密钥在证书的 CN 中报告由 Apple 提供,用于签署应用程序(teamID 是 CN 字段末尾的字母数字字符串)。
在我们的例子中,Apple 证书仅安装在构建 machine 中,没有开发人员可以将其安装在个人计算机或 VM 上。因此,为了测试包的创建和签名,我们使用报告的步骤创建了一个自签名证书 here。无论如何,由于我们的证书中不存在 teamID,我们必须将 method
设置为“mac-application”。在这种情况下,xcodebuild 没有抱怨并且包已正确生成。
我们的 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>teamID</key>
<string>F4keTeamID0</string>
<key>compileBitcode</key>
<true/>
<key>method</key>
<string>mac-application</string>
</dict>
</plist>
旧线程,但 运行 今天刚加入 Xcode 13.3,因为 .docarchive
被添加到 Products/Applications
文件夹(均来自 Xcode和 xcodebuild。在 Xcode 13.2 及更早版本中,文档存档未添加到此文件夹,因此提交和存档导出工作正常。如 tech note TN2215 中所述,只能有一个产品。
一种解决方法是关闭构建设置中的 Build Documentation during 'Build'
设置。这对我有用。