• 提示更新效果图如下,当然也是可以自定义类似与AlertView相似的自定义view,如京东、网易云音乐都是自定义了这种提示框的view。以下只展示,从App Store获取到app信息、并解析app信息获取发布在App Store上的版本号与当前手机里安装的app版本号做对比,如果有更新就做提示。
  • 在工程中新建一个NSObject类,将以下.h和.m文件中的代码拷贝至这个新建的类中。
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
  • //
    //  HKCheckAppVersionMgr.h
    //  HKTyy
    //
    //  Created by isHakan on 17/3/24.
    //  Copyright © 2017年 liuhuakun. All rights reserved.
    //
     
    #import <Foundation/Foundation.h>
     
    @interface HKCheckAppVersionMgr : NSObject
     
    + (HKCheckAppVersionMgr *)sharedInstance;
    - (void)isUpdataApp:(NSString *)appId;
     
    @end

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
  • //
    //  HKCheckAppVersionMgr.m
    //  HKTyy
    //
    //  Created by isHakan on 17/3/24.
    //  Copyright © 2017年 liuhuakun. All rights reserved.
    //
     
    #import "HKCheckAppVersionMgr.h"
     
    #import <UIKit/UIKit.h>
     
    @interface HKCheckAppVersionMgr ()<UIAlertViewDelegate>
     
    @property (nonatomic, strong) NSString *appId;
     
    @end
     
    @implementation HKCheckAppVersionMgr
     
    + (HKCheckAppVersionMgr *)sharedInstance
    {
        static HKCheckAppVersionMgr *instance = nil;
         
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
             
            instance = [[HKCheckAppVersionMgr alloc] init];
             
        });
         
        return instance;
    }
     
    - (void)isUpdataApp:(NSString *)appId
    {
        NSURL *appUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?id=%@",appId]];
        NSString *appMsg = [NSString stringWithContentsOfURL:appUrl encoding:NSUTF8StringEncoding error:nil];
        NSDictionary *appMsgDict = [self jsonStringToDictionary:appMsg];
        NSDictionary *appResultsDict = [appMsgDict[@"results"] lastObject];
        NSString *appStoreVersion = appResultsDict[@"version"];
        float newVersionFloat = [appStoreVersion floatValue];//新发布的版本号
         
        NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
        float currentVersionFloat = [currentVersion floatValue];//使用中的版本号
         
        //当前版本小于App Store上的版本&用户未点击不再提示
        if (currentVersionFloat<newVersionFloat && ![self isAlertUpdataAgain])
        {
            self.appId = appId;
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"检测到新版本,是否去更新?" delegate:self cancelButtonTitle:@"去更新" otherButtonTitles:@"下次再说",@"不再提示", nil];
            [alertView show];
        }
         
    }
     
    - (NSDictionary *)jsonStringToDictionary:(NSString *)jsonStr
    {
        if (jsonStr == nil)
        {
            return nil;
        }
         
        NSData *jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
        NSError *error;
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData
                                                             options:NSJSONReadingMutableContainers
                                                               error:&error];
        if (error)
        {
            //NSLog(@"json格式string解析失败:%@",error);
            return nil;
        }
         
        return dict;
    }
     
     
    #pragma mark UIAlertViewDelegate
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        if (buttonIndex==0)
        {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/app/id%@",self.appId]]];
            return;
        }
         
        if (buttonIndex==2)
        {
            [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"IS_ALERT_AGAIN"];
            [[NSUserDefaults standardUserDefaults] synchronize];
            return;
        }
    }
     
    - (BOOL)isAlertUpdataAgain
    {
        BOOL res = [[NSUserDefaults standardUserDefaults] objectForKey:@"IS_ALERT_AGAIN"];
        return res;
    }
     
    @end

  • 在需要检测App版本是否有更新的地方-[以下是以在ViewController处检测App版本更新为例]:
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
  • //  ViewController.m
    //  Demo
    //
    //  Created by isHakan on 2017/7/21.
    //  Copyright © 2017年 liuhuakun. All rights reserved.
    //
     
    #import "ViewController.h"
     
    //引入‘头文件’
    #import "HKCheckAppVersionMgr.h"
     
    //发布在App Store的Apple ID
    #define kYourAppleID @"1234567890"
     
    @interface ViewController ()
     
    @end
     
    @implementation ViewController
     
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
         
        //一句代码检测更新
        [[HKCheckAppVersionMgr sharedInstance] isUpdataApp:kYourAppleID];
    }
     
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
     
     
    @end

iOS开发之一句代码检测APP版本的更新的更多相关文章

  1. iOS开发关于Block代码错误

    本文永久地址为http://www.cnblogs.com/ChenYilong/p/4052362.html ,转载请注明出处. iOS开发关于Block代码错误 Incompatible bloc ...

  2. 《iOS开发指南》要改iOS8版本了,听听您的意见?

    <iOS开发指南>要改iOS8版本了,听听您的意见?参加问卷同学均可获得智捷课堂50元代金卡一张,同时抽取一名同学赠送即将出版的基于iOS8的<iOS开发指南>一本,欢迎大家填 ...

  3. 【好程序员笔记分享】——iOS开发之纯代码键盘退出

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之纯代码键盘退出(非常简单)     iOS开发之纯代码键盘退出 前面说到了好几次关于键盘退出的,但 ...

  4. 【转】【iOS开发】打开另一个APP(URL Scheme与openURL)

    目标 平常我们做iOS开发,会经常遇到打开其他的APP的功能.本篇文章讲的就是打开别人的APP的一些知识.我们的目标是: 打开别人的APP 让别人打开我们的APP iOS9的适配问题 使用URL Sc ...

  5. iOS中如何知道app版本已更新

    主要用于程序升级,开启程序后是否显示新特性两个方面. 1.苹果app版本 苹果规定,程序的版本只能升不能降.例如1.0->1.1可以,1.1->1.0就不可以,不允许上架. 2.app版本 ...

  6. IOS开发 统计XCODE 代码行数

    如果要统计ios开发代码,包括头文件的,终端命令进入项目目录下,命令如下 find . -name "*.m" -or -name "*.h" -or -nam ...

  7. iOS开发技巧 -- 复用代码片段

    如果你是一位开发人员在开发过程中会发现有些代码无论是在同一个工程中还是在不同工程中使用率会很高,有经验的人会直接封装在一个类里,或者写成一个宏定义或者把这些代码收集起来,下次直接使用,或者放到xcod ...

  8. Android(2)—Mono For Android App版本自动更新

    0.前言 公司Android查询的项目已经开始,整体采用Java后台+App前台来实现,由于项目小,App这块就我一个人开发,首先需要研究的是:Android版本的更新升级问题:本人经过近一周的学习整 ...

  9. iOS开发笔记10:圆点缩放动画、强制更新、远程推送加语音提醒及UIView截屏

    1.使用CAReplicatorLayer制作等待动画 CALayer+CABasicAnimation可以制作很多简单的动画效果,之前的博客中介绍的“两个动画”,一个是利用一张渐变色图片+CABas ...

随机推荐

  1. c/c++ allocator 使用

    allocator 使用 作用:只开辟空间,不调用构造函数 操作一览表 allocator<T> a 定义一个名为a的allocator对象,它可以为类型为T的对象分配内存 a.alloc ...

  2. 自动获取svn的版本号

    需求 在做打包时,需要获取本地svn仓库的版本号,如下所示: 下面是我试过的几种做法 SubWCRev 使用SubWCRev.exe(TortoiseSVN自带的小工具),用法简单,但获取到的版本号有 ...

  3. kali系统固化到固态硬盘小记(赠送给广大折腾党的笔记)

    1.首先你需要一个移动硬盘和一个移动硬盘盒子(一根数据转换线,一般买盒子商家会赠送的) SSD硬盘要事先格式化一下格式,不然识别不出来 2.准备好Kali镜像,传送门在这里https://www.ka ...

  4. mysql 中的内置函数

    一.字符串函数 select concat(name,"age is",age) from users;  insert(str,x,y,insert)//将字符串x位置开始y个位 ...

  5. 【PAT】B1009 说反话

    在输入时直接分别将每个单词放入字符串,逆序输出字符串数组 #include<stdio.h> int main(){ int num=0; char ans[90][90]; while( ...

  6. python 守护进程、同步锁、信号量、事件、进程通信Queue

    一.守护进程 1.主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes ...

  7. 【Linux基础】VI命令模式下删除拷贝与粘贴

    在VI命令模式下:y 表示拷贝, d 表示删除,p标识粘贴 1.删除 dw 表示删除从当前光标到光标所在单词结尾的内容. d0 表示删除从当前光标到光标所在行首的内容. d$ 表示删除从当前光标到光标 ...

  8. 【技术与商业案例解读笔记】095:Google大数据三驾马车笔记

     1.谷歌三驾马车地位 [关键词]开启时代,指明方向 聊起大数据,我们通常言必称谷歌,谷歌有“三驾马车”:谷歌文件系统(GFS).MapReduce和BigTable.谷歌的“三驾马车”开启了大数据时 ...

  9. 早期nginx tcp代理(基于patch实现)

    nginx tcp代理功能由nginx_tcp_proxy_module模块提供,同时监测后端主机状态.该模块包括的模块有: ngx_tcp_module, ngx_tcp_core_module, ...

  10. Python 进程管理工具 Supervisor 使用教程

    Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2 ...