M1/M2 Mac 安装未签名软件显示文件已损坏的特殊处理步骤
详细讲解 M1/M2 等 Apple Silicon 芯片 Mac 在安装未签名或第三方修改软件时弹出「文件已损坏,你应该将它移到废纸篓」的原因与特殊处理步骤,包含 xattr 属性清理与 codesign 本地重签名完整实操。
在搭载 M1/M2 等 Apple Silicon 芯片的 Mac 电脑上,安装网络下载的未签名或修改版应用程序时,系统常会弹出“「XXX」已损坏,无法打开。你应该将它移到废纸篓”的警告提示。解决这一问题的核心路径在于两步:先使用终端清理下载隔离扩展属性(Quarantine),再针对 ARM64 架构强制进行本地 Ad-Hoc 伪签名。
一、问题根源:为什么 M1/M2 会出现特殊损坏提示?
在 Intel 架构的老款 Mac 上,遇到非 App Store 来源的软件提示损坏,通常只需要在系统设置中允许“任何来源”,或者通过终端命令移除下载属性即可解决。然而在采用 Apple Silicon(包括 M1、M2 及后续 M 系列芯片)的 Mac 上,即使用户已经开启了“任何来源”,许多未签名或修改过的应用程序仍然会坚决提示“文件已损坏”。
这是由 macOS 针对 ARM64 原生架构引入的更严苛的安全执行机制造成的:
- 第一道拦截:Gatekeeper 隔离标记(Quarantine)。所有通过浏览器、网盘或即时通讯工具下载的文件,都会被系统打上名为
com.apple.quarantine的扩展属性。只要该标记存在,macOS 就会对文件进行全面安全审查。 - 第二道拦截:ARM64 原生二进制的强制代码签名要求。在 Apple Silicon 芯片上,系统内核直接对 ARM64 架构的可执行文件实施了强制签名校验。如果一个软件被第三方修改过内部二进制(破坏了原有的开发者签名),或者本身完全没有签名,内核在装载运行时便会判定代码完整性校验失败,直接触发
SIGKILL终止进程,并向用户展示通用的“文件已损坏”对话框。
二、常见认知误区辨析
在终端中运行 sudo spctl --master-disable 可以调出系统设置里的“任何来源”选项,但这仅代表关闭了部分 Gatekeeper 的强行拦截,并不能替代 ARM64 架构下系统内核对有效代码签名的物理性要求。若二进制的哈希校验值与签名头不一致,ARM64 内核依然拒绝加载。因此,单纯依赖“任何来源”在 M1/M2 上往往无济于事。
三、故障排查与决策路径
面对损坏提示,不应盲目重复下载。按照标准化流程逐步排查,可以精准确定是属性拦截还是签名失效。
四、特殊处理完整操作步骤
准备工作:确保安装 Command Line Tools 命令行工具
进行重签名需要依赖系统提供的 codesign 工具链。通常 macOS 默认自带该程序,但如果系统缺失基础开发者工具组件,重签名可能会报错。在终端中执行以下命令进行检查:
xcode-select --install
如果系统弹出提示窗口,按照提示点击“安装”并等待几分钟完成即可;如果终端返回 xcode-select: error: command line tools are already installed,说明工具已完整就绪,可直接进入下一步。
步骤一:彻底清除下载隔离属性(xattr)
将有问题的应用程序移入 /Applications(应用程序) 文件夹。打开“终端”(可通过聚焦搜索 Spotlight 键入 Terminal 打开),输入以下命令:
sudo xattr -r -d com.apple.quarantine /Applications/TargetApp.app
操作说明:
- 将命令末尾的
/Applications/TargetApp.app替换为你的目标应用名称。最便捷的方法是输入完sudo xattr -r -d com.apple.quarantine(注意最后有一个空格)后,直接从访达中将该软件拖拽进终端窗口,终端会自动补全完整路径。 - 按下回车键后,终端会提示输入开机密码(Password:)。输入密码时屏幕不会显示任何字符或星号,这是正常的安全保护,直接盲输完毕并敲击回车即可。
- 参数
-r表示递归处理应用包内的所有内联插件与动态库,-d表示删除对应的隔离属性。
步骤二:对应用进行本地强制深度重签名(codesign)
如果清除隔离属性后双击依然弹窗报错,说明该应用属于未签名或签名已被修改损坏的情况,必须在此步通过 Ad-Hoc 本地伪签名 重建代码签名结构。在终端中执行:
sudo codesign --force --deep --sign - /Applications/TargetApp.app
参数含义与注意事项:
--force:强制覆盖应用原本残留的、无效的旧签名。--deep:递归进入Contents/Frameworks及Contents/MacOS等子目录,为所有内嵌的 dylib 动态链接库与可执行模块同步签名。--sign -:核心参数。连字符-代表采用本地 Ad-Hoc 签名(即自签名),无需 Apple 开发者证书即可生成符合 ARM64 内核规范的签名结构。- 同样支持直接把应用图标拖入终端替换最后的路径。
五、进阶异常排查:重签名后依然无法启动的处理方案
极少数情况下,在完成上述两步后,软件可能不再弹出“已损坏”,但会出现点击后图标闪跳一下直接退出(闪退),或者终端重签名时报错。针对这些边界情况,可采用以下方法逐一化解:
1. 报错:replacing existing signature 失败或只读错误
如果提示 Permission denied 或 read-only file system,说明该应用文件正处于挂载的 DMG 镜像中,或者文件权限只读。务必确认已经将应用从 DMG 镜像中完整拷贝到了系统的“应用程序”文件夹中,不要直接在挂载磁盘镜像中执行重签名。
2. 软件图标闪退:检查可执行文件的运行权限
部分打包不规范的开源软件或跨平台打包产物,在解压后丢失了内部二进制的 +x 可执行权限。可以执行以下命令补齐权限:
sudo chmod -R +x /Applications/TargetApp.app/Contents/MacOS/
3. 架构不匹配:缺少 Rosetta 2 转译环境
如果软件是老旧的纯 Intel(x86_64)架构应用,且当前 M1/M2 设备是全新重置的系统,尚未安装 Rosetta 2 转译支持库,打开该软件也会出现假死或异常崩溃。在终端中运行以下命令安装官方转译环境:
softwareupdate --install-rosetta --agree-to-license
六、核心要点总结与注意事项
| 处理手段 | 主要作用 | 适用场景与局限 |
|---|---|---|
xattr -r -d com.apple.quarantine |
移除浏览下载引入的安全沙箱标记 | 解决仅因 Gatekeeper 策略拦截的正规应用;对修改过签名的应用单独使用无效 |
codesign --force --deep --sign - |
强制赋予本地 Ad-Hoc 签名结构 | M1/M2 关键步骤;解决 ARM64 内核对二进制有效签名的强制检查 |
chmod -R +x .../MacOS/ |
补全主程序与子进程的可执行权限 | 针对解压过程中丢失 POSIX 执行权限导致的无提示闪退 |
softwareupdate --install-rosetta |
安装 Intel 架构转译运行环境 | 针对未适配 Apple Silicon 的旧版 x86_64 专用应用程序 |
通过上述对隔离属性的精准剥离与基于本地环境的 Ad-Hoc 深度重签名,M1/M2 Mac 上的“文件已损坏”问题即可在不破坏系统安全沙箱机制的前提下得到稳妥解决。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









