我已经开发iOS应用超过2年,从未遇到这个问题。我正在尝试对一个应用进行归档以进行测试版分发。构建成功,但在整个过程的最后,Xcode报告“已取消归档”。
构建日志没有显示任何警告或错误。
有时,通过清理/清理生成文件夹/清除派生数据,我可以使归档成功,但似乎没有模式可循。有人遇到过这个问题吗?在这种情况下,我甚至没有任何错误消息可依据。
我已经开发iOS应用超过2年,从未遇到这个问题。我正在尝试对一个应用进行归档以进行测试版分发。构建成功,但在整个过程的最后,Xcode报告“已取消归档”。
构建日志没有显示任何警告或错误。
有时,通过清理/清理生成文件夹/清除派生数据,我可以使归档成功,但似乎没有模式可循。有人遇到过这个问题吗?在这种情况下,我甚至没有任何错误消息可依据。
您是否有一个使用agvtool升级版本的自定义运行脚本?我发现这会导致精确的这种行为。几乎100%的失败率,以及常见的构建失败。将其移除对我来说解决了这个问题。
首先,对ConfusedNoob的回答点个赞+1,因为那就是问题所在(这让我做了很多实验,最终得到这个解决方案)。如果我的回答有帮助,请也给他点个赞+1,因为他的提示非常重要!
(另外,看看我的其他答案,在下面,完全绕过了agvtool。最终我在所有项目中都采用了这种方法。)
我已经尝试了一些方法,唯一可靠的解决方法是在适当的方案中使用agvtool作为预动作,而不是在构建阶段中运行脚本。
Run
和Archive
上这样做,但我可能只需要在archive上这样做。添加你的agvtool脚本。如果你关心的话,我的是:
cd ${PROJECT_DIR} ; xcrun agvtool next-version -all
(注意: 预设操作不会自然地在 ${PROJECT_DIR}
中运行,所以您需要 cd
命令。)
关闭并保存即可。
问题是 agvtool 修改了项目文件(不必要的,因为我们关心的所有构建号都在其他地方),而修改项目文件会导致构建取消。
此外,还要给这个问题点个赞 -- 真是个难题!
agvtool
。 只需将此运行时脚本添加到您的构建阶段末尾(在复制束资源之后)。
Run Script
阶段脚本,便于复制/粘贴:
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
确保你的脚本在构建的拷贝捆绑阶段之后运行。
您可能会遇到版本升级脚本干扰构建过程的情况(如上所述)。如果是这种情况,请将其删除,并在“编辑方案”对话框中的后置构建操作中放置以下代码。它将升级项目内所有版本号,而不会引起问题。
cd "${PROJECT_DIR}" ; agvtool bump
经过大量测试,我意识到以下几点:
${PROJECT_DIR}
周围的引号,这会阻止目录更改为项目文件夹。agvtool
,而无需使用xcrun
(至少当我安装了Xcode命令行工具时是如此,没有尝试过没有安装它们的情况)。agvtool
修改项目文件时阻止存档成功完成。carthage update
的构建阶段导致了这个问题。通过将脚本代码放入构建方案的后置操作中,解决了这个问题。
产品 -> 方案 -> 编辑方案 -> 构建
展开构建方案,在其中找到后置操作。点击“+”并添加新的运行脚本。
就是这样。
我曾经遇到过同样的问题。但是我在仍然使用avgtool
的情况下解决了它。
我使用了一个Build Phases
Run Script
,但不是作为最后一步,并使用了以下脚本导致错误:
"${DEVELOPER_BIN_DIR}/agvtool" next-version -all
我的解决方案是使用 Build Phases
中的 Run Script
作为最后一个阶段,并将脚本更改为以下内容
agvtool bump