热更新以后场景更新了但是程序逻辑没更是什么原因?

如题,上传热更新以后,客户端顺利检测到更新并且下载然后重启,但是重启以后,发现场景的布局更新了,但是代码控制的逻辑明显没更新。
请问这是什么原因,平台是IOS

补充一下,IOS构建项目的时候是没有开调试模式的,所以不应该是 jsc的优先级问题

main.js 问题,在function boot(){ 上一行加入

    if (cc.sys.isNative) {
        var hotUpdateSearchPaths = cc.sys.localStorage.getItem('HotUpdateSearchPaths');
        if (hotUpdateSearchPaths) {
            jsb.fileUtils.setSearchPaths(JSON.parse(hotUpdateSearchPaths));
        }
    }

每一次buid都会替换,最好用http://www.cocos.com/docs/creator/publish/custom-project-build-template.html的方式处理。

应该不是这个问题,如果这个没添加的话,那场景也不会更新了。
现在的情况是,只更新了场景,代码逻辑没更新。
我检查了project.manifest,里面包含了src/project.jsc的信息的

遇到相同问题

你是刚遇到 还是一直都有?

对比下 project.manifest 中的 project.jsc 的 md5 字段是不是两个版本不同

两个版本之间,project.jsc的大小和md5都是不同的,而且实际的文件也是大小都不同,所以问题很奇怪。

刚刚测试了一下,android平台下完全没问题,就是ios下,热更新以后只有场景更新了,脚本还是原来的脚本,为了测试,我在脚本里面加了一句表现很明显的代码,热更以后,IOS下仍然没有生效,android下没问题。可能的原因是什么?

关注,最近也在做热更新,明天在IOS上试试有没有这个问题

这样的话可能需要断点到 FileUtils 中,看看获取的绝对路径是否正确,具体要检查的调用栈是:

  1. ScriptingCore::compileScript
  2. futil->getDataFromFile(byteCodePath);
  3. FileUtils: getContents(filename, &d);
  4. fs->fullPathForFilename(filename);

重点是 fullPathForFilename 是否能正确找到热更新下来的脚本路径,而不是包内的脚本路径

今天把热更新写好了,以安卓和IOS上测了一下,都没有问题。

你确认一下服务器上的资源是否是最新的?

上传商店之前我也测试过,不知道为什么就出现这个问题了

我打包的时候也经常出这个问题, 资源都可以更新,但是构建的时候新的JS脚本始终不编译,还是旧的。 后来发现每次编译之前先用模拟器运行一次,再构建,就能把新的JS脚本编译进去了, 奇怪的BUG,一直没弄明白。

构建后最好检查下构建完的脚本,是否包含了你更新的代码, 我很多次就发现,明明代码修改了,但是构建完的JS脚本里根本没有我修改过的代码,也就是新的JS脚本压根没编译,还是旧的。

我这边倒是没这个问题,每次构建,那个project.jsc倒是更新了的

panda大大,我目前遇到了同样的问题,但是我的project.jsc没有更新,大小和md5都是一样的

应该是没有restart()
场景是json,动态读的,不重启没问题
js是在启动时加载进去的,没有重启一切都白搭

楼主,我之前也遇到了这个问题,不是必现,只在ios平台上出现,非常之诡异,我都不知道怎么查。
我的原贴
到现在我都没解决,每次更新,都会有一些用户反馈更新后闪退,也就是脚本报错了。

是不是热更包中变更了路径或localstorage 的key等原因造成的,我曾经变换路径出了问题,更新不全。