Cocos Creator 和 Colyseus 在 iOS 工程里的集成问题

  • Creator 版本:3.8.2

  • Colyseus 是 0.15.15

  • 目标平台: iOS 17.2

  • Xcode:Version 15.2 (15C500b)

  • 重现方式:

  1. 用 Creator 创建空的 2D 工程,
  2. 然后按照 Colyseus 指南, https://docs.colyseus.io/getting-started/cocos-creator/ ,手动或者自定引入 Colyseus-SDK
  3. 在 Createor 里使用菜单 project -> build. 创建 iOS 项目
  4. 在模拟器/真机上运行 此 iOS 项目
  5. 控制台报错
  • 首个报错:
17:28:13 [ERROR]: JS: TypeError: Cannot read properties of undefined (reading 'toLowerCase')
TypeError: Cannot read properties of undefined (reading 'toLowerCase')
    at new <anonymous> (jsb-adapter/web-adapter.js:350:35)
    at new Client (assets/main/index.js:5102:27)
    at NetworkManager.start (assets/main/index.js:11270:25)
    at eval (eval at createInvokeImplJit (src/cocos-js/cc.js:31426:63), <anonymous>:3:65)
    at OneOffInvoker._invoke (src/cocos-js/cc.js:31433:13)
    at OneOffInvoker.invoke (src/cocos-js/cc.js:31379:16)
    at ComponentScheduler.startPhase (src/cocos-js/cc.js:31540:29)
    at Director.tick (src/cocos-js/cc.js:35648:35)
    at Game._updateCallback (src/cocos-js/cc.js:36730:22)
    at src/cocos-js/cc.js:35790:20
  • 重现概率:毕现

我使用这两个框架已经写了一个很大的游戏,可以在浏览器中运行。今天尝试移植到 iOS 平台,出现上述报错。
我尝试修改了 web-adapter.js 的代码,上述错误不再出现。但是下一个错误是

FormData 找不到定义

,看代码是 Colyseus 的封装代码。因为 Colyseus 用的是 CommonJS 规范,FormData 没有被导入。我使用的是 Colyseus 是 0.15.15,已经是为 Cocos-creator 定制过的版本。

然后我重新创建了干净的项目,还是会报错,请问双方官方确认可以在 iOS 上运行吗?

发现和 Colyseus 关系不大,我没用 ColySeus,用 JS 原生的 WebSocket ,也会报错

TypeError: WebSocket is not a constructor
TypeError: WebSocket is not a constructor
    at NetworkManager.start (assets/main/index.js:11270:26)
    at eval (eval at createInvokeImplJit (src/cocos-js/cc.js:31426:63), <anonymous>:3:65)
    at OneOffInvoker._invoke (src/cocos-js/cc.js:31433:13)
    at OneOffInvoker.invoke (src/cocos-js/cc.js:31379:16)
    at ComponentScheduler.startPhase (src/cocos-js/cc.js:31540:29)
    at Director.tick (src/cocos-js/cc.js:35648:35)
    at Game._updateCallback (src/cocos-js/cc.js:36730:22)
    at src/cocos-js/cc.js:35790:20
    at tick (jsb-adapter/web-adapter.js:551:7)

所以问题是:Cocos 在 iOS 里的JS 运行环境是什么?明显不是原生的 WebKit,因为在 Safari 的开发工具里也看不到 debug target。
iOS 的运行环境不支持 Blob,也不支持 WebSocket,为何?

读了下代码,iOS 用 V8 执行的 js 代码,也不是 JavascriptCore,这点解答了 JS 运行环境的问题,明天试试 Cocos 工程里加入 Websocket 支持会不会变好。但是不管是 Cocos 还是 Colyseus 的教程里,按步骤生成的工程无法工作,始终是个问题,尤其对新手而言

project settings 里填入 websocket 后,不会报错了。

WebSocket is not a constructor
2赞