iOS 检测版本更新

如果我们要检测app版本的更新,那么我们必须获取当前运行app版本的版本信息和appstore 上发布的最新版本的信息。

当前运行版本信息可以通过info.plist文件中的bundle version中获取:

[cpp] view
plain
copy

  1. NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];  
  2.     CFShow(infoDic);  
  3.       
  4.     NSString *appVersion = [infoDic objectForKey:@"CFBundleVersion"];  

这样就获取到当前运行的app的版本了

要获取当前app store上的最新的版本,有两种方法,

一、在某特定的服务器上,发布和存储app最新的版本信息,需要的时候向该服务器请求查询。

二、从app store上查询,可以获取到app的作者,连接,版本等。官方相关文档

www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.htm

具体步骤如下:
1,用 POST 方式发送请求:
http://itunes.apple.com/search?term=你的应用程序名称&entity=software

更加精准的做法是根据 app 的 id 来查找:
http://itunes.apple.com/lookup?id=你的应用程序的ID

#define APP_URL http://itunes.apple.com/lookup?id=你的应用程序的ID

你的应用程序的ID 是 itunes connect里的 Apple ID

2,从获得的 response 数据中解析需要的数据。因为从 appstore 查询得到的信息是 JSON 格式的,所以需要经过解析。解析之后得到的原始数据就是如下这个样子的:
{  
    resultCount = 1;  
    results =     (  
                {  
            artistId = 开发者 ID;  
            artistName = 开发者名称; 
            price = 0; 
            isGameCenterEnabled = 0;  
            kind = software;  
            languageCodesISO2A =             (  
                EN  
            ); 
            trackCensoredName = 审查名称;  
            trackContentRating = 评级;  
            trackId = 应用程序 ID;  
            trackName = 应用程序名称";  
            trackViewUrl = 应用程序介绍网址;  
            userRatingCount = 用户评级;  
            userRatingCountForCurrentVersion = 1;  
            version = 版本号;  
            wrapperType = software; 
      }  
    );  
}  

然后从中取得 results 数组即可,具体代码如下所示:

NSDictionary *jsonData = [dataPayload JSONValue];  
NSArray *infoArray = [jsonData objectForKey:@"results"];  
NSDictionary *releaseInfo = [infoArray objectAtIndex:0];  
NSString *latestVersion = [releaseInfo objectForKey:@"version"];  
NSString *trackViewUrl = [releaseInfo objectForKey:@"trackViewUrl"];  

如果你拷贝 trackViewUrl 的实际地址,然后在浏览器中打开,就会打开你的应用程序在 appstore 中的介绍页面。当然我们也可以在代码中调用 safari 来打开它。
UIApplication *application = [UIApplication sharedApplication];  
[application openURL:[NSURL URLWithString:trackViewUrl]];  

代码如下:

-(void)onCheckVersion

{

    NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];

    //CFShow((__bridge CFTypeRef)(infoDic));

    NSString *currentVersion = [infoDic objectForKey:@"CFBundleVersion"];

    NSString *URL = @"http://itunes.apple.com/lookup?id=你的应用程序的ID";

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

    [request setURL:[NSURL URLWithString:URL]];

    [request setHTTPMethod:@"POST"];

    NSHTTPURLResponse *urlResponse = nil;

    NSError *error = nil;

    NSData *recervedData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];

    

    NSString *results = [[NSString alloc] initWithBytes:[recervedData bytes] length:[recervedData length] encoding:NSUTF8StringEncoding];

    NSDictionary *dic = [results JSONValue];

    NSArray *infoArray = [dic objectForKey:@"results"];

    if ([infoArray count]) {

        NSDictionary *releaseInfo = [infoArray objectAtIndex:0];

        NSString *lastVersion = [releaseInfo objectForKey:@"version"];

        

        if (![lastVersion isEqualToString:currentVersion]) {

            //trackViewURL = [releaseInfo objectForKey:@"trackVireUrl"];

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"更新" message:@"有新的版本更新,是否前往更新?" delegate:self cancelButtonTitle:@"关闭" otherButtonTitles:@"更新", nil];

            alert.tag = 10000;

            [alert show];

        }

        else

        {

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"更新" message:@"此版本为最新版本"delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

            alert.tag = 10001;

            [alert show];

        }

    }

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

    if (alertView.tag==10000) {

        if (buttonIndex==1) {

            NSURL *url = [NSURL URLWithString:@"https://itunes.apple.com"];

            [[UIApplication sharedApplication]openURL:url];

        }

    }

}

时间: 2024-09-19 20:33:03

iOS 检测版本更新的相关文章

iOS通过iTunes search检测版本更新,并提示用户更新!

iOS通过iTunes search检测版本更新,并提示用户更新! 如果我们要检测app版本的更新,那么我们必须获取当前运行app版本的版本信息和appstore 上发布的最新版本的信息. 当前运行版本信息可以通过info.plist文件中的bundle version中获取: ? 1 2 3 4 NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];     CFShow(infoDic);           NSStr

ios 版本更新 不报错-iOS开发 版本更新 正在审核 不报错

问题描述 iOS开发 版本更新 正在审核 不报错 如题 app传上去6天了 一直正在审核 还不报错,他会不会一直 正在审核 不报错.我要等下去吗 还是再传一个,如果再传一个 要怎么修改. 我要不要等!!!我要不要等!!! 解决方案 一般app的审核时间8-12天.单纯上传二制包是没问题,但如果想换新上传二进制包的去审核,那就要从新开始等了. 在新版本审核界面的最上方有个提示说,在审核期间可以修改网页上的描述信息,但要更换二进制包,要先取消提交审核.有个链接,一点就可以取消审核 解决方案二: 千万

IOS检测指定路径的文件是否存在

  本文给大家分享的是在IOS开发中检测指定文件是否存在的方法,给大家汇总了4种,十分实用,小伙伴们根据自己的需求自由选择吧. 代码如下: - (NSString *)dataPath:(NSString *)file { NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"badge"];

IOS应用版本更新(自动提醒用户)

在#import "AppDelegate.h" 文件中的application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 方法中           调用检测结果   获得发布版本的Version   比较当前版本与新上线版本做比较 UIAlertView代理方法

Android检测版本更新

一.准备       1.检测当前版本的信息AndroidManifest.xml-->manifest-->android:versionName.       2.从服务器获取版本号(版本号存在于xml文件中)并与当前检测到的版本进行匹配,如果不匹配,提示用户进行升级,如果匹配则进入程序主界面.       3.当提示用户进行版本升级时,如果用户点击了确定,系统将自动从服务器上下载并进行自动升级,如果点击取消将进入程序主界面. 二.效果图                        三.

IOS检测指定路径的文件是否存在_IOS

复制代码 代码如下: - (NSString *)dataPath:(NSString *)file  {      NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"badge"];      BOOL bo = [[NSFileManager defaultManager] creat

自己整理的ios app实现自动升级

主要是写cordova插件 <!---------------------------CheckUpdate.h文件-----------------------------------------> #import <Cordova/CDVPlugin.h> @interface CheckUpdate : CDVPlugin{    NSString *trackViewUrl;} @property (nonatomic,retain) NSString *trackView

【iOS7的一些总结】11、iOS中的事件

1.原理       在应用程序成功启动后,应用程序就开始由外部事件进行驱动.应用程序不断获取事件,并作出响应并更新用户界面,然后等待下一个事件.这对事件进行循环响应的整个机制,称为主要事件循环,由一个全局应用程序对象(一个UIApplication实例)进行管理.       在事件循环中最重要的事件之一就是用户与设备的交互操作.在iOS设备中,用户对设备的操作可以通过多种方式,如点击屏幕或者晃动设备等.iOS操作系统会解析这些操作,并将响应通知应用做出相应.对这些操作进行更加自然和直观的相应

iOS应用的crash日志的分析基础

Outline如何获得crash日志如何解析crash日志如何分析crash日志     1. iOS策略相关     2. 常见错误标识     3. 代码bug 一.如何获得crash日志 当一个iOS应用程序崩溃时,系统会创建一份crash日志保存在设备上.这份crash日志记录着应用程序崩溃时的信息,通常包含着每个执行线程的栈调用信息(低内存闪退日志例外),对于开发人员定位问题很有帮助. 如果设备就在身边,可以连接设备,打开Xcode - Window - Organizer,在左侧面板