【问题标题】:Xcode 11 archive gives PhaseScriptExecution failedXcode 11 存档给出 PhaseScriptExecution 失败
【发布时间】:2019-09-30 14:27:32
【问题描述】:

在 Xcode 10 中将我的项目从 swift 3.2 迁移到 swift 4 后,我尝试在 Xcode 11 中存档并给我这个错误:

PhaseScriptExecution 运行\脚本 /Users/desarrollo/Library/Developer/Xcode/DerivedData/MyApp-iOS-ewcyzseaubkujucenluznpmduhoo/Build/Intermediates.noindex/ArchiveIntermediates/MyApp-iOS-DEV/IntermediateBuildFilesPath/MyApp-iOS.build/Release-iphoneos/MyApp-iOS-DEV .build/Script-E95AEDE51E54767F00B60429.sh (在项目“MyApp-iOS”的目标“MyApp-iOS-DEV”中)

。 . .

/Users/desarrollo/Library/Developer/Xcode/DerivedData/MyApp-iOS-ewcyzseaubkujucenluznpmduhoo/Build/Intermediates.noindex/ArchiveIntermediates/MyApp-iOS-DEV/IntermediateBuildFilesPath/MyApp-iOS.build/Release-iphoneos/MyApp- iOS-DEV.build/Script-E95AEDE51E54767F00B60429.sh: 第 5 行:$(CURRENT_PROJECT_VERSION) + 1:语法错误:预期操作数 (错误标记为“$(CURRENT_PROJECT_VERSION) + 1”)

在错误堆栈中我发现 export CURRENT_PROJECT_VERSION=114

我没有任何带有“$(CURRENT_PROJECT_VERSION) + 1”的脚本,所以我不知道该怎么做

【问题讨论】:

  • 您的某个脚本中一定有错误。

标签: ios swift xcode swift4 xcode11


【解决方案1】:

更新 2:

这会导致构建被取消!看看下面 S1LENT WARRIOR 的回答,似乎效果更好。

更新 1:

在最新版本的 Xcode(11.1 版)中,您可以相当轻松地进行内部版本号自动递增。

步骤如下:

  1. 转到目标的Build Settings
  2. 搜索Versioning System
  3. 将其值设置为Apple Generic
  4. 转到目标的Build Phases
  5. 添加新的运行脚本
  6. 添加以下行agvtool next-version -all

对所有目标执行此操作,每次运行任何目标时,它们的内部版本号都会同步和更新。

从这里得到这个答案:https://stackoverflow.com/a/58237340/1432355

P.S.:正如下面评论中所说的那样

在运行脚本阶段使用 avgtool 会导致构建被取消

原文:

我认为你没有做错任何事。

如果您转到info.plist,您会看到内部版本号已被$(CURRENT_PROJECT_VERSION) 替换(您可以在“构建设置”选项卡中找到该变量)。

我猜你正在使用一个自动增加内部版本号的脚本,这导致了问题(我现在的项目中有同样的事情)。

如果您删除该脚本,您的应用应该不会出现此错误。

我还没有找到关于如何使脚本与这个新的$(CURRENT_PROJECT_VERSION) 变量一起工作的解决方案。 (找到解决方案后我会更新这个答案)

【讨论】:

  • 在运行脚本阶段使用 avgtool 会导致构建被取消。你有什么解决办法吗?
  • @Rafał 是的,我也注意到了……下周我会回到这个问题,一旦找到真正有效的解决方案,我会更新这个答案(再次……)
  • 我在计划中的帖子操作中使用了它。不取消构建
  • 我使用的是 Xcode 12.3,它仍然会分阶段为我取消构建,仍然可以作为后期操作
  • @theReverend 谢谢,我会在周末调查
【解决方案2】:

以上所有答案本身并不能解决问题,我必须计算其中的一堆,包括 Apple 文档(请参阅下面的参考资料)。因此,如果它可以帮助某人完成所有步骤,那么这是我执行的步骤。

在 Info.plist 中,设置:

  • CFBundleShortVersionString 到 $(MARKETING_VERSION)
  • CFBundleVersion 到 $(CURRENT_PROJECT_VERSION)

在目标构建设置中:

  • 将版本控制系统设置为“Apple Generic”
  • 将当前项目版本设置为 1(或您想要的任何版本)
  • 将 Marketing Version 设置为 1.0.0(或您想要的任何版本)

在方案中>存档:

  • 添加动作后“运行脚本动作”:
    • 从您的应用程序提供构建设置
    • 在脚本中: cd ${PROJECT_DIR} ; xcrun agvtool next-version -all ;

  1. cuimingda 提到的 Apple 文档: https://developer.apple.com/library/archive/qa/qa1827/_index.html
  2. moucheg提到的一些步骤

【讨论】:

  • 我遵循了完全相同的步骤。但存档不断取消。我正在使用 Xcode 11。有什么解决方案可以避免取消存档吗?
  • 太棒了!完美运行 - 除了我必须将 Bundle Version 更改为随机数,例如 1。当我做$(CURRENT_PROJECT_VERSION) 时,它没有用。
【解决方案3】:

只需将 CFBundleVersion 从 $(CURRENT_PROJECT_VERSION) 更改为数字,在我的情况下是 Info.plist 中的 1000

<key>CFBundleVersion</key>
<string>1004</string>

那么shell就是OKey了:

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

【讨论】:

【解决方案4】:

这是在Xcode 11+上为我工作的脚本
只需将新的 Run Script Phase 添加到您的 Build Phases
将其添加到Link Binary with Libraries 阶段下方。

#!/bin/sh

# To make executable, use: chmod u+x Build-Versioning-Scripts/Increment_Build_Number.sh
# to locate your target's info.plist use
# ${PRODUCT_SETTINGS_PATH}

echo "----"
echo "Info.plist for target: ${PRODUCT_SETTINGS_PATH}"

buildNum=$(/usr/libexec/Plistbuddy -c "Print CFBundleVersion" "${PRODUCT_SETTINGS_PATH}")
echo "Current build #: $buildNum"

if [ -z "$buildNum" ]; then
echo "No build number found in $PRODUCT_SETTINGS_PATH"
exit 2
fi

buildNum=$(expr $buildNum + 1)
echo "Build # incremented to: $buildNum"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNum" "$PRODUCT_SETTINGS_PATH"
echo "----"
exit 0 

此脚本最初由 here 由 Alex Zavatone 发布。

希望对你有帮助

【讨论】:

  • 这非常有效!所有与 avg 工具相关的解决方案都使存档被取消。这在 Xcode 11 中对我有用。
猜你喜欢
  • 2020-05-13
  • 1970-01-01
  • 2023-03-27
  • 2021-02-03
  • 2020-02-15
  • 2021-07-21
  • 2021-02-05
  • 2021-07-07
  • 2019-03-01
相关资源
最近更新 更多