我一直在努力兼容不同使用习惯的版本号形式,但是在使用中,我们发现很多开发者不熟悉如何更好的使用版本号来标记应用。这是一篇基础文章,简单介绍了iOS的版本号。名词解释Version,俗称版本号,是应用向用户做广告时使用的标志。一般有2或3段,比如:2.1、8.1.2版本一般由产品部决定,完全不同的更新需要改主版本比如QQ4.0的变化非常大,变化在主版本中会更吸引用户的注意力,所以一些应用会频繁更新主版本号,比如FireFox20.0。两阶段的小版本号既包括次要的功能更新,也会包括错误修复等,三阶段的子版本号基本上是增加新功能和修复主要问题。第三段表示稳定版基本上是修复bug的Build。编译号是指一个唯一的编译标识,通常是一个递增的整数(Android强制是一个数字,iOS可以是一个字符串)Build是供内部使用来确定一个唯一的版本。它与上述版本没有太大关系。在iOS开发中,这两个数字可以是任意字符串或数字。目前我们遇到的情况是:Version或者Build被忽略。这两个数字中的一个是常年不变的。Version和Build颠倒了。获取方法也很简单:NSDictionary*info=[[NSBundlemainBundle]infoDictionary];info[@"CFBundleShortVersionString"];//版本信息[@"CFBundleVersion"];//为什么Build要用版本号1,方便标注和通信功能。所以版本号不宜太长。如果是这样“WehavelaunchedXX1.7.14.19257!”,会让用户觉得很无聊,就像电视购物一样,不利于交流。如果是“XX3.0,大不同!”可能会导致更好的沟通。2.容易跟踪错误。一个应用有bug是肯定的,但是快速定位和解决问题体现的是团队和程序员的能力。我们经常会遇到一些开发者说我提交了一个版本,但是下载下来还是旧的。当我们帮他解决问题时,他分不清哪个是哪个。如果“关于”等地方能显示当前版本,就很容易找到问题所在。或者测试组的同事可能有多个不同分支的版本同时在测试,他们需要准确描述一个测试版本。自动更改内部版本号。如前所述,不需要自动更改Version。根据产品或市场部的需要,及时的人工修改就可以了。好的。1.agvtool(Apple-genericversioningtool)agvtool是Apple的命令行工具,也是Xcode中集成的最方便的工具。我们在自动编译SDK的脚本中使用了这个方法。其实只用了一行(其他高级用法可以参考之前的链接):在使用agvtoolnext-version之前,需要在Xcode中简单配置一下,如图:2.SCM-basedversioncontrolnumberSCM现在普遍使用Git和SVN,一些相对Niche的如hg就不介绍了。如果用Git/SVN来管理代码(具体没人用),我们可以用代码提交次数代替Buildnumber。GitREV=`gitrev-listHEAD|厕所-l|awk'{print$1}'`其中HEAD是分支名,代表当前分支,可以直接换成其他分支名,比如master、dev。这个脚本放在SVNREV=`svnversion-nc|sed-e's/^[^:]*://;s/[A-Za-z]//'`都是一样的:PlistBuddy-c"Set:CFBundleShortVersionString${REV}""${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}这样每次app编译时都会自动将版本号添加到Info.plist的CFBundleShortVersionString键值中,上面2行代码可以添加到"BuildPhase>RunScript”:3.基于日期和时间以发布日期作为版本也是很多应用常用的方式,因为这样容易记忆,也容易理解。这里直接附上代码:REV=`date+%y%m%d`#输出格式141120的六位日期格式,可以根据自己的喜好更改格式,后面都是一样的:PlistBuddy-c"Set:CFBundleShortVersionString${REV}""${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}的使用方法同上。如何使用justconfigure一旦设置了版本号,其他的事情就不需要人工干预了。这里有两个使用场景。1.崩溃收集崩溃收集是应用程序开发的必要组成部分。通过对Crash信息的分析和修复,可以大大提高应用的稳定性,不会让更多的用户失望甚至删除应用。收集工具有很多,比如FIR.im下的BugHD,Crashlytics等。2.用户反馈能主动反馈问题的用户都是顶级用户,无论要求是否合理,我们都会认真对待。无论是使用各种SDK还是邮件,都尽量带上版本号和系统信息,方便确认用户需求。最糟糕的是让用户在“关于”中找到相关的版本信息来描述问题。
