1.4.2发现 热更新bug

##1.更新完成时:
cc.sys.localStorage.setItem(‘HotUpdateSearchPaths’, JSON.stringify(searchPaths));
这里保存一些检索目录,包括一个热更新的沙盒目录

##2.启动时
main.js :
if (cc.sys.isNative) {
var hotUpdateSearchPaths = cc.sys.localStorage.getItem(‘HotUpdateSearchPaths’);
if (hotUpdateSearchPaths) {
jsb.fileUtils.setSearchPaths(JSON.parse(hotUpdateSearchPaths));
}
}
获取保存的沙盒目录设置为检索目录。

##问题
ios8后沙盒目录每次“更新”(即xcode连线重新运行app,或应用商店下载更新包)后都会变化,这样的话,本地数据库存储的热更新路径和当前的沙盒目录不一致,会找不到已经更新好的资源。

如果是从应用商店下载更新的话,不是应该比沙盒目录的要新吗?

说的有道理,是这么回事,但是有时候,appstore上的包也需要进行热更新,
这样的一种逻辑

手机 - 1.30的应用包
appstore - 1.31的应用包 (不强制更新)
远端热更新 - 2017.7.10

操作步骤
1.手机先不去appstore更新,先热更新。
2.再去appstore更新,此时读不到热更新的内容……

看了一下这段例子工程的代码
<img src="/uploads/default/original/3X/8/d/8d0b736ea1d4ac2d425da44cc7a2241af688bc85.png"width=“690” height=“272”>
这里执行到Manifest.cpp


会设置blackjack-remote-asset为搜索目录,这样在检查更新的时候就会设置一次资源目录。
就会设置检索res/下的资源,哪怕main.js里没有设置过,也会先找blackjack-remote-asset/res/目录下的@panda 帮忙看看

这个需求正常,这个时候 app store 上下载下来的包会重新进行热更新,请求到最高的版本。

沙盒目录的改变是没办法的,但是我估计沙盒内容会被继承下来,也就是热更新的资源还在,这时你可以保存相对于 writable path 的资源路径到 local storage 中,如果从 app store 下载下来后还可以找到 local storage 中的内容,那么可以跟新的 writable path 拼接一下就可以得到正确的本地资源路径了。

上面的方法成功的先决条件是 local storage 和本地缓存资源都被继承到新的应用沙盒目录下,这点我不确定是否成立。如果不成立,重新更新是必要的。

感谢回复,我们采取了writable path拼接的方式解决了问题!

你好,请问问题是如何解决的,有具体例子吗?我有一点不太明白的就是,热更下来的manifest文件不是也在缓存目录下吗?那为什么版本号能更上去,但是资源却没有正确引用到呢?