一:前言
Version是对外展示的版本号,软件的升级也是通过比对Version来验证是否为最新版本,项目中Version是多少,用户安装到手机上的版本号就是多少;
Build是内部使用的版本号,只有开发者自己可以看到,用来标识每次改动之后打包的包文件。
例如:有一个App,要发布到App Store,Version是2.3.1,Build是2.0,在提交审核的过程中,项目有了新的改动,需要重新提交一版,这时只需要更改Build的号为2.0.1,Version还是2.3.1不变,再次提交审核,上架的时候,对外展示(App Store上的)的实际版本号还是Version 2.3.1
上面获取到的版本号就是Version,在Info.plist文件中对应的key是”CFBundleShortVersionString”。
Build号就是Info.plist文件中”CFBundleVersion”对应的value。
参考来源
代码演示:
// 1.当前设备的系统版本。适用对象:手机的系统版本
NSString *dec=[UIDevice currentDevice].systemVersion;
NSLog(@"当前设备的系统版本:%@",dec);
// 2.Version:APP对外展示的版本号。适用对象:手机中下载的App的版本号
NSString *Version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];// 等价 NSString *Version1 = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSLog(@"APP对外展示的版本号为:%@", Version);
// 3.Build:APP内部的版本号。适用对象:测试用
NSString *Build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];// 等价 NSString *Build1 = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSLog(@"APP的内部的版本号为:%@", Build);
// 1的本质:Xcode左上角模拟器选项中,打钩的地方对应的模拟器就是要获取版本。
// 2和3实现的本质:去Info.plist文件中找指定key对应的value,然后输出value。
控制台输出结果
二:修改APP的Version或者Build号的三种做法:
- 以下只演示一种做法:修改Targets中的Version。
注意:修改Targets中的Version,那么Xml和Plist文件中的Version也会自动并且实时的修改。
同样,修改Xml文件中的Version,Targets和Plist文件中的Version也会自动并且实时的修改。
同样,修改Plist文件中的Version,Targets和Xml文件中的Version也会自动并且实时的修改。
总结: 三种方式中的任意一种修改方式,三个文件中的Version就会都发生改变。
三:设置App的版本号的用途:
App中进行了版本的升级,有些用户仍然使用之前的版本,这样不同版本的App中显示的内容肯定不一样。通过拿到App的版本号,并将版本号作为键值对的形式存在,即{key:value}。这样当不同版本的App发送相同的网络请求时(url一样,但是请求参数不一样),请求参数中包含版本号的键值对,后台PHP代码读取到当前App的版本号来决定从数据库中读取到对应的网络数据。例如读取到的版本号为2.3.1(未升级版本),那么就从数据库中取出@"苹果",若读取到的版本号为2.3.2(已升级版本),那么就从数据库汇总取出@"鸭梨"。