uni-app ios热更新版本号异常

uni-app ios热更新版本号异常

项目信息 详情
产品分类 uniapp/App
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 10.15.5
HBuilderX类型 正式
HBuilderX版本号 2.7.14
手机系统 iOS
手机系统版本号 iOS 13.4
手机厂商 苹果
手机机型 iponeX
页面类型 nvue
打包方式 云端
项目创建方式 HBuilderX

示例代码:

plus.runtime.getProperty(plus.runtime.appid, result => {
result.version // 这里获取版本号
}

操作步骤:

  • 【!!!!安卓无此问题!!!!】
  1. 在应用商店下载APP(这个包的版本是2.2.0)
  2. 打开APP,此时会调用接口检测是否有新版本,此时发现有个2.2.1的热更新版本
  3. 使用uni.downloadFile下载这个wgt(这个wgt版本号是2.2.1)
  4. 安装plus.runtime.install
  5. 重启plus.runtime.restart()
  6. 此时获取到的版本号还是2.2.0,此时依然会验证当然版本号,导致程序无限执行此过程
  7. 关掉,再次启动,热更新获取到的版本号就正常了

预期结果:

  • 获取到版本号为2.2.1

实际结果:

  • 版本号依然是2.2.0

bug描述:

【!!!!安卓无此问题!!!!】
应用商店的安装包版本号是2.2.0,线上有个2.2.1的热更新版本,在应用商店下载后,第一次启动时,调用接口获取最新版本为2.2.1,此时下载wgt(这个wgt版本号是2.2.1)安装并重启plus.runtime.restart(),重启后会重新调用onLaunch方法(版本更新检查就在这个方法里),再获取版本号,还是2.2.0,然后调用接口验证最新版…然后下载重启…下载重启…下载重启…循环了,但是关闭后,再次启动热更新就正常了



更多关于uni-app ios热更新版本号异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

30 回复

将打包好的wgt文件后缀名改为zip,打开后看看版本号是否是2.2.1呢?

更多关于uni-app ios热更新版本号异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


是2.2.1

写个配置文件来管理当前的versionCode值用他来检查版本更新

那官方提供的API还有什么意义呢

回复 YXW: 只是提供一个实现方案。接口不能实现就换个方法实现!

你说获取的版本号还是之前的2.2.0,那资源文件是否更新成功?

我刚刚又试了一下,是wgt就没有安装成功,但是在plus.runtime.install走了成功的回调,也plus.runtime.restart了

回复 CLP:不可能,安卓都没有问题的,ios安装成功后提示:{省略…,“version”:“2.2.1”,“versionCode”:“1020”} ,也重启了,就是重启后获取的还是2.2.0

回复 CLP:说白了就是从应用商店下载后第一次打开热更新,正常下载、安装、重启,但是资源是没有变的,必须吧整个APP关掉,再进,从新走这个方法,就没问题了,仅仅就是第一次!!!!!

回复 YXW: app store安装上不会提示热更新啊?

你录个视频来看看

回复 CLP: 热更新没有提示,在显示启动图时检查版本并热更新,从商店第一次下载打开是一直卡在启动图这就是问题

回复 CLP: 能解决下吗,这个太影响我们了,热更新完全就不能用了

回复 YXW: 视频都不录制一个来,我怎么测试发现问题,我得有环境复现问题,才能调试啊

回复 CLP: 录屏已发上去了,第一个是安卓,wgt下载速度慢,打开会有几秒延迟正常,第二个是ios,安装完后第一次打开是进不去的,退出之后再进就可以了

回复 YXW: 不从appstore下载,用基座跑起来,然后热更新也是同样的问题吗?你QQ多少我加你QQ

回复 CLP: appstore我把热更新版本给删了,要不然新用户下载后都打不开,自带基座没有这个问题,要打包后才会出现,QQ:102141070

回复 CLP: 我录屏是用的测试服

回复 CLP: 我怎么没收到你的添加QQ申请呢?

plus.runtime.getProperty(plus.runtime.appid, result => { result.version // 这里获取版本号 } 你是什么时候获取的?确定启动成功了吗?

也是怕出现类似情况,不知道有没有被下架的风险

iOS 端热更新后 versionCode 没有更新,HX 2.9.2 版本已修复此问题 相关问题

使用plus.runtime.version获取不到热更后的版本号,要通过 plus.runtime.getProperty 才能正确获取到,看下图
<template>
<view>
plus.runtime.getProperty:{{ widgetInfo }}
plus.runtime:{{ runtime }}
</view>
</template>

<script> export default { data() { return { widgetInfo: '', runtime: '', } }, created() { // #ifdef APP-PLUS plus.runtime.getProperty(plus.runtime.appid, widgetInfo => { this.widgetInfo = JSON.stringify(widgetInfo) }) this.runtime = plus.runtime // #endif }, } </script>

回复 CLP:对什么对,我就是用的plus.runtime.getProperty

回复 chenli: 我知道啊

热更新应用,实际的版本号是不会改变的。要通过 plus.runtime.getProperty 才能是热更新后的信息。

回复 YXW: 那你到底啥问题???????

这是一个iOS平台上热更新后版本号获取延迟的已知问题。问题核心在于iOS系统在热更新后第一次重启时,plus.runtime.getProperty获取的版本号存在缓存延迟。

解决方案:

  1. 在热更新完成后,不要立即重启应用,建议添加2秒延迟:
setTimeout(()=>{
    plus.runtime.restart();
}, 2000);
  1. 或者在onLaunch中添加版本号缓存机制:
const cachedVersion = uni.getStorageSync('app_version');
if(cachedVersion){
    // 使用缓存版本号
} else {
    plus.runtime.getProperty(plus.runtime.appid, result => {
        uni.setStorageSync('app_version', result.version);
    });
}
  1. 也可以考虑在manifest.json中配置延迟检测:
"app-plus": {
    "version": {
        "delay": 2000
    }
}
回到顶部