为什么会出现这个警告?
macOS 使用名为 Gatekeeper 的安全机制来保护用户免受恶意软件侵害。Gatekeeper 要求从互联网下载的应用使用 Apple Developer 证书签名,并经过 Apple 公证(notarize)。如果应用未能通过这些检查,macOS 可能会拒绝启动它,而它显示的往往就是那句令人不安的「已损坏,无法打开」。
关于 OpenGnothia:当前版本已使用 Apple Developer 证书签名并经过 Apple 公证,因此可以正常打开,不会出现任何警告,也无需额外操作。早期版本曾以未签名方式发布,所以你保留下来的非常旧的安装包仍可能触发该提示。本指南余下内容从通用角度解释这个警告,它适用于任何开发者的、Gatekeeper 无法验证的任何应用。
这个警告并不表示文件真的损坏了,也不表示它含有恶意软件。它只是 macOS 面对一个无法验证签名的应用时给出的标准反应。下载文件确实损坏的情况也存在,但比签名问题少见得多。
什么是 macOS Gatekeeper?
Gatekeeper 是 macOS 内置的安全功能之一。自 macOS Catalina(10.15)以来,安全策略进一步收紧。Gatekeeper 在三个级别上运作:从 App Store 下载的应用(最受信任)、来自已识别开发者的签名应用,以及来自未知来源的应用。
当你从互联网下载文件时,macOS 会向文件添加一个名为 com.apple.quarantine 的特殊属性(扩展属性)。当应用首次打开时,Gatekeeper 会检查这个属性并评估应用程序的可信度。
对于未签名的应用,Gatekeeper 可能显示两种不同的警告:「无法打开 [应用],因为 Apple 无法检查其是否包含恶意软件」或更严重的「[应用] 已损坏,无法打开。你应该将它移到废纸篓。」第二种警告在 macOS Ventura 及更高版本中尤为常见。
解决方案:通过终端移除隔离属性
要解决这个问题,只需移除 macOS 在下载时为文件添加的隔离属性。该操作是安全的,仅清除下载标记,不会修改应用本身。
第 1 步:打开「终端」应用。按 Command + 空格键打开聚焦搜索,输入「Terminal」后按回车。
第 2 步:输入以下命令,将其中的 AppName 替换为应用的实际名称,然后按回车:
xattr -cr /Applications/AppName.app
如果应用仍在「下载」文件夹而不是「应用程序」文件夹中,请把命令指向那里:
xattr -cr ~/Downloads/AppName.app
一个实用技巧:输入「xattr -cr 」并在末尾留一个空格,然后把应用从访达拖入终端窗口。macOS 会为你自动填入准确路径,避免手动输入出错。
第 3 步:执行命令后,正常打开应用即可。macOS 不会再将其视为隔离状态。
这个命令做了什么?
xattr 命令用于管理 macOS 中文件的扩展属性。以下是我们命令中各标志的含义:
-c 标志:清除文件上的所有扩展属性(clear)。这包括 com.apple.quarantine 属性。
-r 标志:将操作也应用于子文件夹(recursive)。一个 .app 文件实际上是一个文件夹结构,所以我们需要清除所有子文件。
这个命令只修改文件属性——它不影响应用程序本身或你的系统设置。使用它是完全安全的。
替代方法:系统设置
如果你不想使用终端,也可以尝试通过 macOS 的「系统设置」来解决,不过这个方法并非总是有效。
第 1 步:尝试打开应用,看到警告后将其关闭。
第 2 步:进入「系统设置」>「隐私与安全性」。
第 3 步:在页面底部,你会看到类似「[应用] 已被阻止使用,因为它来自身份不明的开发者」的提示。点击旁边的「仍要打开」按钮。
第 4 步:会再次弹出确认窗口,点击「打开」。
注意:如果你遇到的是更严厉的「已损坏」警告,而不是「无法验证」,此方法通常不会奏效,因为 macOS 根本不会提供这个放行按钮。这种情况请使用上面的终端方法。
常见问题
我执行了 xattr 命令,但应用还是打不开,该怎么办?先确认路径是否正确:在终端运行 ls /Applications/,确认应用确实在那里。同时确认你已经把应用从挂载的 DMG 中拖到「应用程序」文件夹;直接从 DMG 里运行应用本身就会引发问题。如果仍然失败,下载文件可能真的损坏了,请重新下载。
这样做安全吗?命令本身是安全的:xattr -cr 只会移除 macOS 附加在文件上的元数据,不会修改应用代码,也不会改变你的系统安全设置。需要判断的是你把它用在什么上。清除隔离标记,正是让 Gatekeeper 不再检查该应用的原因,因此请只对你真正信任的来源的软件使用它。
每次更新后都要重新执行一遍吗?只有未签名的应用才需要。macOS 会为每一次新下载重新添加隔离属性,所以未签名的应用在每次更新后都需要再次执行该命令。已正确签名并公证的应用(包括 OpenGnothia 的当前版本)则完全不需要。
Windows 或 Linux 上也会出现这个问题吗?不会,这个特定警告来自 macOS 的 Gatekeeper。Windows 有一个类似的功能叫 SmartScreen,但它显示的是不同的提示,并有自己的「仍要运行」选项。Linux 默认没有对应的机制。
