首页 > 解决方案 > 在 XCode for Unity3D 中构建向后兼容的 macOS 包

问题描述

我有一个关于在 XCode 中为 Unity3D 构建插件包的问题。

我正在实现一个访问 Apple 新 GameController API 的插件,其中的一部分仅适用于 macOS 11 及更高版本。

捆绑包的部署目标设置为 10.15,因此插件仍然适用于 macOS 10.15 构建,并且查询 GameController 信息的代码部分使用 Objective-C 的 @available 检查进行包装:

if(@available(macOS 11.0, iOS 14.0, tvOS 14.0, *))
{
    ...
}

但是,由于某种原因,在使用 10.15 的部署目标时,无论使用在 macOS 11 平台上运行的 Unity 项目中的插件,此表达式总是显示为“假”。(当我将部署目标设置为 11 时,代码会再次执行,但 Unity 在 macOS 10.15 上运行时无法导入包)。

我的问题是这是否是构建向后兼容的捆绑包的正确方法。我知道@available 是版本的运行时检查,但我不确定这是否仍然适用于捆绑包。

编辑:

在此之后,我在一个新的 Objective-C 应用程序中运行了一个测试,该应用程序在运行时导入一个包并通过 Apple 的等效 DLL 导入调用一个函数。捆绑包和应用程序都使用 10.15 作为部署目标构建。运行应用程序的操作系统是 11 Beta (Big Sur)。@available 检查正确检测到操作系统版本为 11:http ://img.desu.link/?i=z5KW8IJCk1.png

然后,我将相同的包导入到在同一操作系统上运行的 Unity 项目中,并通过具有 DllImport 属性的 extern 方法从 C# 调用相同的方法,但在这种情况下,包内的 @available 检查失败:http://img.desu .link/?i=DDZ9yCtG4V.png

标签: xcodemacosunity3d

解决方案


如果应用程序链接到 10.15 或更早版本的 SDK,则 macOS Big Sur 似乎将其版本报告为 10.16。我使用的 Unity 版本是使用 macOS 10.14 SDK 构建的,因此检查失败。

在 @available 检查中检查 10.16 可解决此问题。

https://eclecticlight.co/2020/07/21/big-sur-is-both-10-16-and-11-0-its-official/


推荐阅读