unity在windows上打包mac

软件:
全方位数据报表
许可分析

许可分析

免费体验
识别闲置、及时回收
许可优化

许可优化

免费体验
多维度智能分析
许可分析

许可分析

免费体验
减少成本、盘活许可
许可优化

许可优化

免费体验

Unity 工程在 Mac 构建时出现 "il2cppcore.dll did not run properly" 报错之解决策略、定位与反思

构建 Unity 项目遇到“发布Mac时,使用IL2CPP构建本机二进制文件之后报错:`il2cppcore.dll did not run properly!`”问题,我们可以通过多个步骤来排查与解决此错误,并借此学会打包程序出错时有效地查看与利用 Editor Log 日志信息。

遇到的问题

当尝试使用 IL2CPP 构建本机二进制文件时,项目在 Unity 发布流程中卡在了预构建阶段,随后根据日志输出,确定是`il2cppcore.dll`未能正常运行。

欢迎浏览: unity在windows上打包mac


尝试解决


方案一:打包 Mono

1. 步骤:通过在 Unity 的 `PlayerSettings` 面板中将 `Scripting Backend` 设置为 `Mono`。

2. 结果:这种设置允许项目的构建过程较为顺畅,无明显报错。


方案二:删除引用库

1. 步骤:鉴于初始项目环境在IL2CPP模式下构建无误,怀疑是引入的外部插件在 Mac 系统中导致了构建失败。

2. 操作:逐一删除可能引发错误的插件库,通过`Developer Tools`进行测试构建,最终发现与内购相关的库移除后问题得到解决。

方案三:添加模块

1. 理论依据:Windows 环境中解决类似问题的方法包括在 Visual Studio 中添加特定模块,因此理论上在 Windows 计算机上将“Desktop development with C++”模块添加进项目,可恢复构建流程。

2. 实践尝试:但因为在 Mac OS 上的开发环境不同,VS 只提供了基础的构建模块,并不能直接适用于此方案。尝试通过VSCode进行探索未果。

定位问题

面对问题难以直接定位,寻求团队内的技术专家求助。对方提议通过查看 Unity 编辑器日志来解析问题的源头。

查看 Editor Log

1. 日志内容:打开编辑器日志后,日志记录了大量的 `il2cpp` 下的.o文件信息,这些信息隐藏了导致问题的关键代码信息。

2. 问题定位:问题最终被定位到代码中调用的 iOS 本地方法 `GetAgeByIDCard` 上,该方法可能未被适当地适配至非 iOS 平台,导致了构建报错。

解决方案


问题原因

1. 宏定义使用不合理:先前通过 `if (Application.platform == RuntimePlatform.IPhonePlayer)` 居然可以用于在代码中区分平台,这种方式在不同的平台下可能无法正常起效,特别是对于调用了特定平台函数的情况。

2. 基本的平台区分:项目中的代码没有适当地添加平台特定的宏,如 `ifdef iPhonePlayer`,或利用更符合多个平台间的记录和区分逻辑。

解决方法

1. 修复代码:对调用 iOS 方法部分的代码添加对应的平台宏定义,确保仅在相应的 iOS 平台上才能执行,其他平台下被禁止或丢弃。例如:

```csharp


ifdef iPhonePlayer

string age = RealNameManager.GetAgeByIDCard();

else


string age = "未指定平台版本";


endif


```

这样确保了对非 iOS 平台而言,与 iOS 相关的流程不会执行,有效避免了构建过程中的异常。

index-foot-banner-pc index-foot-banner-phone

点击一下 免费体验万千客户信任的许可优化平台

与100+大型企业一起,将本增效

与100+大型企业一起,将本增效

申请免费体验 申请免费体验