持续创作,加快生长!这是我参与「日新计划 10 月更文应战」的第4天,点击查看活动概况

引言

  • 版别晋级准则:任何前进都比没有前进好

在谷歌内部,大部分产品的改善都是渐进的,即使是新产品,也难以第一次就很完美。许多时分,快到新版别上线的截止日期,总有单个项目不能如期交给相应的功用,缺了一些功用的新版别的确让人不舒服。这个时分怎么办呢?是否再等一两天? 谷歌的做法是不等,由于或许永久没有完美的时分。将一个比原来更好一点儿的版别准时供给给用户,总比为了寻求一个完美的版别,最终什么都供给不了好得多。

  • 依据appid检测是否有新版别

iOS小技能:版本升级原则(任何进步都比没有进步好) & 检查新版本方案(比较版本号大小的方法)

原文:kunnan.blog.csdn.net/article/det…

I 版别晋级准则:任何前进都比没有前进好

1.1 谷歌的做法

在谷歌内部,大部分产品的改善都是渐进的,即使是新产品,也难以第一次就很完美。许多时分,快到新版别上线的截止日期,总有单个项目不能如期交给相应的功用,缺了一些功用的新版别的确让人不舒服。这个时分怎么办呢?是否再等一两天? 谷歌的做法是不等,由于或许永久没有完美的时分。将一个比原来更好一点儿的版别准时供给给用户,总比为了寻求一个完美的版别,最终什么都供给不了好得多。

1.2 美国在2016年末有过一次经过限枪法案的机会

美国国会两党都提出了禁枪或者限枪法案,当然内容有所差异。简单来说,民主党提出的法案支持严格禁枪,而共和党的法案期望有条件限枪,即在卖枪之前先做比较具体的背景调查,确保拥枪人员无犯罪记录。可是,在随后不久的表决中,两个法案都没有取得经过,于是限枪就胎死腹中。

2016年末,两党的计划其实有许多共同之处,甚至可以说,共和党的计划是民主党的计划的子集,至少两边都同意有不良记录的人不能具有枪支。如果能达到这样一个折中协议,总比没有成果好。可是两边都期望自己的诉求悉数得到满足,最终的成果却是什么诉求都满足不了。

最好是更好的敌人

由于想不出让所有人都满足的计划而难以推动作业。许多时分,一个完美的成果需要完成许多改善,而不会一步到位。

世界上许多工作,其实本身很难一步到位。许多时分,一些人无所作为不是由于不想干事,而是一根筋地寻求最好,最终什么也得不到。 (比方你一直想买大四房的房子,但最终往往仍是连小房子也没有)

II 依据appid检测是否有新版别

依照位数进行顺次比对,而不是去掉.分隔符再比较巨细

比方3.1.0 和3.0.16 如果是先去掉.分隔符再比较巨细,这样会导致误判,由于3016 比3.1.0更大。 除非提早规定约定好,版别号至少固定4位,或者五位。 即 3.1.00 和3.0.16 . 可是这样简单由于人的疏忽而导致判别失误

2.1 去掉.分隔符再比较巨细

  • 依据appid检测是否有新版别

#pragma mark 查看版别 STOREAPPID
- (void)checkTheVersionWithappid:(NSString*)appid{
    [QCTNetworkHelper getWithUrl:[NSString stringWithFormat:@"http://itunes.apple.com/cn/lookup?id=%@",appid] params:nil successBlock:^(NSDictionary *result) {
        if ([[result objectForKey:@"results"] isKindOfClass:[NSArray class]]) {
            NSArray *tempArr = [result objectForKey:@"results"];
            if (tempArr.count) {
                NSString *versionStr =[[tempArr objectAtIndex:0] valueForKey:@"version"];
                NSString *appStoreVersion = [versionStr stringByReplacingOccurrencesOfString:@"." withString:@""] ;
                if (appStoreVersion.length==2) {
                    appStoreVersion  = [appStoreVersion stringByAppendingString:@"0"];
                }else if (appStoreVersion.length==1){
                    appStoreVersion  = [appStoreVersion stringByAppendingString:@"00"];
                }
                NSDictionary *infoDic=[[NSBundle mainBundle] infoDictionary];
                NSString* currentVersion = [[infoDic valueForKey:@"CFBundleShortVersionString"] stringByReplacingOccurrencesOfString:@"." withString:@""];
                currentVersion = [currentVersion stringByReplacingOccurrencesOfString:@"." withString:@""];
                // 去除点
                if (currentVersion.length==2) {
                    currentVersion  = [currentVersion stringByAppendingString:@"0"];
                }else if (currentVersion.length==1){
                    currentVersion  = [currentVersion stringByAppendingString:@"00"];
                }
//                "Discover_a_new_version"= "发现新版别";
//                "Whethertoupdate" = "是否更新";
//                "Illtalkaboutitlater"= "稍后再说";
//                "Update now" = "当即去更新";
//                "Unupdate"= "撤销更新";
                NSLog(@"currentVersion: %@",currentVersion);
//                2020-03-07 20:11:55.867708+0800 Housekeeper[2777:849229] currentVersion: 310
//                2020-03-07 20:11:55.868262+0800 Housekeeper[2777:849229] appStoreVersion: 3016
                NSLog(@"appStoreVersion: %@",appStoreVersion);
                if([self compareVesionWithServerVersion:versionStr]){// 选用新的判别方法: 依照位数进行顺次比对进行版别号巨细判别
//                
//                if([appStoreVersion floatValue] > [currentVersion floatValue]){// 废弃旧的判别方法:去掉.分隔符再比较巨细
                    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:[NSString stringWithFormat:@"%@%@",@"发现新版别",versionStr] message:@"是否更新?" preferredStyle:UIAlertControllerStyleAlert];
                    //                "Illtalkaboutitlater"= "稍后再说";
                    //                "Update now" = "当即去更新";
                    //                "Unupdate"= "撤销更新";
                    [alertController addAction:[UIAlertAction actionWithTitle:@"稍后再说" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
                        NSLog(@"撤销更新");
                    }]];
                    [alertController addAction:[UIAlertAction actionWithTitle:@"当即去更新" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.apple.com/app/id%@",appid]];
                        if (@available(iOS 10.0, *)) {
                            [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
                            }];
                        } else {
                            // Fallback on earlier vesions
                            [[UIApplication sharedApplication] openURL:url];
                        }
                    }]];
                    [[QCT_Common getCurrentVC] presentViewController:alertController animated:YES completion:nil];
                }
            }
        }
    } failureBlock:^(NSError *error) {
        NSLog(@"查看版别错误: %@",error);
    }];
}

2.2 依照位数进行顺次比对

-(BOOL)compareVesionWithServerVersion:(NSString *)version{
    NSDictionary *infoDic=[[NSBundle mainBundle] infoDictionary];
//    NSString* currentVersion = [[infoDic valueForKey:@"CFBundleShortVersionString"] stringByReplacingOccurrencesOfString:@"." withString:@""];
    NSString* currentVersion = [infoDic valueForKey:@"CFBundleShortVersionString"];
    NSArray *versionArray = [version componentsSeparatedByString:@"."];//服务器回来版
    NSArray *currentVesionArray = [currentVersion componentsSeparatedByString:@"."];//当前版别
    NSInteger a = (versionArray.count> currentVesionArray.count)?currentVesionArray.count : versionArray.count;
    for (int i = 0; i< a; i++) {
        NSInteger a = [[versionArray safeObjectAtIndex:i] integerValue];
        NSInteger b = [[currentVesionArray safeObjectAtIndex:i] integerValue];
        if (a > b) {
            NSLog(@"有新版别");
            return YES;
        }else if(a < b){
            return NO;
    }
    }
    return NO;
}