Xcode 11存档使PhaseScriptExecution失败

Nav*_*tti 2 xcode ios swift swift4 xcode11

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

PhaseScriptExecution Run \脚本/Users/desarrollo/Library/Developer/Xcode/DerivedData/MyApp-iOS-ewcyzseaubkujucenluznpmduhoo/Build/Intermediates.noindex/ArchiveIntermediates/MyApp-iOS-DEV/IntermediateBuildFilesPath/MyApp-iOS.build/Release-i -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”)

在错误堆栈中,我发现导出CURRENT_PROJECT_VERSION = 114

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

Tok*_*oka 9

以上所有答案都不是自己做的,我必须计算其中的一堆,包括 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提到的苹果文档:https : //developer.apple.com/library/archive/qa/qa1827/_index.html
  2. moucheg提到的一些步骤


Mou*_*heg 6

更新:

在最新版本的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

原版的:

我想你没做错任何事。

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

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

如果您删除该脚本,则您的应用应该可以正常编译而不会出现此错误。

我还没有找到有关如何使脚本与此新$(CURRENT_PROJECT_VERSION)变量一起使用的解决方案。(找到解决方案后,我将更新此答案)

  • 在运行脚本阶段使用“avgtool”会导致构建被取消。你有什么解决办法吗? (7认同)
  • 我在该计划的后期操作中使用了它。不取消构建 (2认同)

S1L*_*IOR 6

这是对我有用的脚本,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 
Run Code Online (Sandbox Code Playgroud)

该脚本最初由Alex Zavatone发布于此处

希望这可以帮助

  • 这完全有效!所有与 avg 工具相关的解决方案都会导致存档被取消。这在 Xcode 11 中对我有用。 (3认同)

cui*_*gda 5

Just change CFBundleVersion from $(CURRENT_PROJECT_VERSION) to number, in my case is 1000 in Info.plist

<key>CFBundleVersion</key>
<string>1004</string>
Run Code Online (Sandbox Code Playgroud)

Then the shell will be 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}"
Run Code Online (Sandbox Code Playgroud)