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 // 这里获取版本号
}
操作步骤:
- 【!!!!安卓无此问题!!!!】
- 在应用商店下载APP(这个包的版本是2.2.0)
- 打开APP,此时会调用接口检测是否有新版本,此时发现有个2.2.1的热更新版本
- 使用uni.downloadFile下载这个wgt(这个wgt版本号是2.2.1)
- 安装plus.runtime.install
- 重启plus.runtime.restart()
- 此时获取到的版本号还是2.2.0,此时依然会验证当然版本号,导致程序无限执行此过程
- 关掉,再次启动,热更新获取到的版本号就正常了
预期结果:
- 获取到版本号为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
将打包好的wgt文件后缀名改为zip,打开后看看版本号是否是2.2.1呢?
更多关于uni-app ios热更新版本号异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
是2.2.1
写个配置文件来管理当前的versionCode值用他来检查版本更新
那官方提供的API还有什么意义呢
你说获取的版本号还是之前的2.2.0,那资源文件是否更新成功?
我刚刚又试了一下,是wgt就没有安装成功,但是在plus.runtime.install走了成功的回调,也plus.runtime.restart了
回复 YXW: 你怎么确定wgt就没有安装成功的? 没有报错吗?https://ask.dcloud.net.cn/article/35667你是不是违反了注意事项和不支持的情况里的说明,好好检查下。
回复 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>

dui
回复 CLP:对什么对,我就是用的plus.runtime.getProperty
回复 chenli: 我知道啊
热更新应用,实际的版本号是不会改变的。要通过 plus.runtime.getProperty 才能是热更新后的信息。
回复 YXW: 那你到底啥问题???????
这是一个iOS平台上热更新后版本号获取延迟的已知问题。问题核心在于iOS系统在热更新后第一次重启时,plus.runtime.getProperty获取的版本号存在缓存延迟。
解决方案:
- 在热更新完成后,不要立即重启应用,建议添加2秒延迟:
setTimeout(()=>{
plus.runtime.restart();
}, 2000);
- 或者在onLaunch中添加版本号缓存机制:
const cachedVersion = uni.getStorageSync('app_version');
if(cachedVersion){
// 使用缓存版本号
} else {
plus.runtime.getProperty(plus.runtime.appid, result => {
uni.setStorageSync('app_version', result.version);
});
}
- 也可以考虑在manifest.json中配置延迟检测:
"app-plus": {
"version": {
"delay": 2000
}
}