什么是内置编号及其用途? 它与版本号相同吗?
答案 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):
输入以下代码:
buildPlist=$SRCROOT/$INFOPLIST_FILE
PlistBuddy="/usr/libexec/PlistBuddy"
CFBundleVersion=`$PlistBuddy -c "Print CFBundleVersion" $buildPlist`
CFBundleVersion=$(($CFBundleVersion + 1))
$PlistBuddy -c "Set :CFBundleVersion $CFBundleVersion" $buildPlist
玩得开心!
答案 2 :(得分:10)
许多人使用内部版本号来跟踪项目“构建”的总次数(简单地针对小型项目进行编译,对于较大的项目,可能会涉及一些更复杂的过程)。
构建号是每次构建时递增的绝对值。另一方面,版本号是任意“标签”或“标签”,用作特定内部版本号的简写。
所以说你已经构建了123次项目,你的内部版本号为“123”,但为简单起见,你可能决定将其称为“版本1.0”。如果再构建20次来修复错误,那么您的内部版本号为143,但您的版本为“1.01”或“1.1”或您决定命名的任何内容。
我也看到过基于源代码控制的构建号码的项目。因此,CVS / SVN团队可能会使用修订号作为其编号。我也看到了使用最新提交的SHA作为内部版本号的git项目(尽管一些管理工具假设内部版本号是一个增量值 - 显然在SHA的情况下,它不是)。
答案 3 :(得分:5)
内部版本号是一个内部编号,用于指示应用的当前状态。它与版本号的不同之处在于它通常不是面向用户的,并且不表示任何差异/功能/升级,如版本号通常会。
这样想:
为了在您的项目中有效地使用它,Apple提供了一个名为agvtool的强大工具。它允许您轻松设置内部版本号和营销版本。它在脚本编写时特别有用(例如,可以轻松更新每个构建版本的内部版本号,甚至可以查询当前构建版本号)。它甚至可以做更多奇特的事情,比如在你更新内部版本号时为你标记你的SVN。
使用它:
请参阅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}"