版本更新检查

简介:
#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
}

目录
相关文章
|
7月前
bug长时间未修复该怎么办?
bug长时间未修复该怎么办?
bug长时间未修复该怎么办?
|
7月前
自动检查以确保依赖项始终与使用的electron版本相匹配的小技巧
自动检查以确保依赖项始终与使用的electron版本相匹配的小技巧
105 0
|
6月前
|
缓存 安全 网络架构
Win10更新错误0x80070422?尝试这些解决方案快速修复!
Win10更新错误0x80070422?尝试这些解决方案快速修复!
|
7月前
|
IDE 开发工具 Android开发
【更新公告】AirtestIDE更新至1.2.17版本
【更新公告】AirtestIDE更新至1.2.17版本
【更新公告】AirtestIDE更新至1.2.17版本
|
7月前
|
IDE 开发工具 Android开发
【更新公告】AirtestIDE更新至1.2.16版本
【更新公告】AirtestIDE更新至1.2.16版本
|
7月前
|
IDE 开发工具 开发者
【更新公告】AirtestIDE更新至1.2.15版本
【更新公告】AirtestIDE更新至1.2.15版本
122 0
|
分布式数据库 开发者 Hbase
关注用户版本问题修复|学习笔记
快速学习 关注用户版本问题修复
114 0
|
iOS开发 数据格式 MacOS
macOS 使用 Sparkle 检查软件自更新
1、前言 其实,本篇文章应该是上一年就打算写的,结果呢,最近才有时间整理。开发 macOS 软件也有一段时间,对于软件更新,之前是自己手动编写增加 API 接口来提示是否有新版本,但一直觉得不智能,界面也不友好,而且下载的是压缩包,需要解压后自动手动替换 App,甚是痛苦。
3696 0
Confluence 6 升级完成后的检查
这个页面中的文章将会为 Confluence 管理员为 Confluence 升级完成后 提供检查列表以确保 Confluence 的升级顺利完成。这个检查列表没有包含所有需要检查的错误,但是将会检查会通常出现错误的地方。
1129 0
|
缓存 iOS开发 Perl