Xcode项目的“内部版本号”

问题描述 投票:30回答:9

内部编号是什么,它的用途是什么?与版本号相同吗?

iphone ios xcode xcode4
9个回答
20
投票

另外,如果将CFBuildDate作为字符串和CFBuildNumber作为字符串添加到info.plist中,则以下shell脚本(当添加到运行脚本构建阶段/ bin / bash时,将自动更新您的构建号和日期:

    # Auto Increment Version Script
buildPlist=${INFOPLIST_FILE}
CFBuildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBuildNumber" $buildPlist)
CFBuildNumber=$(($CFBuildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBuildNumber $CFBuildNumber" $buildPlist
CFBuildDate=$(date +%Y%m%d%H%M%S)
/usr/libexec/PlistBuddy -c "Set :CFBuildDate $CFBuildDate" $buildPlist

17
投票

我正在使用Xcode 4.3.3(4E3002),并通过以下步骤设法使内部版本号(CFBundleVersion)自动增加:

  1. 选择菜单项产品/编辑方案...(Command +
  2. 扩展了构建阶段
  3. 选择预操作
  4. 单击加号以添加“新运行脚本操作”
  5. 输入“ / bin / bash”作为“外壳”
  6. [从“提供构建设置来源”中选择目标之一
  7. 输入了以下代码:

    buildPlist=$SRCROOT/$INFOPLIST_FILE
    PlistBuddy="/usr/libexec/PlistBuddy"
    
    CFBundleVersion=`$PlistBuddy -c "Print CFBundleVersion" $buildPlist`
    CFBundleVersion=$(($CFBundleVersion + 1))
    $PlistBuddy -c "Set :CFBundleVersion $CFBundleVersion" $buildPlist
    

玩得开心!


12
投票

[许多人使用构建号来跟踪项目“构建”的总次数(为小型项目简单地编译,对于大型项目则可能是一些涉及更多的过程)。

内部版本号是每个内部版本增加的绝对值。另一方面,版本号是用作特定内部版本号的简写的任意“标签”或“标签”。

因此,您已经构建了123次项目,内部版本号是“ 123”,但为简单起见,您可能决定将其称为“版本1.0”。如果您再构建20次以修复错误,则内部版本号为143,但是您的版本为“ 1.01”或“ 1.1”或您决定命名的版本。

我也看到过基于源代码控制其内部版本号的项目。因此,CVS / SVN团队可以使用修订号作为其内部版本号。我还看到git项目将最新提交的SHA用作内部版本号(尽管某些管理工具假定内部版本号是增量值—显然,对于SHAs,不是)。


6
投票

内部版本号是一个内部编号,指示应用程序的当前状态。它与版本号的不同之处在于,它通常不是面向用户的,并且不像版本号那样表示任何差异/功能/升级。

这样想:

  • 内部版本(CFBundleVersion):内部版本号。通常,您从1开始,并在每次构建该应用时增加1。它可以快速比较哪个构建是较新的版本,它表示代码库的进度。在进行质量检查并需要确保错误记录在正确的版本中时,这些功能可能具有压倒性的价值。
  • 营销版本(CFBundleShortVersionString)-您用来表示此应用程序版本的面向用户的编号。通常,这遵循Major.minor版本方案(例如MyAwesomeApp 1.2),以使用户知道哪些版本是较小的维护更新,哪些是重要的新功能。

为了在您的项目中有效使用此功能,Apple提供了一个出色的工具,称为agvtool。它使您可以轻松地设置内部版本号和市场版本。在编写脚本时(例如,轻松地更新每个内部版本的内部版本号,甚至查询当前内部版本号是什么),它特别有用。它甚至可以做更多奇特的事情,例如在更新内部版本号时为您标记SVN。

要使用它:

  • 在版本控制下的Xcode中设置您的项目,以使用“ Apple Generic”。
  • 在终端
    • agvtool新版本1(将内部版本号设置为1)
    • agvtool new-marketing-version 1.0(将Marketing版本设置为1.0)

请参阅the man page of agvtool获取大量有用信息


4
投票

内部版本号用于较小的更新(通常在开始时获得很高的1,并且可以在1000处结束),例如:如果您更改了几行代码,但未更改逻辑或在更新中添加了新功能。版本号用于较大的更新,例如:应用程序中的新功能。然后您可以将其从1.8更改为2.0。


4
投票

如果要对CFBuildDate使用DATE字段,请使用:

# get UTC date
CFBuildDate=$(date -u +"%a %b %d %T GMT %Y")

bdash的绝妙技巧


1
投票

这在Xcode 6中对我有用:

cd ${SOURCE_ROOT}
buildPlist=${SOURCE_ROOT}/${PROJECT_NAME}/${PROJECT_NAME}-Info.plist
PlistBuddy="/usr/libexec/PlistBuddy"

buildNumber=`git rev-list HEAD --count`
buildNumber=$(($buildNumber + 1))

$PlistBuddy -c "Set :CFBundleVersion $buildNumber" $buildPlist

1
投票

仅在存档时,这在Xcode 6中有效,并且还修改了dSYM信息字典:

if [ "${CONFIGURATION}" = "Release" ]; then

buildPlist="${SOURCE_ROOT}/${PROJECT_NAME}/${PROJECT_NAME}-Info.plist"

PlistBuddy="/usr/libexec/PlistBuddy"

CFBundleVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}")
CFBundleVersion=$(($CFBundleVersion + 1))

$PlistBuddy -c "Set :CFBundleVersion $CFBundleVersion" "$buildPlist"
$PlistBuddy -c "Set :CFBundleVersion $CFBundleVersion" "$INFOPLIST_FILE"
$PlistBuddy -c "Set :CFBundleVersion $CFBundleVersion" "${DWARF_DSYM_FOLDER_PATH}/${WRAPPER_NAME}.dSYM/Contents/Info.plist"
fi

0
投票

我一次需要在我的shell脚本中使用该版本,这是我的获取方式:

xcodebuild -showBuildSettings -project ${SDK_PROJECT} | sed '1d;s/^ *//;s/"/\\"/g;s/ = \(.*\)/="\1"/;s/ = /=/;s/UID.*//' > xcodebuild-env.tmp
source xcodebuild-env.tmp

echo "${MARKETING_VERSION}"
© www.soinside.com 2019 - 2024. All rights reserved.