我已经开发iOS应用超过2年了,从未遇到过这个问题。我正在尝试存档一个应用以进行beta版分发。构建成功,但在过程的最后,Xcode报告“存档已取消”。
生成日志未显示任何类型的警告或错误。
有时候,通过清理/清理构建文件夹/擦除派生数据,我可以使归档成功,但似乎没有模式。有人遇到过这个问题吗?在这种情况下,我甚至没有任何可以继续的错误消息。
gt0wga4j1#
您是否有一个自定义运行脚本,它会使用agvtool来提升版本?我发现这会导致这种行为。几乎100%的存档失败,以及常见的构建失败。删除此脚本为我修复了问题。
agyaoht72#
第一:在ConfusedNoob的答案上加1,因为这就是问题所在(这让我进行了无数次实验,最终找到了这个解决方案)。如果我的答案对你有帮助,也给他加1,因为他的暗示很重要!(Also,请看下面我的另一个答案,它完全绕过了agvtool。我最终习惯了在我所有的项目中使用它。)我已经把它弄得有点混乱了,我发现唯一能可靠地解决它的方法是在适当的方案中将agvtool用作预操作,而不是在构建阶段用作运行脚本。
Run
Archive
cd ${PROJECT_DIR} ; xcrun agvtool next-version -all
(**注意:**预操作不会自然地在${PROJECT_DIR}中运行,因此您必须使用cd。)关闭并保存,就这样。问题是agvtool修改了项目文件(不必要,因为我们关心的所有内部版本号都在其他地方),修改项目文件会导致构建取消。在这个问题上也有+1--天哪,这是一个坚韧的问题!
${PROJECT_DIR}
cd
wlsrxk513#
另一个技巧是完全跳过agvtool,只需将此运行时脚本添加到构建阶段的末尾(在复制bundle资源之后)。
agvtool
Run Script
脚本,便于复制/粘贴:
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") buildNumber=$(($buildNumber + 1)) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
确保脚本在构建的复制捆绑包阶段 * 之后 * 运行
3pmvbmvn4#
您可能有一个版本转换脚本中断了构建过程(如上所述)。如果是这种情况,请删除它并将下面的代码放在构建后操作中(在编辑方案对话框中)。它将转换项目中的所有版本号,而不会导致问题。
cd "${PROJECT_DIR}" ; agvtool bump
Here's my short blog post on the subject经过大量的测试,我意识到了几件事:
xcrun
jgwigjjp5#
对我来说,是carthage update构建阶段导致了这个问题。还要检查是否有任何其他生成阶段包含修改文件或代码的脚本。
carthage update
polhcujo6#
在我的例子中,我在更新我的XCode版本后开始经常遇到这个问题。下面是我修复它所做的:1.单击XCode.顶部栏上的"锤子"图标1.在"生成系统"选项卡中选择"旧版生成系统"。1.点击完成。如果您正在处理一个较旧的项目,并且所有内容似乎都已编译,则在此之后构建应用程序时应该不会出现此问题。
wgx48brx7#
我也遇到了同样的问题。但是我在仍然使用avgtool的时候修复了它。我使用Build PhasesRun Script而不是作为最后一步,并使用了以下脚本,导致错误:
avgtool
Build Phases
"${DEVELOPER_BIN_DIR}/agvtool" next-version -all
我的解决方案是使用Build PhasesRun Script作为最后一个阶段,并将脚本更改为以下内容
agvtool bump
7条答案
按热度按时间gt0wga4j1#
您是否有一个自定义运行脚本,它会使用agvtool来提升版本?我发现这会导致这种行为。几乎100%的存档失败,以及常见的构建失败。删除此脚本为我修复了问题。
agyaoht72#
第一:在ConfusedNoob的答案上加1,因为这就是问题所在(这让我进行了无数次实验,最终找到了这个解决方案)。如果我的答案对你有帮助,也给他加1,因为他的暗示很重要!
(Also,请看下面我的另一个答案,它完全绕过了agvtool。我最终习惯了在我所有的项目中使用它。)
我已经把它弄得有点混乱了,我发现唯一能可靠地解决它的方法是在适当的方案中将agvtool用作预操作,而不是在构建阶段用作运行脚本。
Run
和Archive
上做了这个,但是我可能只需要存档。(**注意:**预操作不会自然地在
${PROJECT_DIR}
中运行,因此您必须使用cd
。)关闭并保存,就这样。
问题是agvtool修改了项目文件(不必要,因为我们关心的所有内部版本号都在其他地方),修改项目文件会导致构建取消。
在这个问题上也有+1--天哪,这是一个坚韧的问题!
wlsrxk513#
另一个技巧是完全跳过
agvtool
,只需将此运行时脚本添加到构建阶段的末尾(在复制bundle资源之后)。Run Script
阶段脚本,便于复制/粘贴:
确保脚本在构建的复制捆绑包阶段 * 之后 * 运行
3pmvbmvn4#
Xcode 13.2.1 -超级简单
您可能有一个版本转换脚本中断了构建过程(如上所述)。如果是这种情况,请删除它并将下面的代码放在构建后操作中(在编辑方案对话框中)。它将转换项目中的所有版本号,而不会导致问题。
Here's my short blog post on the subject
经过大量的测试,我意识到了几件事:
${PROJECT_DIR}
周围的引号,这会阻止将目录更改为项目文件夹。agvtool
,而不是使用xcrun
(至少在安装了Xcode命令行工具的情况下,我还没有尝试过不安装这些工具)jgwigjjp5#
对我来说,是
carthage update
构建阶段导致了这个问题。还要检查是否有任何其他生成阶段包含修改文件或代码的脚本。
polhcujo6#
在我的例子中,我在更新我的XCode版本后开始经常遇到这个问题。下面是我修复它所做的:
1.单击XCode.
顶部栏上的"锤子"图标
1.在"生成系统"选项卡中选择"旧版生成系统"。
1.点击完成。
如果您正在处理一个较旧的项目,并且所有内容似乎都已编译,则在此之后构建应用程序时应该不会出现此问题。
wgx48brx7#
我也遇到了同样的问题。但是我在仍然使用
avgtool
的时候修复了它。我使用
Build Phases
Run Script
而不是作为最后一步,并使用了以下脚本,导致错误:我的解决方案是使用
Build Phases
Run Script
作为最后一个阶段,并将脚本更改为以下内容