https://forum.cocos.org/t/creator-2-1-ios-14/97925
Creator 1.x、2.0、2.1 版本的部分项目,升级到 iOS 14 后可能会在动态加载资源时遭遇黑屏。如果遇到这个问题的话需要手动进行适配。
问题的根源在于,Creator 2.2.0 之前在 iOS 14 上出于性能、包体的考虑一直使用的是 iOS 系统自带 的 JavaScriptCore(JSC)脚本引擎,JSC 在 iOS 上比之前 Cocos2d-JS 所用的 SpiderMonkey 会有一些性能优势。
但是 JSC 的实现并不规范,为了匹配 Creator 的类型系统,我们在引擎编译时做了 workaround,如 1.10 加入的 instanceof shim 6,还有之前的 typeof shim 3。但是 iOS 14 修改了自带的 JSC 的原有行为,使得我们的 typeof 判断跟着出错了。
(从 V8 支持 JIT-less 15 开始,我们也第一时间在 Creator 2.2.0 中把 iOS 上的 JSC 替换成了 V8,因此新版本用户已经没有这些问题了。)
适配方法:
一、打开编辑器安装目录下的 resources/engine/bin/jsb_polyfill.js
文件(Mac 在 Contents/Resources
目录下),替换文件末尾的最后一个函数体,原先代码:
function t(t) {
...
}
替换为:
function t(t) {
return t && t.constructor === Function ? "function" : "object";
}
二、打开同目录下的 jsb_polyfill.dev.js
,同样替换文件末尾的最后一个函数体,原先代码:
function __realTypeOfObj(obj) {
...
}
替换为:
function __realTypeOfObj(obj) {
return obj && obj.constructor === Function ? "function" : "object";
}
替换后重新构建项目即可。构建后请重新在所有目标 iOS 操作系统版本上进行验证,而不仅仅是验证 iOS 14,确保都可以正常运行。
改完请定制js引擎