xcodebuild -exportArchive:关键“方法”的 exportOptionsPlist 错误:需要 {} 之一

问题描述 投票:0回答:11

我正在使用命令行 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 中提供什么“方法”,它总是会失败并出现此错误。如果我从 plist 文件中删除“method”选项,它也会失败。

ios xcode ios9 xcode7 xcodebuild
11个回答
60
投票

我一开始怀疑是xcodebuild工具,结果发现存档文件是无效的。当我在 Xcode 中打开存档文件并尝试手动导出 ipa 文件时,我注意到“上传到 App Store”和“验证”按钮被禁用。单击“导出”按钮后,它给了我两个选项:“保存内置产品”和“导出为 Xcode 存档”,但没有导出临时分发和其他常规选项。

事实证明,存档中的 .app 文件中几乎没有库文件。 Xcode 认为这是一个通用存档而不是应用程序存档。检查项目设置中的构建阶段以复制头文件和库文件。

有关更多详细信息,请参阅 https://developer.apple。 com/library/ios/technotes/tn2215/_index.html


10
投票

就我而言,我的一个静态库没有启用

Skip Install
,这导致了同样的问题。当我将该项目的 xcode
Skip Install
设置为
Yes
时,我解决了这个问题。


9
投票

我在我的一个项目中遇到了这个问题。将 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不喜欢我在

teamID
中添加的
exportOptions.plist
参数。删除后,应用程序已成功导出。


5
投票

我这两天也遇到同样的问题, 该问题来自 Apple 证书。 从您的钥匙串中删除 Apple 全球开发者关系认证机构(将于 2 月 14 日到期),然后通过下载续订:

https://developer.apple.com/news/?id=02092016a


3
投票

旧线程,但今天在 Xcode 13.3 中遇到了这个问题,因为

.docarchive
被添加到
Products/Applications
文件夹(均来自 Xcode 和 xcodebuild)。在 Xcode 13.2 及更早版本中,文档存档未添加到此文件夹中,因此提交正如技术说明 TN2215 中所述,存档导出工作正常,只能有一个产品。

Pre-Xcode 13.3 Xcode 13.2 及更早版本

Xcode 13.3 Xcode 13.3

一种解决方法是关闭“构建设置”中的

Build Documentation during 'Build'
设置。 这对我有用。


2
投票

https://developer.apple.com/library/content/technotes/tn2215/_index.html#//apple_ref/doc/uid/DTS40011221-CH1-PROJ

检查以下原因:

  • 您的存档包含头文件。
  • 您的存档包含静态库或框架。

2
投票

Pavel P 的解决方案是

就我而言,我的一个静态库没有启用“跳过安装”,这导致了同样的问题。当我在 xcode 中将该项目的“跳过安装”设置为“是”时,我解决了该问题。

同样,我调用“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 解决了我的特殊情况。


1
投票

在我的例子中,命令失败是因为

method
键丢失或错误。根据 xcodebuild 的手册页,这是允许的方法列表:

应用商店、验证、临时、包、企业、开发、开发人员 ID 和 mac 应用程序

请注意,默认值为“development”。如果您未指定方法或指定“developer-id”,那么您还需要提供有效的

teamID
密钥,该密钥在Apple提供的用于签署应用程序的证书的CN中报告(teamID 是 CN 字段末尾的字母数字字符串)。

在我们的例子中,Apple 证书仅安装在构建计算机中,开发人员不能将其安装在个人计算机或虚拟机上。因此,为了测试包的创建和签名,我们使用此处报告的步骤创建了一个自签名证书。无论如何,由于我们的证书中不存在 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>

0
投票

我遇到了同样的问题,在查看 KeyChain 时发现用于签名的证书已被撤销。 归档工作正常,但是当我们使用 -exportArchive 时,我们遇到了这个神秘的错误。 HTH.


0
投票

就我而言,方案的“运行”部分中的可执行文件是错误的。


-3
投票

这个论坛帮助我解决了这个问题。
https://forums.developer.apple.com/message/59201#59201

解决方案:将exportOptionsPlist中的键从“method”更改为“export_method”。

© www.soinside.com 2019 - 2024. All rights reserved.