内部编号是什么,它的用途是什么?与版本号相同吗?
另外,如果将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
我正在使用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团队可以使用修订号作为其内部版本号。我还看到git项目将最新提交的SHA用作内部版本号(尽管某些管理工具假定内部版本号是增量值—显然,对于SHAs,不是)。
内部版本号是一个内部编号,指示应用程序的当前状态。它与版本号的不同之处在于,它通常不是面向用户的,并且不像版本号那样表示任何差异/功能/升级。
这样想:
为了在您的项目中有效使用此功能,Apple提供了一个出色的工具,称为agvtool。它使您可以轻松地设置内部版本号和市场版本。在编写脚本时(例如,轻松地更新每个内部版本的内部版本号,甚至查询当前内部版本号是什么),它特别有用。它甚至可以做更多奇特的事情,例如在更新内部版本号时为您标记SVN。
要使用它:
请参阅the man page of agvtool获取大量有用信息
内部版本号用于较小的更新(通常在开始时获得很高的1,并且可以在1000处结束),例如:如果您更改了几行代码,但未更改逻辑或在更新中添加了新功能。版本号用于较大的更新,例如:应用程序中的新功能。然后您可以将其从1.8更改为2.0。
如果要对CFBuildDate使用DATE字段,请使用:
# get UTC date
CFBuildDate=$(date -u +"%a %b %d %T GMT %Y")
bdash的绝妙技巧
这在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
仅在存档时,这在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
我一次需要在我的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}"