ios Xcode 4.5中的存档-无错误,但构建已取消

ycggw6v2  于 2023-01-03  发布在  iOS
关注(0)|答案(7)|浏览(130)

我已经开发iOS应用超过2年了,从未遇到过这个问题。我正在尝试存档一个应用以进行beta版分发。构建成功,但在过程的最后,Xcode报告“存档已取消”。

生成日志未显示任何类型的警告或错误。

有时候,通过清理/清理构建文件夹/擦除派生数据,我可以使归档成功,但似乎没有模式。有人遇到过这个问题吗?在这种情况下,我甚至没有任何可以继续的错误消息。

gt0wga4j

gt0wga4j1#

您是否有一个自定义运行脚本,它会使用agvtool来提升版本?我发现这会导致这种行为。几乎100%的存档失败,以及常见的构建失败。删除此脚本为我修复了问题。

agyaoht7

agyaoht72#

第一:在ConfusedNoob的答案上加1,因为这就是问题所在(这让我进行了无数次实验,最终找到了这个解决方案)。如果我的答案对你有帮助,也给他加1,因为他的暗示很重要!
(Also,请看下面我的另一个答案,它完全绕过了agvtool。我最终习惯了在我所有的项目中使用它。)
我已经把它弄得有点混乱了,我发现唯一能可靠地解决它的方法是在适当的方案中将agvtool用作预操作,而不是在构建阶段用作运行脚本。

  • CMD-SHIFT-用于编辑方案的逗号(XCode 6.x)
  • 旋转打开你想要的任何一个方案。我在RunArchive上做了这个,但是我可能只需要存档。
  • 选择“+”图标和“新建运行脚本操作”
  • 添加您的agvtool脚本。如果您关心,我的脚本是:
cd ${PROJECT_DIR} ; xcrun agvtool next-version -all

(**注意:**预操作不会自然地在${PROJECT_DIR}中运行,因此您必须使用cd。)
关闭并保存,就这样。
问题是agvtool修改了项目文件(不必要,因为我们关心的所有内部版本号都在其他地方),修改项目文件会导致构建取消。
在这个问题上也有+1--天哪,这是一个坚韧的问题!

wlsrxk51

wlsrxk513#

另一个技巧是完全跳过agvtool,只需将此运行时脚本添加到构建阶段的末尾(在复制bundle资源之后)。

  • 选择您的项目

  • 选择构建阶段并+

  • 添加新的Run Script阶段

  • 输入脚本

脚本,便于复制/粘贴:

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

确保脚本在构建的复制捆绑包阶段 * 之后 * 运行

3pmvbmvn

3pmvbmvn4#

Xcode 13.2.1 -超级简单

您可能有一个版本转换脚本中断了构建过程(如上所述)。如果是这种情况,请删除它并将下面的代码放在构建后操作中(在编辑方案对话框中)。它将转换项目中的所有版本号,而不会导致问题。

cd "${PROJECT_DIR}" ; agvtool bump

Here's my short blog post on the subject
经过大量的测试,我意识到了几件事:

  • 很多答案都省略了${PROJECT_DIR}周围的引号,这会阻止将目录更改为项目文件夹。
  • 我们可以直接访问agvtool,而不是使用xcrun(至少在安装了Xcode命令行工具的情况下,我还没有尝试过不安装这些工具)
  • 当生成阶段脚本使用agvtool修改项目文件时,新的生成系统会阻止存档成功完成。
jgwigjjp

jgwigjjp5#

对我来说,是carthage update构建阶段导致了这个问题。
还要检查是否有任何其他生成阶段包含修改文件或代码的脚本。

polhcujo

polhcujo6#

在我的例子中,我在更新我的XCode版本后开始经常遇到这个问题。下面是我修复它所做的:
1.单击XCode.

顶部栏上的"锤子"图标
1.在"生成系统"选项卡中选择"旧版生成系统"。
1.点击完成。
如果您正在处理一个较旧的项目,并且所有内容似乎都已编译,则在此之后构建应用程序时应该不会出现此问题。

wgx48brx

wgx48brx7#

我也遇到了同样的问题。但是我在仍然使用avgtool的时候修复了它。
我使用Build PhasesRun Script而不是作为最后一步,并使用了以下脚本,导致错误:

"${DEVELOPER_BIN_DIR}/agvtool" next-version -all

我的解决方案是使用Build PhasesRun Script作为最后一个阶段,并将脚本更改为以下内容

agvtool bump

相关问题