Version: 2022.3
Deep linking for macOS
Build and distribute a macOS application

Use IL2CPP with macOS

Describes the use of plug-ins for macOS applications using Intermediate Language To C++ (IL2CPP).

IL2CPP is a fully supported scripting back end that you can use as an alternative to Mono when building projects for macOS Player.

When you use IL2CPP to build a project, Unity converts Intermediate Language (IL) code from scripts and assemblies to C++ before creating a native binary. Refer to IL2CPP for more information.

C++ source code plug-ins for IL2CPP

You can add C++ (.cpp) code files directly into a Unity Project when using the IL2CPP scripting back end. These C++ files act as plug-ins within the Inspector. If you configure the C++ files to be compatible with macOS Player, Unity compiles them together with C++ code that gets generated from managed assemblies. Refer to Import and configure plug-ins for more information on plug-in configuration.

Generated C++ code links the functions together, removing the need for a separate Dynamic Link Library (DLL). Instead of using the DLL name, use the "__Internal" keyword to make the C++ linker responsible for resolving functions rather than loading them at runtime. For example:

[DllImport("__Internal")]
private static extern int
CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);

可在 NativeFunctions.cpp 中定义此类函数,如下所示:

extern "C" __declspec(dllexport) int __stdcall CountLettersInString(wchar_t* str)
{
    int length = 0;
    while (*str++ != nullptr)
        length++;
    return length;
}

When the linker resolves the function call, errors in the function declaration on the managed side result in a linker error rather than a runtime error. This means that no dynamic loading needs to happen during runtime, with the function called directly from C#. This decreases the performance overhead of a P/Invoke call.

其他资源

Deep linking for macOS
Build and distribute a macOS application