增加内部版本号?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

作为Xcode构建过程的一部分,我一直在使用shell脚本在薄片文件,但是它经常导致Xcode 4.2.1崩溃。

shell脚本这样做是为了使构建号只增加以下内容:agvtool当文件比薄片文件:

if [ -n \"`find ProjDir -newer ProjDir/Project-Info.plist`\" ]; then agvtool -noscm next-version -all; else echo \"Version not incremented\"; fi

是否有一种方法来增加生成号(在薄片文件,或者其他任何地方),不会破坏Xcode?

编辑这是我的最后解决方案,基于@Monolo的建议

#!/bin/sh

if [ $# -ne 1 ]; then
    echo usage: $0 plist-file
    exit 1
fi

plist="$1"
dir="$(dirname "$plist")"

# Only increment the build number if source files have changed
if [ -n "$(find "$dir" \! -path "*xcuserdata*" \! -path "*.git" -newer "$plist")" ]; then
    buildnum=$(/usr/libexec/Plistbuddy -c "Print CFBundleVersion" "$plist")
    if [ -z "$buildnum" ]; then
        echo "No build number in $plist"
        exit 2
    fi
    buildnum=$(expr $buildnum + 1)
    /usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "$plist"
    echo "Incremented build number to $buildnum"
else
    echo "Not incrementing build number as source files have not changed"
fi

然后,我从Xcode目标“构建阶段”部分调用了脚本:

编辑3:根据@massimobio的答案,如果它包含空格,则需要在plist参数周围添加引号。

编辑4::只是想更新一下,我调用这个构建脚本的首选方法是现在创建一个单独的目标,并使应用程序目标依赖于此凸点生成号目标。这可以确保在app目标执行之前调用它。什么都行使用plist(我注意到它喜欢在构建开始时处理plist)。我还切换到了一种纯粹基于python的解决方案,它将版本号保存在单独的文件中,并写入版本源文件,因为这对于跨平台产品(即Windows下的VisualStudio可以调用脚本,而且很明显cmake/make类型构建也可以这样做)更有用。这样做的好处是,即使在不同的平台下,版本号也总是相同的,而且还可以更新VisualStudioResource.rc也可以使用当前版本/Build文件。

提问于
用户回答回答于

下面的代码片段将更新内部版本号并将文件标记为在过程中被修改,其中get_build_number是一些脚本,用于获取要使用的内部版本号

#!/bin/sh

# get_build_number is a placeholder for your script to get the latest build number
build_number = `get_build_number`

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${build_number}" ProjDir/Project-Info.plist

PlistBuddy允许您在plist文件中设置任何键,而不仅仅是版本号。可以创建所需的所有plist文件,并在需要时将它们包含在资源中。然后可以从包中读取它们。

至于需要在“关于”窗格和其他地方显示版本,也可以查看CFBundleGetInfoStringCFBundleShortVersionString.

用户回答回答于

有两个步骤,一个在开始阶段,一个在构建阶段结束。

一开始:

# Set the build number to the count of Git commits
buildNumber=$(git rev-list HEAD | wc -l | tr -d ' ')
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

最后:

# Set the build number to "DEVELOPMENT"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion DEVELOPMENT" "${PROJECT_DIR}/${INFOPLIST_FILE}"

查看Xcode中的Info.plist,您将看到版本号是“Developing”,但是构建的应用程序的构建数量将不断增加。(只要你总是在同一个分支上构建。)

将版本号设置为最后的常量字符串,通过构建应用程序防止Info.plist文件被更改。

扫码关注云+社区