美文网首页
迭代版本控制

迭代版本控制

作者: lesmiserables0 | 来源:发表于2017-11-17 17:36 被阅读18次

需求:低版本正常使用,新版本提交审核;审核通过后,新版本正常,低版本提示更新。

app运行中的几种状态

  • 第一次启动程序
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions NS_AVAILABLE_IOS(3_0);
  • 从后台跳前台
- (void)applicationDidBecomeActive:(UIApplication *)application;

第一次启动后需要

 id first = [[NSUserDefaults standardUserDefaults] objectForKey:@"appVersion"];
 if (![first isKindOfClass:[NSString class]])
   {
     [self performSelectorOnMainThread:@selector(setupTheStart:) withObject:nil waitUntilDone:YES];
    }
请求服务端检测审核状态

服务端控制新版本发布后,旧版本是允许继续使用,还是强制更新。

-(void)setupTheStart:(NSDictionary *)userInfo
{
    __weak typeof(self) weakSelf = self;
    NSString * url = @"获取审核状态接口"
    [TIMHttpTool GET:url parameters:nil success:^(id responseObject) {
        if ([responseObject[@"code"] intValue] == 0)
        {
            NSDate *nowDate = [NSDate date];
            [ [NSUserDefaults standardUserDefaults] setObject:nowDate forKey:@"nowDate"];
            [dataUser synchronize];
            if ([responseObject[@"detail"][@"is_check"] intValue] == 0)
            {
                [NSUserDefaults saveInfo:@"" withKey:@"appState"];
            }
            else if([responseObject[@"detail"][@"is_check"] intValue] == 1)
            {
                [NSUserDefaults saveInfo:@"check" withKey:@"appState"];
            }
            switch ([responseObject[@"detail"][@"update"] intValue])
            {
                case 0:
                    [NSUserDefaults saveInfo:@"" withKey:@"UPDATE"];
                    break;
                case 1:// 可更新
                case 2:// 强制
                {
                    NSDictionary * dic = responseObject[@"detail"];
                    [[NSUserDefaults standardUserDefaults] setObject:dic forKey:@"UPDATE"];
                    [[NSUserDefaults standardUserDefaults] synchronize];
                    [weakSelf compareWith:responseObject[@"detail"]];
                }
                    break;
                default:
                    break;
            }
        }
        else
        {
            [NSUserDefaults saveInfo:@"" withKey:@"UPDATE"];
            [NSUserDefaults saveInfo:@"check" withKey:@"appState"];
        }
    } failure:^(NSError *error) {
        [NSUserDefaults saveInfo:@"" withKey:@"UPDATE"];
        [NSUserDefaults saveInfo:@"check" withKey:@"appState"];
    }];
}
强制更新
- (void)compareWith:(NSDictionary *)dic
{
    if (dic)
    {
        NSArray * infoArray = dic[@"update_detail"];
        NSMutableString * infoStr = [[NSMutableString alloc]init];
        for (int i = 0 ; i < infoArray.count; i++)
        {
            [infoStr appendString:[NSString stringWithFormat:@"%d、%@\n",i+1,infoArray[i]]];
        }
        
        UIAlertController * alertCon = [UIAlertController alertControllerWithTitle:@"更新提示" message: infoStr preferredStyle:UIAlertControllerStyleAlert];
        if ([dic[@"update"] intValue] == 1)
        {
            [alertCon addAction:[UIAlertAction actionWithTitle:@"现在更新" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
                [[UIApplication sharedApplication ]openURL:[NSURL URLWithString:dic[@"redirect"]]];
                
            }]];
            
            [alertCon addAction:[UIAlertAction actionWithTitle:@"暂不更新" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action){
                [NSUserDefaults saveInfo:@"" withKey:@"UPDATE"];
            }]];
        }
        else if([dic[@"update"] intValue] == 2)
        {
            [alertCon addAction:[UIAlertAction actionWithTitle:@"现在更新" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
                [[UIApplication sharedApplication ]openURL:[NSURL URLWithString:dic[@"redirect"]]];
                [[IMAPlatform sharedInstance] logout:^{
                    [[AppDelegate sharedAppDelegate] enterLoginUI];
                } fail:^(int code, NSString *err) {
                    [[AppDelegate sharedAppDelegate] enterLoginUI];
                }];
            }]];
            
            
        }
        [self.window.rootViewController  presentViewController:alertCon animated:YES completion:nil];
    }
}
登录后,本地存当前版本号
 [[NSUserDefaults standardUserDefaults] setObject:KAppVersion forKey:@"appVersion"];
appState当前状态:审核版: @"check" 正式版:@""
id state = [[NSUserDefaults standardUserDefaults] objectForKey:@"appState"];
获取app当前版本:
#define KAppVersion [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]

相关文章

  • 迭代版本控制

    需求:低版本正常使用,新版本提交审核;审核通过后,新版本正常,低版本提示更新。 app运行中的几种状态 第一次启动...

  • 版本迭代控制(Not Git/svn)

    说到版本控制,大多数人的大脑中都一定会立刻想到 git 和 svn 吧,只可惜,这次的主角可不是他们 虽说 git...

  • 版本控制如何简化迭代开发

    前端传版本号 后端则可以根据版本号做版本兼容这样可以保证前后端上线操作的解耦 缺点是代码中会出现大量的版本兼容代码...

  • Trie板子 -- Java版

    DFS版本 迭代版本

  • 版本迭代

    天下武功,唯快不破。大道至简的道理人人都懂,但是具体落地时很多人收不住,甚至把简单的事情复杂化。 做产品要快,但有...

  • 版本迭代

    版本迭代最重要目的的就是优化功能,版本迭代的过程就是增加功能的过程,也是削减功能的过程,在迭代过程中也需要做用户调...

  • git配置(1)

    一、为很么要有版本控制系统? 相信工作过的人都用过版本管理系统和协同开发,因为在一个项目中我们虽然手动的迭代版本,...

  • 合并两个有序链表成一个有序链表

    迭代 python版本 go版本

  • How to use Git

    版本控制 版本控制就是控制版本,版本控制系统帮助控制(管理)某个事物(通常指源代码)的不同版本现在流行的版本控制:...

  • stream系列——初识stream

    初识stream 1、对于迭代来说,包含内部迭代和外部迭代。 外部迭代:(程序逻辑自己控制迭代过程) 内部迭代:(...

网友评论

      本文标题:迭代版本控制

      本文链接:https://www.haomeiwen.com/subject/mandvxtx.html