如何使用脚本读取Xcode 11中的当前应用程序版本

Moj*_*ini 17 xcode sh build-settings ios xcode11

Xcode 11之前,我使用了一个脚本来读取当前应用程序版本(适用于AppStore)并帮助我更改LaunchScreen,因为我们不能为此使用swift。

sourceFilePath="$PROJECT_DIR/$PROJECT_NAME/App/Base.lproj/LaunchScreen.storyboard"
versionNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")

sed -i .bak -e "/userLabel=\"APP_VERSION_LABEL\"/s/text=\"[^\"]*\"/text=\"v$versionNumber\"/" "$PROJECT_DIR/$PROJECT_NAME/App/Base.lproj/LaunchScreen.storyboard"
Run Code Online (Sandbox Code Playgroud)

但是在Xcode 11中,项目的构建设置中有一个新的部分称为Versioning

在此处输入图片说明

CFBundleShortVersionString自动更改为$(MARKETING_VERSION)。Xcode会自动处理该问题,我不想手动将其更改为静态数字,而是让Xcode进行处理。

11

因此,问题是如何MARKETING_VERSION使用运行脚本访问此新文件并将其设置为launchScreen标签?

A.K*_*ant 31

Xcode 11/12

在项目中的终端bash 脚本中,您可以使用:

应用版本

xcodebuild -showBuildSettings | grep MARKETING_VERSION | tr -d 'MARKETING_VERSION =' // will be displayed 1.1.6

构建版本

xcodebuild -showBuildSettings | grep CURRENT_PROJECT_VERSION | tr -d 'CURRENT_PROJECT_VERSION =' // will be displayed 7

或者(不要忘记将YouProjectName更改为您的项目名称):

应用版本

cat YouProjectName.xcodeproj/project.pbxproj | grep -m1 'MARKETING_VERSION' | cut -d'=' -f2 | tr -d ';' | tr -d ' '

构建版本

cat YouProjectName.xcodeproj/project.pbxproj | grep -m1 'CURRENT_PROJECT_VERSION' | cut -d'=' -f2 | tr -d ';' | tr -d ' '

或者更慢的方法(Thx Joshua Kaden):

应用版本

xcodebuild -project YouProjectName.xcodeproj -showBuildSettings | grep "MARKETING_VERSION" | sed 's/[ ]*MARKETING_VERSION = //'

构建版本

xcodebuild -project YouProjectName.xcodeproj -showBuildSettings | grep "CURRENT_PROJECT_VERSION" | sed 's/[ ]*CURRENT_PROJECT_VERSION = //'

  • @SeanRobinson159 应该是 `-scheme {SCHEME}`,与 `-workspace {name}.xcodeworkspace` 一起使用 (2认同)

Bab*_*bac 15

在互联网上找不到正确的答案,所以我开始挖掘。

版本和内部版本号显示./PROJECTNAME.xcodeproj/project.pbxproj为营销版本 (MV) 和当前项目版本 (CPV)。

版本号

版本号

我用sed来获取数字。它找到第一次出现的 MV 或 CPV,删除除数字之外的所有内容,并返回结果。为了使其工作,您需要做两件事:

  • 导航到项目根文件夹
  • 将 PROJECTNAME 更改为您的项目名称

命令:

version_number=`sed -n '/MARKETING_VERSION/{s/MARKETING_VERSION = //;s/;//;s/^[[:space:]]*//;p;q;}' ./PROJECTNAME.xcodeproj/project.pbxproj`
build_number=`sed -n '/CURRENT_PROJECT_VERSION/{s/CURRENT_PROJECT_VERSION = //;s/;//;s/^[[:space:]]*//;p;q;}' ./PROJECTNAME.xcodeproj/project.pbxproj`
Run Code Online (Sandbox Code Playgroud)

结果:

版本号和构建号

注意:如果您的工作区中有更多具有不同版本和内部版本号的目标,这可能适合您,也可能不适合,因为它在第一次出现时停止。在这种情况下,祝你好运:)

  • 您应该使用“xcodebuild -showBuildSettings”而不是直接读取项目文件 (4认同)
  • `xcodebuild -project ThreeOneOne.xcodeproj -showBuildSettings | grep“MARKETING_VERSION”| sed 's/[ ]*MARKETING_VERSION = //'` (4认同)

Nan*_*ana 8

您可以像使用其他任何项目变量一样使用它:

sourceFilePath="$PROJECT_DIR/$PROJECT_NAME/App/Base.lproj/LaunchScreen.storyboard"
versionNumber="$MARKETING_VERSION"
buildNumber="$CURRENT_PROJECT_VERSION"

sed -i .bak -e "/userLabel=\"APP_VERSION_LABEL\"/s/text=\"[^\"]*\"/text=\"v$versionNumber\"/" "$PROJECT_DIR/$PROJECT_NAME/App/Base.lproj/LaunchScreen.storyboard"
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用,或者我丢失了一些东西。 (4认同)
  • @HansBondoka`echo“营销版本是:$MARKETING_VERSION”` (2认同)

Vla*_*vík 6

我在这里想念一个针对多个目标和配置的解决方案:

xcodebuild -target <target> -configuration <configuaration> -showBuildSettings  | grep -i 'MARKETING_VERSION' | sed 's/[ ]*MARKETING_VERSION = //'
Run Code Online (Sandbox Code Playgroud)
  • 目标:目标的名称
  • 配置:发布、调试