无法使用 il2cpp 和 Unity link iOS 项目

Can't link iOS project with il2cpp and Unity

你们中有人知道我的项目发生了什么吗?

出现这个错误:

ld:未找到体系结构 arm64 的符号

Unity播放器设置是这样的:

IL2CPP 是唯一支持在 iOS 上部署到 ARM 64 位的脚本后端,因此必须部署到 Apple 应用商店以发布新应用。

There iOS 64 bit Upgrade guide provided by Unity 表示

如何在 iOS

上开始使用 IL2CPP

在播放器设置的脚本后端下拉菜单中选择它。

默认情况下,它将针对通用架构(包括 ARM64 和 ARMv7)构建,如果需要,您可以在播放器设置中切换到特定架构。在您的应用程序启动和 64 位 运行 之前,应该做很多事情:

  • 您需要支持 64 位的设备才能进行测试。这些都是 iOS 台设备 使用 A7 或更高版本的芯片(目前这些是:iPhone 5S,iPad Air,iPad Mini Retina,iPhone 6,iPhone 6 Plus,iPad Mini 3,iPad Air 2)。
  • 您需要编译所有本机插件以支持 64 位 (或作为源代码提供)。如果您使用的是 3rd 方插件, 你应该联系你的插件供应商以获得 64 位能力和 该插件的 IL2CPP 兼容版本。目前所有最新 众所周知,Prime31 插件很好。
  • 如果您是插件供应商或只有自己的原生插件 那么你需要记住几件事:

(1) IL2CPP 与 Mono Runtime API 不 API 兼容(未公开),这意味着如果插件正在使用 mono_ * 功能将不再 link。解决此问题的最佳方法是切换到托管 delegate/callback 方法并将托管回调传递到插件的本机端,并在某些本机数据或事件到达时从那里回调它们。

(2) 所有作为预编译静态库(.a 文件)的插件现在都应该包含 ARM64 slice。

(3) 在进行本机 code/type 转换时请记住,指针和长整型现在是 64 位宽,而整型仍然是 32 位宽。

  • 为了尽量减少生成的 C++ 代码量,IL2CPP 始终(即使在 剥离级别设置为禁用)执行某种托管代码 剥离。有时你需要帮助它。寻找 link.xml iOS 播放器大小优化手册中的指南。

疑难解答

  1. 问: 我的代码在 IL2CPP 上 运行 比在 Mono 上慢。为什么? 答: 确保您在 Xcode 版本中测试您的代码性能 配置。如果问题仍然存在,请提交错误报告!
  2. Q: Unity 生成的 Xcode 项目编译失败,或者 类似错误:找不到方法:'默认构造函数不存在 找到...System.ComponentModel.Int64Converter' 的 ctor()。 甲: 反序列化器和序列化器通常仅通过以下方式引用某些类型 .NET 反射 API,在这种情况下,这些方法甚至 classes 可能会从项目中剥离。您可以提示托管代码剥离器 该特定 class / 方法通过 link.xml 或通过 引入在其中一个中明确引用它的虚拟代码 你的脚本。
  3. 问:Unity 生成的 Xcode 项目无法与其他项目一起编译 错误。 A: 请验证您的插件是否支持 ARM64 和 IL2CPP 如果是这种情况,请提交错误报告并附上您的 项目(或只是编写其中的一部分)到错误报告中。谢谢!