【问题标题】:xcodebuild archive fails, xcode archive succeedsxcodebuild 归档失败,xcode 归档成功
【发布时间】:2016-12-19 15:01:17
【问题描述】:

我正在尝试使用 shell 脚本和 Xcode 中的命令行工具将提交过程自动化到 iTunesConnect。到目前为止,我已经成功完成了流程栏中的每一步:存档。

脚本中的代码:

echo "Attempting to build target: ${TARGET_PRODUCT}"
cd $ENGINE_PATH
# Clean
/usr/bin/xcodebuild clean -project projName.xcodeproj -target "${TARGET_PRODUCT}" -configuration Release
# Build and Archive
/usr/bin/xcodebuild archive -project projName.xcodeproj -scheme "${TARGET_PRODUCT}" -configuration Release -archivePath "${TARGET_PRODUCT}".xcarchive

到目前为止,存档命令一直无法成功创建存档。此命令的唯一输出是:** ARCHIVE FAILED **
如果我只是尝试构建而不是存档,我会得到:** BUILD SUCCEEDED **

存档确实会在预期位置生成一个文件,并且“显示包内容”会展开以显示与 Xcode 中生成的存档相同的目录结构,但有一个例外,在 Xcode 中创建的存档包含一个名为 SCMBlueprint 的附加文件夹。

我在其他论坛帖子中看到归档问题通常是由代码签名或配置文件问题引起的。但是,我不相信在这种情况下这是一个问题,因为在构建和归档过程中,使用的代码签名身份和配置文件会在控制台中输出。我失败的归档使用的是成功构建使用的相同代码签名身份和配置文件。此外,我使用 Xcode 生成了一个存档,并在该存档中查找了 embedded.mobileprovision 文件。我将此与xcodebuild 生成的失败存档进行了比较,可以看出它们是相同的。

我已经在网上其他地方寻找有关导致xcodebuild 归档失败的任何建议,但到目前为止,我很难过!非常感谢任何帮助!

【问题讨论】:

  • 那里一定有额外的错误信息。没有它们,您就没有找到原因的希望。
  • 在处理命令时有通常的输出,例如编译源、链接、生成 targetName.app.dSYM、接触 targetName.app、签署 targetName.app 然后只是 ** ARCHIVE FAILED **。失败消息之前的最后一步是 -validate-for-store。虽然其中没有进一步的迹象表明导致存档失败的原因。
  • 你找到解决方案了吗?我的项目开始用 Xcode 8 做这个

标签: ios xcode shell archive xcodebuild


【解决方案1】:

请检查存档过程中是否有任何错误。另外请比较 Xcode 和命令行输出的日志,它可以帮助您了解哪个步骤编译失败。

我有同样的问题。存档在没有任何具体原因的情况下失败,同时生成了 .xcarchive。我查看了来自 xcode 的构建日志,发现它以 Build finished with errors 消息结束。尽管这个错误组织者显示存档并且我能够从中导出 IPA。

当我查看它时,我发现由于损坏的 PNG 文件导致存档错误,在存档过程中无法压缩。错误不是致命的,因此无论如何都会生成存档。当我修复 PNG 文件时,一切都开始顺利编译,没有任何问题。

【讨论】:

  • 这是一个了不起的发现。我长期以来一直忽略非致命的 PNG 粉碎错误。我肯定会传递这个用于命令行归档的晦涩修复。 IMO Apple 真的错过了他们工具的质量。希望他们能尽快找到一些更好的开发人员。!
  • @Bartek 你,先生,是个天才。
【解决方案2】:

这只是发生在我身上,它是针对与 PNG 不同的问题(也许以下只是更一般的情况):我有一个自定义构建阶段,它向stderr 输出错误,但是构建在这种情况下,阶段没有返回与0 不同的退出代码(使用来自Xcode 9.3 (9E145)xcodebuild)。
构建阶段类似于:

find "${SRCROOT}/Directory" -print0 | <...>

其中${SRCROOT}/Directory重命名,因此find 会输出错误而不会导致脚本失败:在执行构建阶段后构建日志将包含Command /bin/sh emitted errors but did not return a nonzero exit code to indicate failure

虽然 Xcode 本身没有任何问题,但xcodebuild 会在触摸 DSYM 之后以 **ARCHIVE FAILED** 结束。

修复是确保如果构建阶段输出到stderr,则构建阶段正确地明确返回与0 不同的退出代码(如1)。就我而言,更改find 中引用的路径解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 2020-06-29
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多