Settings.bundle 版本号正在更新为 $(MARKETING_VERSION)

Settings.bundle version number is updating as $(MARKETING_VERSION)

我有一个应用程序,当我从

递增时,它会自动设置版本

XCode > 常规 > 版本.

但最近我已将 XCode 更新到 11.0,但脚本似乎没有按预期运行:

version=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $SRCROOT/MyApp/Info.plist`
version+=" ("
version+=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $SRCROOT/MyApp/Info.plist`
version+=")"
/usr/libexec/PlistBuddy "$SRCROOT/MyApp/Settings.bundle/Root.plist" -c "set PreferenceSpecifiers:1:DefaultValue $version"

以上脚本假设自动更新版本并且在设置 > 应用程序中可见。

但问题是这个脚本需要做任何更改才能自动更新版本号 XCode?

当前,当版本从 XCode > General > Version 递增时,它被脚本替换为 $(MARKETING_VERSION),这是不正确的。

版本字符串 $MARKETING_VERSION 以及内部版本号 $CURRENT_PROJECT_VERSION 现在在构建过程中作为环境变量公开,因为它们现在保留在 .pbxproj 配置中。

你应该可以像这样实现你想要的:

version="$MARKETING_VERSION ($CURRENT_PROJECT_VERSION)"
/usr/libexec/PlistBuddy "$SRCROOT/MyApp/Settings.bundle/Root.plist" -c "set PreferenceSpecifiers:1:DefaultValue $version"

它通过显示 MARKETING_VERSION 本身来工作:感谢@dgimb 和@Mojtaba Hosseini 的回答。

version="$MARKETING_VERSION"
version+=" ("
version+=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $SRCROOT/MyApp/Info.plist`
version+=")"

/usr/libexec/PlistBuddy "$SRCROOT/MyApp/Settings.bundle/Root.plist" -c "set PreferenceSpecifiers:1:DefaultValue $version"