什么是构建号,它有什么用途?它和版本号是一样的吗?
另外,如果你将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
CFBuildNumber
更改为CFBundleVersion
,以便数字显示在目标摘要编辑器的“构建”字段中。 - RossbuildNum=\
git log --oneline | wc -l``,从Git中获取一个构建标识符。 - Kenny Winkergit rev-list HEAD --count
。 - pronebird我正在使用Xcode 4.3.3 (4E3002),成功实现了以下步骤以在每次构建时自动递增版本号(CFBundleVersion):
输入以下代码:
buildPlist=$SRCROOT/$INFOPLIST_FILE
PlistBuddy="/usr/libexec/PlistBuddy"
CFBundleVersion=`$PlistBuddy -c "Print CFBundleVersion" $buildPlist`
CFBundleVersion=$(($CFBundleVersion + 1))
$PlistBuddy -c "Set :CFBundleVersion $CFBundleVersion" $buildPlist
玩得开心!
很多人使用构建号来跟踪项目“构建”的总次数(对于小型项目仅编译,对于较大的项目可能涉及一些更复杂的过程)。
构建号是每次构建时递增的绝对值。另一方面,版本号是一个任意的“标签”或“标记”,用作特定构建号的简写。
例如,假设您已经构建了123次项目,您的构建号为“123”,但为了便于理解,您可能决定将其称为“1.0版本”。如果您再建立20次以修复错误,则您的构建号为143,而您的版本号为“1.01”或“1.1”或您决定命名的任何内容。
我也看到一些项目将其构建号基于源代码控制。因此,CVS/SVN团队可能使用修订号作为其构建号。我也见过使用最新提交的SHA作为构建号的git项目(尽管一些管理工具假定构建号是递增的值 - 显然,在SHA的情况下,它不是)。
avgtool new-version
可以做到这一点,那就是如果你想让 agvtool 设置 CFBundleVersion(“摘要”选项卡中的“构建”或“信息”选项卡中的“Bundle Version”),并且你想让它设置 CURRENT_PROJECT_VERSION,那么它们两个都必须已经定义为某些值。否则,agvtool 将不会设置它们。 - devguydavid构建号用于小型更新(通常从1开始逐渐增加到1000),例如:如果您在更新中更改了几行代码但未更改逻辑或添加新功能。版本号用于较大的更新,例如:应用程序中的新功能。然后您可以将其从1.8更改为2.0。
# get UTC date
CFBuildDate=$(date -u +"%a %b %d %T GMT %Y")
顺便说一句,cdasher给出了一个很棒的技巧
这个在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
buildPlist=${INFOPLIST_FILE}
后,此方法才对我有效。 - Mohannad A. Hassan这个方法适用于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
Info.plist
文件。然后使正常的 Xcode 项目目标依赖于这个新的脚本目标。这将避免你试图避免的问题。这在 Xcode 4.2 早期就被使用了,如果你使用 Build Phase 脚本来搞乱 Info.plist
,Xcode 4.2 将会崩溃。相关。 - trojanfoeCFBundleVersion (Bundle版本) - 也称为营销版本
,将显示在您的产品在Appstore上的页面上。
CFBundleShortVersionString (Bundle版本字符串, 简短版) - Bundle号码,通常作为次要版本,只能由TestFlight用户看到
以下是如何在Swift (4+)
中以编程方式获取它们:
let buildNumber = Bundle.main.infoDictionary?[kCFBundleVersionKey as String] as? String,
let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString")
我曾经需要在我的shell脚本中使用营销版本,以下是我使用xcode构建工具
获取它的方法:
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}"