我正在尝试使用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命令无法成功创建存档。此命令的唯一输出是:** ARCHIVE FAILED **
如果我只是尝试构建,而不是存档,我得到:** BUILD SUCCEEDED **
存档确实在预期位置生成文件,并且“显示包内容”展开以显示与Xcode中生成的存档相同的目录结构,但有一个例外,在Xcode中创建的存档包含一个名为SCMBlueprint
的附加文件夹
我在其他论坛帖子上看到,归档问题通常是由于代码签名或配置文件问题造成的。但是,在这种情况下,我不相信这是一个问题,因为在构建和归档过程中,使用的代码签名身份和配置文件在控制台中输出。我失败的归档使用了成功构建所使用的相同代码签名标识和供应配置文件。此外,我使用Xcode生成了一个存档,并在该存档中查找了embedded.mobileprovision
文件。我将此与xcodebuild
生成的失败存档进行了比较,可以看出它们是相同的。
我已经在网上查看了xcodebuild
导致归档失败的任何建议,但到目前为止,我很难过!非常感谢任何帮助!
答案 0 :(得分:3)
请检查存档过程中是否有任何错误。另外请比较Xcode和命令行输出之间的日志,它可以帮助您了解编译失败的步骤。
我有同样的问题。存档失败没有任何特定原因,而.xcarchive已生成。我查看了来自xcode的构建日志,注意到它已完成Build finished with errors
消息。尽管有这个错误,组织者显示存档,我能够从中导出IPA。
当我查看时,我发现存在由PNG文件损坏导致的存档错误,该文件在存档过程中无法压缩。错误是非致命的,因此无论如何都会生成存档。当我修复PNG文件时,一切都开始顺利编译没有任何问题。
答案 1 :(得分:0)
这恰好发生在我身上,它出现了与PNG不同的问题(可能下面的内容只是更一般的情况):我有一个自定义构建阶段,它将错误输出到stderr
,但是在这种情况下,构建阶段没有返回与0
不同的退出代码(使用xcodebuild
中的Xcode 9.3 (9E145)
)。
构建阶段类似于:
find "${SRCROOT}/Directory" -print0 | <...>
${SRCROOT}/Directory
重命名的位置,因此find
会在不使脚本失败的情况下输出错误:构建日志在执行构建后立即包含Command /bin/sh emitted errors but did not return a nonzero exit code to indicate failure
相。
虽然Xcode本身没有任何问题,但在触摸DSYM后,xcodebuild
最终会在**ARCHIVE FAILED**
处失败。
修复是为了确保如果构建阶段输出到stderr
,构建阶段正确地明确地返回不同于0
的退出代码(如1
)。就我而言,更改find
中引用的路径可以解决问题。