Xcode项目的“Build number”

时间:2011-09-10 11:18:40

标签: iphone ios xcode xcode4

什么是内置编号及其用途? 它与版本号相同吗?

9 个答案:

答案 0 :(得分:20)

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

    # 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

答案 1 :(得分:16)

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

  1. 选择菜单项产品/编辑方案...(命令+&lt;)
  2. 扩展构建阶段
  3. 选择预操作
  4. 点击加号以添加“新建运行脚本操作”
  5. 输入“/ bin / bash”作为“Shell”
  6. 从“提供构建设置”
  7. 中选择一个目标
  8. 输入以下代码:

    buildPlist=$SRCROOT/$INFOPLIST_FILE
    PlistBuddy="/usr/libexec/PlistBuddy"
    
    CFBundleVersion=`$PlistBuddy -c "Print CFBundleVersion" $buildPlist`
    CFBundleVersion=$(($CFBundleVersion + 1))
    $PlistBuddy -c "Set :CFBundleVersion $CFBundleVersion" $buildPlist
    
  9. 玩得开心!

答案 2 :(得分:10)

许多人使用内部版本号来跟踪项目“构建”的总次数(简单地针对小型项目进行编译,对于较大的项目,可能会涉及一些更复杂的过程)。

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

所以说你已经构建了123次项目,你的内部版本号为“123”,但为简单起见,你可能决定将其称为“版本1.0”。如果再构建20次来修复错误,那么您的内部版本号为143,但您的版本为“1.01”或“1.1”或您决定命名的任何内容。

我也看到过基于源代码控制的构建号码的项目。因此,CVS / SVN团队可能会使用修订号作为其编号。我也看到了使用最新提交的SHA作为内部版本号的git项目(尽管一些管理工具假设内部版本号是一个增量值 - 显然在SHA的情况下,它不是)。

答案 3 :(得分:5)

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

这样想:

  • Build(CFBundleVersion):构建的编号。通常,您从1开始,并在应用程序的每个版本中增加1。它可以快速比较哪个版本更新,并且它代表了代码库的进步感。在使用QA并且需要确保针对正确的构建记录错误时,这些可能是非常有价值的。
  • 营销版本(CFBundleShortVersionString) - 用于表示此版本应用的面向用户的号码。通常这遵循Major.minor版本方案(例如MyAwesomeApp 1.2),以便让用户知道哪些版本是较小的维护更新,哪些是大量新功能。

为了在您的项目中有效地使用它,Apple提供了一个名为agvtool的强大工具。它允许您轻松设置内部版本号和营销版本。它在脚本编写时特别有用(例如,可以轻松更新每个构建版本的内部版本号,甚至可以查询当前构建版本号)。它甚至可以做更多奇特的事情,比如在你更新内部版本号时为你标记你的SVN。

使用它:

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

请参阅the man page of agvtool了解大量信息

答案 4 :(得分:4)

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

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

顺便提一下cdasher

答案 5 :(得分:3)

Build Number用于次要更新(通常在开始时变得非常高,并且可以在1000结束),例如:如果您更改了几行代码但没有更改逻辑或在更新中创建新功能。版本号适用于相当大的更新,例如:应用中的新功能。然后你可以将它从1.8改为2.0。

答案 6 :(得分: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

答案 7 :(得分: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

答案 8 :(得分:0)

CFBundleVersion (捆绑版)-又名Marketing version,它将显示在Appstore的产品页面上。

CFBundleShortVersionString (捆绑包版本字符串,简称)-捆绑包编号,通常用作次要版本,只能由TestFlight用户查看

您可以通过编程方式在Swift (4+)中获得它们:

let buildNumber = Bundle.main.infoDictionary?[kCFBundleVersionKey as String] as? String,
let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString")

我一次在shell脚本中需要营销版本,这是我使用xcode build tools来获得它的方法:

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}"