iOS项目中的version和build-飞外

Version在plist文件中的key是“CFBundleShortVersionString”,标识应用程序的发布版本号,和AppStore上的版本号保持一致。该版本的版本号是三个分隔的整数组成的字符串。第一个整数代表重大修改的版本,如实现新的功能或重大变化的修订。第二个整数表示的修订,实现较突出的特点。第三个整数代表维护版本

Build在plist文件中的key是“CFBundleVersion”,标示(发布或者未发布)的内部版本号。这是一个单调增加的字符串,包括一个或者多个分割的整数。

以上两个版本号可以通过以下方式获得:

NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];

// app版本
NSString *app_Version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];// app build版本NSString *app_build = [infoDictionary objectForKey:@"CFBundleVersion"];


编写脚本使Archive后自动增长build版本号

如果我们想在Archive后build号自动增长,就可以使用到Xcode的run script来实现,步骤是

选中项目的target,点击“Build Phases“点击右下角的”Add Build Phrase“,选择”Add run script“,会产生一个新的Run Script项拖拽新生成的Run Script项到最上面点开该项,copy下面的shell代码进去,代码来自这里,如下图所示
#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 buildnum=$$(expr $$buildnum + 1) /usr/libexec/Plistbuddy -c "Set CFBundleVersion $$buildnum" "$${plist}" echo "Bumped build number to $$buildnum" 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。


Bundle version 对应Build的参数,为开发和测试使用的。通常我们用整数计,且逐一增加(可以每build一次就增加一次)。而Bundle version string,short 是给用户使用,通常是小数点间隔数表示(如:1.0.2,3.5.12),通常我们将他作为升级的标记。对于开发人员,我们更关心Bundle version的意义。在同版本(Bundle version string,short)下,Bundle version可以是不同的。不同测试包以它为标记来区分,这使得发现问题时能明确测试包的编译版本,进而明确代码版本。也就是说Bundle version能帮助我们更准确高效的定位问题。

如何使用:

搜索了一下网上的资料,发现关于设置BuildVersion的增加功能的流程,基本都用到了脚本,脚本的写法略有不同。这里举例是用到了Apple自身的方法:

好了,可以编译工程试一试。看看你设置的BuildVersion数值是不是有增加。

关于使用的建议:

如果是多人开发,会存在每个人开发的分支多次编译导致Build版本不准的情况,但不影响开发进程。对于开发我们需要注意的是每次测试测试前的Build版本。确保它增加,就,可以了!至于是否要release时增加,是否需要手动修改,这个可以根据实际情况调整。毕竟,Build版本号只是一个辅助的参数。