版本更新检查

简介:
#pragma mark - 保存应用在AppStore上的版本号到本地
+ (void)saveAppStoreVersionToUserDefaults {
    NSString *storeVersion = [kUserDefaults stringForKey:kAppStoreVersionKey];
    NSString *bundleVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    
    // 应用当前的version,应该小于等于store上的version。如果不是,则说明应用升级后,UserDefault中保存的store version未更新,需重新设。
    if(nil == storeVersion || [self version:bundleVersion isBiggerThan:storeVersion]) {
        storeVersion = [HYBNetworkEngine obtainLatestAppVersion]; // 获取最新的版本
        if (storeVersion) {
            [kUserDefaults setObject:storeVersion forKey:kAppStoreVersionKey];
        }
    }
    return;
}

#pragma mark - 是否需要更新应用
+ (BOOL)isAppNeedToUpdate:(BOOL)needNetwork {
    NSString *version = nil;
    if (needNetwork) { // 获取应用在appStore上的版本
        version = [HYBNetworkEngine obtainLatestAppVersion];
        if (version) { // 保存到本地
            [kUserDefaults setObject:version forKey:kAppStoreVersionKey];
        }
    } else { // 直接从本地获取
        version = [kUserDefaults stringForKey:kAppStoreVersionKey];
    }
    
    if (!version) {
        return NO;
    }
    
    NSString *bundleVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    if ([self version:version isBiggerThan:bundleVersion]) {
        return YES;
    }
    return NO;
}

+ (BOOL)version:(NSString *)versionA isBiggerThan:(NSString *)versionB {
    NSArray *a = [versionA componentsSeparatedByString:@"."];
    NSArray *b = [versionB componentsSeparatedByString:@"."];
    
    unsigned aa = [[a objectAtIndex:0] intValue];
    unsigned ab = [a count] > 1 ? [[a objectAtIndex:1] intValue] : 0;
    unsigned cc = [a count] > 2 ? [[a objectAtIndex:2] intValue] : 0;
    
    unsigned ba = [[b objectAtIndex:0] intValue];
    unsigned bb = [b count] > 1 ? [[b objectAtIndex:1] intValue] : 0;
    unsigned bc = [b count] > 2 ? [[b objectAtIndex:2] intValue] : 0;
    
    return ((aa > ba) || (aa == ba && ab > bb) || (aa == ba && ab == bb && cc > bc));
}

#pragma mark - 进入AppStore应用
+ (void)goToAppStore {
#if TARGET_IPHONE_SIMULATOR
    NSLog(@"虚拟机不支持APP Store.打开iTunes不会有效果。");
#else
    NSString *iTunesLink = [NSString stringWithFormat:@"http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=%@&mt=8", kAppIDInAppStore, nil];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
#endif
}

目录
相关文章
|
14天前
|
弹性计算 运维 Ubuntu
自动检测并处理系统更新
【4月更文挑战第30天】
19 0
|
3月前
|
IDE 开发工具 开发者
【更新公告】AirtestIDE更新至1.2.15版本
【更新公告】AirtestIDE更新至1.2.15版本
|
3月前
|
IDE 开发工具 Android开发
【更新公告】AirtestIDE更新至1.2.16版本
【更新公告】AirtestIDE更新至1.2.16版本
|
3月前
|
IDE 开发工具 Android开发
【更新公告】AirtestIDE更新至1.2.17版本
【更新公告】AirtestIDE更新至1.2.17版本
【更新公告】AirtestIDE更新至1.2.17版本
|
安全 Java 程序员
解决struts2远程执行漏洞问题升级至2.5.22版本步骤
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
305 0
解决struts2远程执行漏洞问题升级至2.5.22版本步骤
|
网络安全
Libzip 版本过低或提示reinstall解决方法
Libzip 版本过低或提示reinstall解决方法
340 0
|
分布式数据库 开发者 Hbase
关注用户版本问题修复|学习笔记
快速学习 关注用户版本问题修复
|
Web App开发 iOS开发 数据格式
macOS 使用 Sparkle 检查软件自更新
1、前言 其实,本篇文章应该是上一年就打算写的,结果呢,最近才有时间整理。开发 macOS 软件也有一段时间,对于软件更新,之前是自己手动编写增加 API 接口来提示是否有新版本,但一直觉得不智能,界面也不友好,而且下载的是压缩包,需要解压后自动手动替换 App,甚是痛苦。
3547 0
Confluence 6 升级完成后的检查
这个页面中的文章将会为 Confluence 管理员为 Confluence 升级完成后 提供检查列表以确保 Confluence 的升级顺利完成。这个检查列表没有包含所有需要检查的错误,但是将会检查会通常出现错误的地方。
1103 0
|
缓存 iOS开发 Perl