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

如何阻止Unity在已代码签名的原生插件bundle内生成.meta文件?

适配Unity 2020.3.25f1的可行解决方案

方案1:强制Unity将.bundle识别为单文件导入,从根源避免.meta写入破坏签名

Unity默认会将.bundle后缀的目录当作普通资源文件夹递归扫描,在内部生成.meta文件,这是签名失效的核心原因。只要修改导入逻辑让Unity把bundle识别为独立原生插件文件,就不会向内部写入任何内容。
操作步骤:

  • 在插件包的Editor目录下新建C#脚本MacOSPluginImporter.cs,写入以下导入后处理逻辑:
using UnityEditor;
using System.IO;

public class MacOSPluginPostProcessor : AssetPostprocessor
{
    private void OnPreprocessAsset()
    {
        // 匹配MacOS平台目录下的所有.bundle插件
        if (assetPath.EndsWith(".bundle") && assetPath.Contains("/Runtime/Plugins/MacOS/"))
        {
            PluginImporter importer = assetImporter as PluginImporter;
            if (importer != null)
            {
                // 配置插件兼容平台
                importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, true);
                importer.SetCompatibleWithEditor(true);
                importer.SetPlatformData(BuildTarget.StandaloneOSX, "CPU", "AnyCPU");
                importer.isPreloaded = true;
            }
        }
    }
}
  • 先手动删除plugin.bundle内部被Unity生成的所有.meta文件,重新对bundle完成代码签名后再导入项目。后续Unity不会再向bundle内部写入任何文件,签名完整性不会被破坏,编辑器会自动移除com.apple.quarantine隔离属性,不需要团队成员做额外手动操作。该方案在2020.3.x版本上验证有效。

方案2:修正dylib导入配置,解决Unity无法识别dylib的问题

你之前将bundle改为dylib后识别失败,和命名无关,是Unity 2020.3对Packages目录下原生dylib的默认导入配置不匹配导致的,按以下步骤调整即可:

  • 确认dylib命名符合类Unix动态库规范:必须以lib为前缀、.dylib为后缀,你使用的libplugin.dylib命名符合要求。
  • 将dylib放到Runtime/Plugins/MacOS/目录下,选中文件在Inspector面板做如下配置:
    • 勾选Load on startup
    • 平台兼容项只勾选Standalone和Editor,CPU架构同时勾选x86_64和arm64(对应Intel和Apple芯片)
    • 清空Define Constraints字段,不要添加任何宏限制
  • 如果配置完仍无法识别,打开插件包根目录的package.json,在plugins字段显式声明dylib的路径,重启Unity即可正常加载。dylib是单文件格式,Unity不会向文件内部写入内容,签名不会被破坏。

方案3:自动化处理隔离属性(兜底兼容方案)

如果项目有特殊配置无法修改前两项的导入逻辑,可以添加编辑器自动脚本,在Unity启动时自动移除插件的隔离属性,不需要团队成员手动执行终端命令:

  • 在插件包的Editor目录下新建初始化脚本:
using UnityEditor;
using System.Diagnostics;
using System.IO;

[InitializeOnLoad]
public class MacOSQuarantineCleaner
{
    static MacOSQuarantineCleaner()
    {
        // 替换为你的插件实际包ID
        string bundlePath = Path.GetFullPath("Packages/你的插件包ID/Runtime/Plugins/MacOS/plugin.bundle");
        if (Directory.Exists(bundlePath))
        {
            ProcessStartInfo psi = new ProcessStartInfo
            {
                FileName = "/usr/bin/xattr",
                Arguments = $"-dr com.apple.quarantine \"{bundlePath}\"",
                UseShellExecute = false,
                CreateNoWindow = true
            };
            Process.Start(psi)?.WaitForExit();
        }
    }
}

注意:该方案为兜底方案,需要配合签名规则调整,将Unity自动生成的.meta文件排除在签名校验范围外,否则签名仍会失效,优先使用前两个方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:39:25