需要做升级判断,or 要用到审核开关,就需要用到版本号的大小判断。
(之后找篇文章写写iOS审核开关的事情<有点风险,不轻易乱学>
下面简单写了个版本字符串对比的小方法,
适用的格式是:1.2.2>1.2.1、1.2 > 1.1.9 、1.2 = 1.2.0 。。。也就是适用于xx.xx.xx.xx.....的纯数字版本格式
以下是代码:
+ (NSInteger)compareVersion:(NSString *)version1 toVersion:(NSString *)version2
{
NSArray *list1 = [version1 componentsSeparatedByString:@"."];
NSArray *list2 = [version2 componentsSeparatedByString:@"."];
for (int i = 0; i < list1.count || i < list2.count; i++)
{
NSInteger a = 0, b = 0;
if (i < list1.count) {
a = [list1[i] integerValue];
}
if (i < list2.count) {
b = [list2[i] integerValue];
}
if (a > b) {
return 1;//version1大于version2
} else if (a < b) {
return -1;//version1小于version2
}
}
return 0;//version1等于version2
}
接下来,说说我自己做版本升级判断的方式:
主要是思路是:
- 将版本号存在本地NSUserDefaults里
- 和目前的CFBundleShortVersionString 进行对比
/*
检查首次安装/升级
*/
+ (void)checkVersionFirstInstall:(void(^)())firstInstall
updateInstall:(void(^)())updateInstall
other:(void(^)())other
{
NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSUserDefaults *persistentDefaults = [NSUserDefaults standardUserDefaults];
NSString *localVersion = [persistentDefaults objectForKey:@"localVersion"];
if(!localVersion){
//首次安装打开
NSLog(@"首次安装打开");
if(firstInstall){
firstInstall();
}
//[self setLocalAppVersion]; 按需求看是否在这里就更新本地版本号
} else if([self compareVersion:appVersion toVersion:localVersion] == 1){
//升级打开
NSLog(@"升级打开");
if(updateInstall){
updateInstall();
}
//[self setLocalAppVersion];
} else {
//普通打开
NSLog(@"普通打开");
if(other){
other();
}
}
}
//将版本号存到本地
+ (void)setLocalAppVersion
{
NSString *localVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSUserDefaults *persistentDefaults = [NSUserDefaults standardUserDefaults];
[persistentDefaults setObject: localVersion forKey:@"localVersion"];
[persistentDefaults synchronize];
}