Unity 之 发布Mac报错il2cppcore.dll did not run propertly

一,遇到问题

Unity 发布Mac卡在Building native binary with IL2CPP,翻译为:使用IL2CPP构建本机二进制文件

Unity 之 发布Mac报错il2cppcore.dll did not run propertly

停一会之后,报错信息如下:
Exception: /Applications/Unity/Hub/Editor/2019.4.13f1c1/Unity.app/Contents/il2cpp/build/deploy/il2cppcore/il2cppcore.dll did not run properly!

Unity 之 发布Mac报错il2cppcore.dll did not run propertly


二,尝试解决

2.1 方案一:打包Mono

在PlayerSettings面板 --> Player --> OtherSettings 下 Scripting Backend设置为Mono:
Unity 之 发布Mac报错il2cppcore.dll did not run propertly

结果:Mono模式下可以正常打包。

2.2 方案二:删除引用库

由于我之前在IL2CPP模式下打过包,没有问题;然后我又用出问题的Unity版本创建了新工程,也设置为IL2CPP模式打包也没问题。

所以我认为是引用了外部插件导致的,于是开始一个一个进行删除,打包测试。

结果:删除了内购相关库,可以正常打出包来

2.3 方案三:添加模块

刚好一个同学在Windows打包时也遇到了这个问题,他的解决方法是:在VS中添加Desktop development with c++ 这个模块,然后就可以打出包了

Unity 之 发布Mac报错il2cppcore.dll did not run propertly

由于系统不同,Mac的VS只有这种,并没有Windows上那些模块...
Unity 之 发布Mac报错il2cppcore.dll did not run propertly

我又试着在VS Code中去查找这个模块,结果VS Code连接不上商店,又要去解决连接插件商店的问题,最后无疾而终...


三,定位问题

废了半天劲问题也没有进展,没办法只能请教公司大佬了,大佬咨询了问题现象后,决定查看Editor Log,结果日志还真的有问题,由于il2cpp下面的各种.o文件太多了,他们占据了一中的报错日志的全部内容,而把最关键的问题,给掩盖掉了。

打开编辑器日志:
Unity 之 发布Mac报错il2cppcore.dll did not run propertly

编辑器日志报错:GetAgeByIDCard是方法名,RealNamePanel是类名,一下就定位到问题代码出现在哪里了。右侧可以看到il2cpp下面的各种.o相关日志,真的是太多了...
Unity 之 发布Mac报错il2cppcore.dll did not run propertly


四,解决问题

既然是定位到问题了,那么久好解决了。

问题原因:代码中调用的IOS代码,没有添加宏定义进行区分。

解法办法:添加IOS平台宏定义,使其对其他平台逻辑不产生影响。

导致报错代码:
Unity 之 发布Mac报错il2cppcore.dll did not run propertly

修改后代码:
Unity 之 发布Mac报错il2cppcore.dll did not run propertly


五,问题反思

反思导致问题原因:其实稍微有点经验的开发者,在区分多平台的时候,都会自然而然的使用宏定义。我这里使用 if (Application.platform == RuntimePlatform.IPhonePlayer) 这种形式区分平台的原因是为了在代码中可以查看到引用,方便查找调用,也为了避免误删无引用代码... 结果有一种聪明反被聪明误的感觉... ...

不过通过这次问题,有学会了一招打包报错时查看Editor Log,之前只有在查看打包资源占用大小时查看过,没有打包失败查看编辑器日志的习惯,这次算是学会了~

本文解决你的问题了吗?若你遇到的问题有其他的解决方案,欢迎你在评论区分享出来。

上一篇:《Python参考手册(第4版•修订版)》——2.7 文档字符串


下一篇:两周撸一个掘金微信小程序