xcode - 在 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
解决方案
如果应用程序链接到 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/
推荐阅读
- android - 应用程序打开时带有 DrawerLayout 的应用程序崩溃
- excel - 用户窗体和选择单元格值
- python-3.x - Youtube-dl 模块,中断时获取部分文件而不是 mp4 文件
- javascript - Css 动画在第一次触发后运行 2 次
- ravendb - RavenDB OnBeforeStore 不使用 BulkInsert 触发
- reactjs - 当客户端浏览器中唯一的东西是 AuthToken 时,如何从数据库中获取用户信息?
- javascript - 有没有办法在javascript中围绕“整个”和“仅”跨度绘制边框?
- node.js - 尝试解析模块“@react-native-community/google-signin”时出错
- python - 如何修复我的代码中有关导入的错误
- reactjs - firebase SSR 问题,弹出“应用程序请求访问您的 google 帐户的权限”而不是网站