美文网首页
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 市场版本号与当前版本号比较,提示更新

    项目需求: 基于远程控制iOS版本的强弱更新,后端在请求更新状态的接口里仅会返回应用市场的最新版本号,原生需要将应...

  • iOS 版本更新

    需求:当iOS应用迭代更新时,少不了更新提示 思路:通过获取appStore已上传的版本的版本号与手机当前该软件的...

  • iOS版本更新提示

    iOS更新提示比较简单,不需要后台记录版本号,直接去App Store获取最新版本即可。

  • MUI-拿到版本名称和版本code

    场景: 一般App发布了新版本之后,都会提示用户去更新。这就需要我们获取App的当前版本号与后台存储的版本号做对比...

  • 关于版本更新(企业)

    一, 版本提示更新原则 1,手机端每次进来都从服务器获取最新的版本号,判断服务器端版本号跟当前手机版本号不一样,都...

  • 判断APP系统版本和更新的版本

    需求来源: 在APP迭代更新过程中,有这样的需求,需要比较版本号的大小,然后弹出提示框提示更新. 之前版本号一直是...

  • iOS 之 关于新版本更新

    步凑: 1.得到app在商店的版本号 2.得到系统的版本号 3.比较版本号 如果不一致就提示更新 4.第一次提示用...

  • APP更新提示以及强制更新

    接口参数 客户端处理 对比版本号:当本地版本号低于后台返回的版本号时,显示更新提示; 判断更新类型,是强制更新还是...

  • iOS 获取系统信息

    iOS获取系统信息 当前应用软件版本 比如:1.0.1 当前应用版本号码 (编译版本号) 获取应用信息 当前应用名...

  • iOS版本号相关问题

    为了iOS10 的适配,可能需要区分版本问题 获取当前的版本号 版本号比较问题使用自带的NSString 类中的方...

网友评论

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

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