xcodebuild -exportArchive:键“方法”的 exportOptionsPlist 错误:预期 之一

Posted

技术标签:

【中文标题】xcodebuild -exportArchive:键“方法”的 exportOptionsPlist 错误:预期 之一【英文标题】:xcodebuild -exportArchive: exportOptionsPlist error for key 'method': expected one of xcodebuild -exportArchive:键“方法”的 exportOptionsPlist 错误:预期 之一 【发布时间】:2015-09-29 10:10:24 【问题描述】:

我正在使用命令行 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' 选项,它也会失败。

【问题讨论】:

【参考方案1】:

我最初怀疑 xcodebuild 工具,但结果证明存档文件无效。当我在 Xcode 中打开存档文件并尝试手动导出 ipa 文件时,我注意到“上传到 App Store”和“验证”按钮被禁用。点击“Export”按钮后,它给了我两个选项:“Save Built Products”和“Export as an Xcode Archive”,但没有 Export ad-hoc distribution 和其他常规选项。

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

更多详情请见https://developer.apple. com/library/ios/technotes/tn2215/_index.html

【讨论】:

+1!在我的情况下,静态库和通用包都不是“跳过安装”,这导致了问题。 我忘记了我的项目中有一个正在构建库的子项目。删除公共标头并将该子项目目标中的库的“跳过安装”设置为 true 对我有用。 当我有一个(意外)设置为构建多个目标的方案时,我遇到了这个问题。我的 CI 设置为构建此方案并在导出步骤中失败,我假设因为它在存档中具有 > 1 的东西,正如您所描述的那样。谢谢! 正如***.com/a/49790922/443279 下方的帖子中所建议的那样。我打开了存档,发现我们的一个框架将“跳过安装”设置为 NO 对我来说,无效存档是由 .xcarchive 内的 Info.plist 文件中缺少“ApplicationProperties”条目引起的。重建似乎现在已经创建了一个有效的档案。 Finder 中缺少的应用程序图标也很明显,无效存档也很明显(它有一个通用存档图标)。【参考方案2】:

我在我的一个项目中遇到了这个问题。在将 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参数。删除后,应用导出成功。

【讨论】:

你真的拯救了我的一天..谢谢! .. 删除 teamID 对我有用 检查您的 Apple WWDR 证书是否已过期:reddit.com/r/iOSProgramming/comments/45siza/… 我从来没有介绍过我的teamID,但这个错误仍然在咬我的腿:(【参考方案3】:

在我的情况下,我的一个静态库没有启用Skip Install,这导致了同样的问题。当我为那个项目在 xcode 中设置 Skip InstallYes 时,我解决了这个问题。

【讨论】:

如果将 Skip Install 设置为 No 对我有用【参考方案4】:

两天前我遇到了同样的问题, 问题来自 Apple 证书。 从您的钥匙串中删除 Apple Worldwide Developer Relations 认证机构(将于 2 月 14 日到期),然后通过下载进行更新:

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

【讨论】:

如果您使用 El Capitan 10.11.4 安装 Xcode 7.3,您会发现您拥有更新的证书。如果你愿意,你可以删除过期的,虽然你不需要删除它。【参考方案5】:

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

检查以下原因:

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

【讨论】:

【参考方案6】:

Pavel P 的解决方案是

在我的情况下,我的一个静态库没有启用跳过安装,这导致了同样的问题。当我为那个项目在 xcode 中设置 Skip Install 为 Yes 时,我解决了这个问题。

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

【讨论】:

这也解决了我的问题。我的项目中唯一特别的是一个用于设备和模拟器的 .xcframework,MSAL。【参考方案7】:

在我的例子中,命令失败是因为 method 键丢失或错误。根据 xcodebuild 的手册页,这是允许的方法列表:

app-store、validation、ad-hoc、package、enterprise、development、developer-id 和 mac-application

请注意,默认值为“development”。如果您未指定方法或指定“developer-id”,则您还需要提供有效的teamID 密钥,该密钥在 Apple 提供的证书的 CN 中报告,即用于签署应用程序(teamID 是 CN 字段末尾的字母数字字符串)。

在我们的案例中,Apple 证书仅安装在构建机器中,开发人员无法将其安装在个人计算机或 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>

【讨论】:

【参考方案8】:

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

【讨论】:

有趣。一旦您将可行的证书引入您的钥匙链,您是否设法让它工作?您的回答实际上是“不要相信错误信息 - 问题可能不同”【参考方案9】:

旧线程,但由于 .docarchive 被添加到 Products/Applications 文件夹(来自 Xcode 和 xcodebuild。在 Xcode 13.2 和更早版本中,文档存档未添加到此文件夹中,所以今天在 Xcode 13.3 中遇到了这个问题所以提交和存档导出工作正常。正如tech note TN2215 中所述,只能有一个产品。

Xcode 13.2 及更早版本

Xcode 13.3

一种解决方法是在构建设置中关闭Build Documentation during 'Build' 设置。这对我有用。

【讨论】:

【参考方案10】:

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

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

【讨论】:

我试过了,但没用 - 看起来“export_method”在 exportOptionsPlist 中根本不受支持(请参阅 xcodebuild -help | grep exportOptionsPlist)。我一直收到“方法”的相同错误,只是现在当我的 .plist 中没有“方法”键时,它抱怨默认值(即“开发”)而不是实际值(“开发者 ID”)我正在使用。这个答案不正确。

以上是关于xcodebuild -exportArchive:键“方法”的 exportOptionsPlist 错误:预期 之一的主要内容,如果未能解决你的问题,请参考以下文章

xcodebuild 比 Xcode 慢得多?

xcodebuild 仅打印错误

使用 xcodebuild 分离构建目录

xcodebuild - 设置构建目录不会生成 dSYM

带有变音符号的 xcodebuild 目标名称

iOS Xcodebuild