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

51

在 Xcode 11 之前,我使用一个脚本来读取当前应用程序版本(用于 AppStore),并帮助我更改启动屏幕,因为我们不能使用 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"

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

enter image description here

CFBundleShortVersionString 自动更改为 $(MARKETING_VERSION)。 Xcode会自动处理这个问题,我不想手动更改为静态数字,让Xcode自己完成工作。

11

因此问题是如何使用运行脚本访问这个新的MARKETING_VERSION并将其设置为我的启动屏幕标签?

12个回答

0

我有类似的问题,通过显示MARKETING_VERSION本身来解决它:

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"

0

对于Node.js:有xcode包。使用示例:

const xcode = require('xcode');

const project = xcode.project('ios/PROJECT_NAME.xcodeproj/project.pbxproj').parse(() => {
  const config = project.pbxXCBuildConfigurationSection();
  const releaseScheme = Object.keys(config).find(key => config[key].name === 'Release');

  const version = config[releaseScheme].buildSettings.MARKETING_VERSION;
});

之前我使用了plist包,但是由于最新的xCode更改,它已经过时了,因为我无法从Info.plist中提取React Native项目的版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接