在“干净的构建文件夹”之后的第一个构建中,使用Xcode 11,构建阶段脚本会正确覆盖Info.plist中CFBundleShortVersionString
的值。
这样,我们可以使用从git标记派生的版本号(例如10.1.2
)覆盖生成的Info.plist。
这是构建脚本:
#!/bin/sh
# Extract the latest tag
describe=`git describe --tags`
# Split by '-' char. The first part is the version number, the remaining part is the build number
version=`echo $describe | cut -d '-' -f1`
build=`echo $describe | cut -d '-' -f2`
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $version" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" || exit 1
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" || exit 1
第二次构建后,从MARKETING_VERSION
文件内的.pbxproj
获取CFBundleShortVersionString值。 MARKETING_VERSION
是在每个方案的Xcode11中添加的新属性。假设版本号为999.999.999
在第一次调试运行时,CFBundleShortVersionString
将为10.1.2。然后在每个成功的构建之后更新为999.999.999。就像我说的那样,如果我清理构建文件夹,则该版本会恢复为正确的值10.1.2。
在Xcode 11中,这同时发生在模拟器和设备上,并且在Xcode 10和早期版本中均能正常工作。