iTunes中获取App版本信息--Swift

App版本检测更新

请求URL: let appUrl = URL.init(string: "https://itunes.apple.com/lookup?id=" + appId)

结果:
{
 "resultCount":0,
 "results": []
}

需要在com/后面拼cn/,表明是那个国家。

请求URL: let appUrl = URL.init(string: "https://itunes.apple.com/cn/lookup?id=" + appId)

结果:
{
    "resultCount": 1,
    "results": [{
        "artistViewUrl": "https://itunes.apple.com/cn/developer/æ±�è��å¤�é£�ç½�ç»�ç§�æ��æ��é��å
¬å�¸/id1370226171?uo=4",
        "artworkUrl60": "https://is2-ssl.mzstatic.com/image/thumb/Purple115/v4/6c/c3/f3/6cc3f3bf-9de6-61e8-73a0-6a6834690bcb/source/60x60bb.jpg",
        "artworkUrl100": "https://is2-ssl.mzstatic.com/image/thumb/Purple115/v4/6c/c3/f3/6cc3f3bf-9de6-61e8-73a0-6a6834690bcb/source/100x100bb.jpg",
        "ipadScreenshotUrls": [],
        "appletvScreenshotUrls": [],
        "artworkUrl512": "https://is2-ssl.mzstatic.com/image/thumb/Purple115/v4/6c/c3/f3/6cc3f3bf-9de6-61e8-73a0-6a6834690bcb/source/512x512bb.jpg",
        "screenshotUrls": ["https://is1-ssl.mzstatic.com/image/thumb/Purple115/v4/36/0e/41/360e41d2-f0f7-f429-415a-b67fc0c62e3c/source/392x696bb.jpg", "https://is5-ssl.mzstatic.com/image/thumb/Purple115/v4/ff/c9/f0/ffc9f021-f051-4e9b-66fa-818387627808/source/392x696bb.jpg", "https://is2-ssl.mzstatic.com/image/thumb/Purple115/v4/bf/9f/08/bf9f08e5-7cba-dedd-c159-167992cb3ced/source/392x696bb.jpg", "https://is1-ssl.mzstatic.com/image/thumb/Purple115/v4/25/a7/ba/25a7ba29-583d-eb90-7179-d1346ebcfe73/source/392x696bb.jpg", "https://is4-ssl.mzstatic.com/image/thumb/Purple115/v4/7a/32/f2/7a32f22c-1d22-2259-f19a-4e98b3dca4b1/source/392x696bb.jpg"],
        "isGameCenterEnabled": false,
        "advisories": [],
        "kind": "software",
        "features": [],
        "supportedDevices": ["iPhone5s-iPhone5s", "iPadAir-iPadAir", "iPadAirCellular-iPadAirCellular", "iPadMiniRetina-iPadMiniRetina", "iPadMiniRetinaCellular-iPadMiniRetinaCellular", "iPhone6-iPhone6", "iPhone6Plus-iPhone6Plus", "iPadAir2-iPadAir2", "iPadAir2Cellular-iPadAir2Cellular", "iPadMini3-iPadMini3", "iPadMini3Cellular-iPadMini3Cellular", "iPodTouchSixthGen-iPodTouchSixthGen", "iPhone6s-iPhone6s", "iPhone6sPlus-iPhone6sPlus", "iPadMini4-iPadMini4", "iPadMini4Cellular-iPadMini4Cellular", "iPadPro-iPadPro", "iPadProCellular-iPadProCellular", "iPadPro97-iPadPro97", "iPadPro97Cellular-iPadPro97Cellular", "iPhoneSE-iPhoneSE", "iPhone7-iPhone7", "iPhone7Plus-iPhone7Plus", "iPad611-iPad611", "iPad612-iPad612", "iPad71-iPad71", "iPad72-iPad72", "iPad73-iPad73", "iPad74-iPad74", "iPhone8-iPhone8", "iPhone8Plus-iPhone8Plus", "iPhoneX-iPhoneX"],
        "trackCensoredName": "商户助手-e融通",
        "trackViewUrl": "https://itunes.apple.com/cn/app/����-e��/id1370226172?mt=8&uo=4",
        "contentAdvisoryRating": "4+",
        "languageCodesISO2A": ["ZH"],
        "fileSizeBytes": "27520000",
        "trackContentRating": "4+",
        "sellerName": "Jiangsu Dooffe Network Technology Co., Ltd.",
        "primaryGenreName": "Utilities",
        "primaryGenreId": 6002,
        "currency": "CNY",
        "wrapperType": "software",
        "version": "1.0.1",
        "description": "我们的app是面向我们的支付系统线下拓展的收款商户。我们的收款商户提出,如果收款时,手机上能够收到通知,最好是能够播报语音的收款提示,可以为他们的工作提供巨大的便捷。",
        "artistId":"artistId",
        "artistName": "江苏多飞网络科技有限公司",
        "genres": ["工具"],
        "price": 0.00,
        "bundleId": "com.dooffe.dooffeEpay",
        "isVppDeviceBasedLicensingEnabled": true,
        "releaseDate": "2018-05-13T11:59:09Z",
        "minimumOsVersion": "10.0",
        "trackId":"trackId",
        "trackName": "商户助手-e融通",
        "formattedPrice": "免费",
        "genreIds": ["6002"],
        "currentVersionReleaseDate": "2018-05-31T18:55:25Z",
        "releaseNotes": "实时推送到账,语音播报功能"
    }]
}

swift 代码封装:

//
//  HHCheckVersionManager.swift
//  HelperApp
//
//  Created by JunQiang on 2018/3/16.
//  Copyright © 2018年 多飞. All rights reserved.
//

import Foundation

class HHCheckVersionManager: NSObject {
    
    /// app版本更新检测
    ///
    /// - Parameter appId: apple ID - 开发者帐号对应app处获取
    init(appId:String) {
        super.init()
        
        //获取appstore上的最新版本号
        let appUrl = URL.init(string: "https://itunes.apple.com/cn/lookup?id=" + appId)
        let appMsg = try? String.init(contentsOf: appUrl!, encoding: .utf8)
        let appMsgDict:NSDictionary = getDictFromString(jString: appMsg!)
        let appResultsArray:NSArray = (appMsgDict["results"] as? NSArray)!
      
        let appResultsDict:NSDictionary = appResultsArray.lastObject as! NSDictionary
        let appStoreVersion:String = appResultsDict["version"] as! String
        let appStoreVersion_Float:Double = CFStringGetDoubleValue(appStoreVersion as CFString)// Float(appStoreVersion)!

        //获取当前手机安装使用的版本号
        let localVersion:String = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
        let localVersion_Float:Double = CFStringGetDoubleValue(localVersion as CFString)// Float(localVersion)!

        //用户是否设置不再提示
        let userDefaults = UserDefaults.standard
        let res = userDefaults.bool(forKey: "NO_ALERt_AGAIN")
        //appstore上的版本号大于本地版本号 - 说明有更新
        if appStoreVersion_Float > localVersion_Float && !res {
             let alertC = UIAlertController.init(title: "版本更新了", message: "是否前往更新", preferredStyle: .alert)
             let yesAction = UIAlertAction.init(title: "去更新", style: .default, handler: { (handler) in
                  self.updateApp(appId:appId)
             })
             let noAction = UIAlertAction.init(title: "下次再说", style: .cancel, handler: nil)
                let cancelAction = UIAlertAction.init(title: "不再提示", style: .default, handler: { (handler) in
                    self.noAlertAgain()
                })
                alertC.addAction(yesAction)
                alertC.addAction(noAction)
                alertC.addAction(cancelAction)
                UIApplication.shared.keyWindow?.rootViewController?.present(alertC, animated: true, completion: nil)
            }
            else {
                let alertC = UIAlertController.init(title: "版本检测", message: "App已经是最新版本", preferredStyle: .alert)
                let yesAction = UIAlertAction.init(title: "我知道了~", style: .default, handler: { (handler) in
                    
                })
                alertC.addAction(yesAction)
                UIApplication.shared.keyWindow?.rootViewController?.present(alertC, animated: true, completion: nil)
            }
    }
    
    //去更新
    func updateApp(appId:String) {
        let updateUrl:URL = URL.init(string: "https://itunes.apple.com/cn/app/id" + appId)!
        if #available(iOS 10.0, *) {
            UIApplication.shared.open(updateUrl, options: [:], completionHandler: nil)
        } else {
            // Fallback on earlier versions
            UIApplication.shared.openURL(updateUrl)
        }
    }
    
    //不再提示
    func noAlertAgain() {
        let userDefaults = UserDefaults.standard
        userDefaults.set(true, forKey: "NO_ALERt_AGAIN")
        userDefaults.synchronize()
    }
    
    //JSONString转字典
    func getDictFromString(jString:String) -> NSDictionary {
        let jsonData:Data = jString.data(using: .utf8)!
        let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers)
        if dict != nil {
            return dict as! NSDictionary
        }
        return NSDictionary()
    }
    
}

使用方式: _ = HHCheckVersionManager(appId: kAppId)

大神掠过,欢迎指出问题~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,376评论 25 707
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生x阅读 15,967评论 3 119
  • 今天,在家里重新翻阅八月长安的《最好的我们》,重新沉浸在充满温柔青春的故事中,重新感动于那些挣扎后新鲜成长的人儿。...
    萍梗子阅读 345评论 0 2
  • 投资圣杯 哈里.马科维茨构建了一个广泛应用的模型:把一组资产以及它们的预期回报、风险和相关性(显示这些资产在过去表...
    鹿呦终南阅读 131评论 0 0
  • 作为一个女人,结婚生子,相夫教子,这就是我这几年的样子。我一直都很感恩,感恩生命中有一个很好的丈夫,即使穷了没有关...
    伊黎221阅读 201评论 0 3