美文网首页
iOS 市场版本号与当前版本号比较,提示更新

iOS 市场版本号与当前版本号比较,提示更新

作者: Smalla | 来源:发表于2020-04-09 18:08 被阅读0次
    项目需求:
    • 基于远程控制iOS版本的强弱更新,后端在请求更新状态的接口里仅会返回应用市场的最新版本号,原生需要将应用市场的最新版版本号与本地版本号作比较,如果本地版本号小于应用市场最新版本号,则提示更新;反之,则正常使用。
    思路
    • 分别获取服务端接口返回与本地的版本号,如:服务端接口返回版本号为1.1.0;本地版本号为1.0.0.
    • 将二者去掉小数点之后,分为两个由数字组成的数组,如:服务端数组[1,1,0];本地版本数组[100],逐个比较每位元素的大小。
    实现

    1、获取本地版本号:

    // 获取本地版本号:
    let localVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? ""
    
    // 因为key值较长,这里我抽成一个方法:let localVersion = BasicTool.getAppVersion()
    public struct BasicTool { 
        //获取app版本号
        public static func getAppVersion() -> String{
            return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? ""
        }
    }
    

    2、具体比较逻辑,直接贴代码:

    // 版本管理类
    class VersionManager {
        
        // 返回版本比较结果,如果"localVersion >= appStoreVersion",则返回false,不更新;如果"localVersion < appStoreVersion",则返回true,提示更新。
        class func versionCompare(_ appStoreVersion: String) -> Bool {
            
            let localVersion = BasicTool.getAppVersion()
            
            //判断合法性
            if checkSeparat(localVersion) == "" || checkSeparat(appStoreVersion) == "" {
                return false
            }
            //获得两个数组
            let localVersionArr = cutUpNumber(localVersion)
            let appStoreVersionArr = cutUpNumber(appStoreVersion)
            //比较版本号
            return compareNumber(with: localVersionArr, appStoreVersionArr: appStoreVersionArr)
        }
        
        //提取连接符
        class func checkSeparat(_ vString:String) -> String {
            var separated:String = ""
            if vString.contains("."){ separated = "." }
            if vString.contains("-"){ separated = "-" }
            if vString.contains("/"){ separated = "/" }
            if vString.contains("*"){ separated = "*" }
            if vString.contains("_"){ separated = "_" }
            
            return separated
        }
        
        //提取版本号
        class func cutUpNumber(_ vString:String) -> Array<String> {
            let separat = checkSeparat(vString)
            let b = NSCharacterSet(charactersIn:separat) as CharacterSet
            let vStringArr = vString.components(separatedBy: b)
            return vStringArr
        }
        
        //比较版本
        class func compareNumber(with localVersionArr: [String], appStoreVersionArr: [String]) -> Bool {
            
            for i in 0..<localVersionArr.count {
                
                if appStoreVersionArr.count <= i {
                    return false
                }
                if localVersionArr[i].integerValue != appStoreVersionArr[i].integerValue {
                    if localVersionArr[i].integerValue > appStoreVersionArr[i].integerValue {
                        return false
                    }else{
                        return true
                    }
                }
            }
            return false
        }
    }
    

    3、场景调用:

    // 开启更新之后,市场版本号与本地号比较大小,市场版本号>本地版本号,则提示更新;市场版本号<=本地版本号,则不提示;
    // 其中model.dictItemCode为接收到后端接口返回的市场最新版本号
    if VersionManager.versionCompare(model.dictItemCode) {
        // 更新逻辑
    }
    

    4、如此,问题解决,谢谢!

    相关文章

      网友评论

          本文标题:iOS 市场版本号与当前版本号比较,提示更新

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