Xcode 的 iOS 项目的版本号设置

Version & Build 号

Image1 icon

今天对 Xcode 里 iOS 的版本号又有了新的认识,一个叫做 Version,一个叫做 Build,这两个值都可以在 Xcode 中选中 target,点击 “Summary” 后看到。 Version 在 plist 文件中的 key 是 “CFBundleShortVersionString”,和 AppStore 上的版本号保持一致,Build 在 plist 中的 key 是 “CFBundleVersion”,代表 build 的版本号,该值每次 build 之后都应该增加 1。这两个值都可以在程序中通过下面的代码获得:

1
[[[NSBundle mainBundle] infoDictionary] valueForKey:@"key"]


### Archive后自动增长build号 除此之外,如果我们想在Archive后build号自动增长,就可以使用到Xcode的run script来实现,步骤是
  1. 选中项目的 target,点击 “Build Phases“
  2. 点击右下角的”Add Build Phrase“,选择”Add run script“,会产生一个新的 Run Script 项
  3. 拖拽新生成的 Run Script 项到最上面
  4. 点开该项,copy 下面的 shell 代码进去,代码来自 [这里](http://stackoverflow.com/questions/9855955/xcode-increment-
    build-number-only-during-archive?answertab=active#tab-top),如下图所示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if [ $CONFIGURATION == Release ]; then
echo "Bumping build number..."
plist=${PROJECT_DIR}/${INFOPLIST_FILE}

#increment the build number (ie 115 to 116)
buildnum=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${plist}")
if [[ "${buildnum}" == "" ]]; then
echo "No build number in $plist"
exit 2
fi

buildnum=$(expr $buildnum + 1)
/usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "${plist}"
echo "Bumped build number to $buildnum"

else
echo $CONFIGURATION " build - Not bumping build number."
fi

这段 shell 脚本的意思就是说,如果当前的配置是 Release(Archive 时该值为 Release,直接在模拟器上运行是 Debug),就设置 build 值为当前 build 值 + 1, 否则什么都不干。

这样在 build 的时候就会看到 build 号会自动加 1 的,想看 build 时输出的信息,可以通过”View -> Navigators -> Log” 来查看最新的 build 时产生的 log。


Ref:

  1. Concurrent Debug, Beta and App Store Builds
  2. stackoverflow: Xcode-Increment build number only during ARCHIVE?

Have fun!