You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Unity中构建适配Apple TV及macOS的Objective-C原生插件

Unity GameKit插件适配Apple TV/macOS解决方案

首先明确核心问题:

  1. .mm是Objective-C++源码文件,仅iOS/tvOS的Xcode构建流程会自动将配置过的.mm源码编入主二进制,macOS平台不支持直接识别.mm源码作为插件调用。
  2. macOS平台必须将.mm编译为.bundle格式的动态库才能完成运行时动态链接,tvOS可选择源码编译方案无需额外打包动态库。

具体操作步骤

1. 修正C#代码的条件编译逻辑

你之前的DllImport存在两个问题:一是没有做平台区分,二是写法语法错误(属性的方括号需包裹整个声明,不是DllImport["xxx"]),修改后代码如下:

namespace Plugins.GameKit
{
    using System.Runtime.InteropServices;
    public static class GameKitHelper
    {
        // iOS、tvOS平台源码编入主二进制,用__Internal调用
#if UNITY_IOS || UNITY_TVOS
        [DllImport("__Internal")]
        // macOS平台用预编译的bundle名称调用
#elif UNITY_STANDALONE_OSX
        [DllImport("GameKitNativeWrapper")]
#endif
        private static extern bool IOSIsMultiplayerGamingRestricted();

        public static bool IsMultiplayerRestricted()
        {
            if (DeviceHelper.IsAppleDevice())
            {
                return IOSIsMultiplayerGamingRestricted();
            }
            else
            {
                return false;
            }
        }
    }
}

2. 编译macOS平台bundle插件

打开Xcode执行以下操作:

  • 新建项目,选择「macOS > Framework & Library > Bundle」模板,项目名设为GameKitNativeWrapper
  • 把你的GameKitNativeWrapper.mm拖入项目,在Build Phases > Link Binary With Libraries中添加GameKit.framework
  • 在Build Settings > Architectures中设置为Standard Architectures (Apple Silicon, Intel)以兼容所有Mac设备
  • 编译项目,得到GameKitNativeWrapper.bundle文件

3. 配置Unity插件属性

  • 原有.mm文件:在Unity检查器中仅勾选「iOS」「tvOS」平台,取消勾选macOS平台,SDK选择「Any SDK」即可
  • 编译得到的.bundle文件:导入Unity后,在检查器中仅勾选「macOS」平台,CPU架构选择「Universal」

4. 异常排查

如果仍出现DllNotFoundException,检查以下项:

  • 打开bundle的Info.plist,确认CFBundleExecutable字段值和DllImport中的名称完全一致
  • 编译bundle时确认没有编译错误,依赖的GameKit.framework已正确添加
  • macOS构建完成后,右键查看应用包内容,确认bundle已被复制到Contents/Plugins目录下

内容的提问来源于stack exchange,提问作者downstroy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:15:01