macOS 提示「已损坏,无法打开」或「无法验证开发者」怎么办
在 Mac 上安装 Clash Verge Rev、ClashX Meta、sing-box 等客户端时,系统弹出「已损坏,无法打开。您应该将它移到废纸篓」或「无法验证开发者」。本文解释 Gatekeeper 的工作原理,给出系统设置和 xattr 命令两种处理方法,说明 Apple 芯片的额外步骤,以及什么情况下不应该绕过这个提示。
这个提示到底在说什么
macOS 有一套叫 Gatekeeper 的机制:从网络下载的文件会被打上一个 com.apple.quarantine 的隔离标记,第一次打开时系统检查它的签名和公证状态。
- 开发者用 Apple 开发者证书签名并提交 Apple 公证(Notarization)的应用:直接打开。
- 有签名但没公证:提示「无法验证开发者」,可以在设置里放行。
- 没签名、签名无效、或签名用的是自签证书:提示「已损坏,无法打开。您应该将它移到废纸篓」。
代理客户端大多是个人或小团队维护的开源项目,一年 99 美元的开发者账号加上公证流程对他们来说是负担,加上这类软件本身的性质,很多项目选择不签名或只做 ad-hoc 签名。所以「已损坏」在这类软件上几乎是常态,不代表文件真的损坏。
方法一:系统设置里允许
适用于「无法验证开发者」,部分「已损坏」也能用这个方法。
- 双击打开应用,弹窗出现后点「完成」(不要点「移到废纸篓」)。
- 打开「系统设置 → 隐私与安全性」,往下滚到「安全性」区域。
- 会看到一行「已阻止使用 xxx,因为来自身份不明的开发者」,右边有「仍要打开」按钮,点它。
- 输入密码或 Touch ID 确认,应用就能打开了。以后不会再问。
macOS 15 Sequoia 及之后,系统移除了右键「打开」绕过的方式,必须走这个设置页面。macOS 13 / 14 还可以在 Finder 里右键应用 → 「打开」,弹窗里直接选「打开」。
如果设置页面里根本没有出现这一行,说明系统判定是「已损坏」而不是「身份不明」,用方法二。
方法二:xattr 命令
这是最通用的方法,对「已损坏」有效。
- 把应用拖进「应用程序」文件夹。
- 打开「终端」(启动台搜索 Terminal)。
- 输入下面的命令并回车(把应用名换成实际名字,名字里有空格要用引号包起来):
sudo xattr -cr /Applications/Clash\ Verge.app
或者更稳妥的写法,先输入 sudo xattr -cr 加一个空格,然后把应用图标从 Finder 拖进终端窗口,路径会自动填上,回车。
- 输入密码(输入时不显示字符,输完回车)。
- 再双击应用打开。
命令解释:xattr 管理文件的扩展属性,-c 清除所有扩展属性,-r 递归处理包内所有文件。它只是去掉系统打的下载隔离标记,不改动应用本身的内容。如果只想删隔离标记而不动其他属性,可以用 sudo xattr -dr com.apple.quarantine /Applications/xxx.app。
常见客户端的应用名:Clash Verge.app、ClashX Meta.app、Mihomo Party.app、FlClash.app、GUI.for.SingBox.app、Surge.app(Surge 有正式签名,一般不会遇到)。
Apple 芯片的额外一步
M 系列芯片的 Mac 对无效签名更严格。xattr 之后仍然提示「已损坏」或者直接闪退,再执行一次本地签名:
sudo codesign --force --deep --sign - /Applications/Clash\ Verge.app
--sign - 表示用临时的 ad-hoc 签名替换原签名,让系统认为这个应用的签名至少是完整的。签完再打开。
部分应用(比如用 Electron 或 Tauri 构建的)签名后首次启动会慢几秒,是正常现象。
和 TUN 模式有关的权限提示
通过了 Gatekeeper 后,客户端开启 TUN 模式时还会遇到另外两类提示,和「已损坏」是两回事:
- 「xxx 想要安装系统扩展 / 网络扩展」:到「系统设置 → 隐私与安全性」允许,可能需要重启。
- 要求输入管理员密码安装辅助工具或服务:Clash Verge Rev 的服务模式、ClashX Meta 的 helper 都需要这一步。
这些是正常的权限申请,TUN 本来就要操作系统网络栈。拒绝了就只能用系统代理模式。TUN 的问题见 TUN 模式问题。
什么时候不该绕过
Gatekeeper 的存在是有意义的。绕过它意味着系统不再替你检查这个文件,判断全部交给你自己。以下情况请停下来:
- 下载来源不是项目官方 GitHub Releases。搜索引擎排在前面的「Clash 下载站」、网盘链接、群文件、机场客服发来的安装包,都有被二次打包的可能。macOS 上出现过多起通过修改版代理客户端植入恶意软件的事件。
- 文件哈希和官方发布的对不上。GitHub Releases 一般附有 SHA256,终端里
shasum -a 256 文件名比对一下。 - 提示和你预期的不一致。比如一个官网声明已签名公证的应用(Surge、Stash 等)却提示已损坏,大概率文件被篡改或下载不完整。
- 系统提示里出现「恶意软件」字样。macOS 的 XProtect 检测到已知恶意特征时的提示和 Gatekeeper 的「已损坏」措辞不同,前者不要绕过。
下载来源的判断方法见客户端下载安全指南。
其他容易和「已损坏」混在一起的情况
- 架构选错。Releases 里通常同时提供
aarch64/arm64(Apple 芯片)和x64/x86_64(Intel)两个包。Apple 芯片的 Mac 装了 Intel 包,系统会通过 Rosetta 运行,一般能开但偶尔报「已损坏」或闪退;Intel 的 Mac 装了 arm64 包则直接提示「无法打开」。点左上角苹果菜单 →「关于本机」看芯片型号,重新下载对应版本。 - 在 dmg 挂载的窗口里直接双击运行。应用还在只读镜像里,没有拷进「应用程序」,xattr 和签名都做不了,有的客户端还会因为无法写入数据目录而闪退。先拖进应用程序文件夹再处理。
- 用 Homebrew 安装。
brew install --cask clash-verge-rev一类命令安装的应用,Homebrew 会在安装时处理隔离标记,一般不会遇到这个提示;遇到了用brew reinstall --cask重装,或者按上面的 xattr 方法处理同一个路径。 - 系统升级后重新出现。大版本升级(比如升到 macOS 15)后 Gatekeeper 策略会刷新,之前放行过的应用可能再次提示,重做一次方法一或方法二即可。
- 下载不完整。文件大小明显小于 Releases 页面标注的,是下载中断了,xattr 也救不了,重新下载。
一次性关闭 Gatekeeper 的做法不推荐
网上流传 sudo spctl --master-disable 打开「任何来源」选项。它对所有应用生效,相当于关掉整台电脑的检查。只为一个客户端这么做不值得,而且 macOS 15 后该选项的行为也变了。针对单个应用用 xattr 处理,影响范围最小。
处理顺序
| 提示 | 第一步 | 第二步 |
|---|---|---|
| 无法验证开发者 | 隐私与安全性 → 仍要打开 | — |
| 已损坏,无法打开 | sudo xattr -cr | Apple 芯片再 codesign --sign - |
| 处理后仍闪退 | 重新从 GitHub 下载 | 确认架构(Apple 芯片 / Intel)选对 |
| 想安装系统扩展 | 隐私与安全性里允许 | 按提示重启 |
相关
macOS 客户端推荐 · ClashX Meta 教程 · Clash Verge Rev 教程
常见问题
「已损坏,无法打开」是文件真的坏了吗?
大多数情况不是。这是 macOS Gatekeeper 对没有经过 Apple 公证的应用的统一提示。从项目 GitHub 下载的开源客户端很多都没公证,都会弹这个。
xattr -cr 命令做了什么?
清除应用包上的扩展属性,其中包括下载时系统打的 com.apple.quarantine 隔离标记。清掉之后 Gatekeeper 不再把它当成刚下载的文件检查。
「无法验证开发者」和「已损坏」有什么区别?
「无法验证开发者」是有签名但没公证,可以在隐私与安全性里点「仍要打开」。「已损坏」是没签名或签名无效,一般只能用 xattr 处理。
Apple 芯片的 Mac 还要额外做什么?
部分未签名应用在 Apple 芯片上需要重新本地签名:xattr 之后再运行 codesign --force --deep --sign - 应用路径。
什么时候不该绕过这个提示?
下载来源不是项目官方仓库时。绕过 Gatekeeper 等于放弃系统最后一道检查,只对自己确认过来源的文件做。
本文为信息整理与个人经验,不构成购买建议。机场政策与软件界面可能变化,以官方为准。发现过期内容请 联系纠错。