-
Creator 版本:1.9.3
-
目标平台: iOS
-
重现方式:热更新后的应用,用之前同样的包从新覆盖安装后,界面上的资源显示错乱
-
手机型号 :苹果手机
如上情况,安卓平台没有问题。现在想在用户每次覆盖旧包的时候清除缓存,但是怎么知道是覆盖安装?各位大神有遇到这个问题么,怎么解决的啊。
Creator 版本:1.9.3
目标平台: iOS
重现方式:热更新后的应用,用之前同样的包从新覆盖安装后,界面上的资源显示错乱
手机型号 :苹果手机
如上情况,安卓平台没有问题。现在想在用户每次覆盖旧包的时候清除缓存,但是怎么知道是覆盖安装?各位大神有遇到这个问题么,怎么解决的啊。
新包的本地版本设为大于等于旧包热更的版本。
覆盖安装后热更检测时发现包内的版本比热更缓存的版本高就会清除缓存。
现在问题不是新包覆盖,就是用之前一样的包覆盖安装,就会出现资源错乱的问题
主要原因 iOS 沙盒机制 ,每次安装都会导致目录改变.
官方的 热更新逻辑中, 检查 配置文件 的逻辑用的是 [动态获取目录 + 文件夹 ]的地址. 而 js 中设置的searchPath 是 写的固定目录到 localStorage中的.
A 版本热更到 B, 然后再覆盖安装 A 版本.
启动时,热更新检查配置文件, 因为是动态获取的地址.因此拿到的是 在缓存中 B 版本的 配置. 通过B 版本配置在 此时已不存在的 searchPath (因为沙盒机制改变了 缓存目录) 查找资源自然就出错了.
解决办法: main.js 动态设置searchPath
一样的包覆盖安装是什么意思?appstore里你应用过审的版本没更新的话可以做到覆盖安装?
没有上商店。企业账号可以通过读取plist文件下载安装。
恩,发现这个问题了,但是照这么说,因为覆盖后的缓存目录都变了,覆盖安装的A版本进去后热更新应该能检测到服务器的新版本走热更新流程,因为当前缓存目录里面没有之前的manifest文件,但是现在版本对比是一样的,直接就进去了,说明使用的还是B版本目录里面的版本文件在跟服务器做对比。这就很蛋疼了。我直接把B版本的缓存目录删掉,进去后版本对比还是最新的。一脸蒙蔽0.0
同样遇到这个问题
cocos2.4.6,A版本进游戏热更到了hot B,然后覆盖安装了A版本,进游戏感觉是对比了hotB的版本号,但是用的资源却是A版本包体里的资源。结果就是这个手机上使用不了本地缓存的hotB,也更不到hotB