[0]native初始化的时候getExePath报错 IOS17.2(beta版本)必现

exception info: [TypeError: Can't declare global function 'getExePath': property must be either configurable or both writable and enumerable] at line undefined
已邀请:

ant♑️

赞同来自: layabox

Layanative 1,我找他们技术解决了,替换libconch.a

匿名用户

赞同来自: loew

看了源码,问题大概在这个逻辑片段 (LayaNative2.0/Conch/source/conch/JCScriptRuntime.cpp)
JSGlobalExportC();
    //设置js的一些环境。必须在所有导出之后,执行其他脚本之前。
#ifndef WIN32
    JSP_RUN_SCRIPT((const char*)"function getExePath(){return null;}");
#endif
 
JSGlobalExportC();
JSP_ADD_GLOBAL_FUNCTION(getExePath, getExePath);
上面函数逻辑中已经定义了js全局函数getExePath,并且属性是kJSPropertyAttributeReadOnly
 
#ifndef WIN32
    JSP_RUN_SCRIPT((const char*)"function getExePath(){return null;}");
#endif
 
但接下来,又通过执行js重新定义这个全局函数,可能是iOS 17.2新系统有调整,ReadOnly状态不再允许这样重复定义js函数,导致的异常
 
1、临时的解决办法是注释掉了这一句代码,重新编译引擎
//JSP_RUN_SCRIPT((const char*)"function getExePath(){return null;}");
 
本人只测了iOS平台,其他平台未作测试,不确定具体影响,仅供技术参考
 
方案2、保留原来的代码,换了个写法
#ifndef WIN32
#ifdef __APPLE__
        JSP_RUN_SCRIPT((const char*)"var getExePath=getExePath||function(){return null;}");
#else
        JSP_RUN_SCRIPT((const char*)"function getExePath(){return null;}");
#endif
#endif

devx

赞同来自: layabox

联系官方,很快就给解决了。 具体是 报你们是用的版本 比如我们的是2.8.0。然后官方会重新给你编译一个libconch.a 文件。替换原本工程中的即可,然后记得clean一下工程,让新库生效

devx

赞同来自: layabox

附上2.8 可用的替换版本。

过客

赞同来自:

你好,请问你解决这个问题了吗,我们iOS17.2正式版遇到这个问题了

小小射下

赞同来自:

同问 这要怎么解决呢

qqqq

赞同来自:

同问,请问下解决了吗

何东

赞同来自:

我是LAYA 1.8.14 搜索不到 libconch.a 啊

七分度的微笑

赞同来自:

有2.4.0对应的修复版本吗?

七分度的微笑

赞同来自:

有2.4.0版本的.a文件吗?

何东

赞同来自:

IOS17.4已经解决,无需升级,哈哈哈

要回复问题请先

商务合作
商务合作