解决macOS应用程序“已损坏”警告

最近在macOS上安装应用程序时,是否遇到过“已损坏,无法打开”的提示。经过一番搜索,这是macOS的安全机制在作祟。

一、问题背景

macOS包含一套名为“Gatekeeper”的安全系统,它会检查应用程序是否来自已知开发者,并确保软件未被篡改。当您从非App Store来源下载应用时,系统可能会阻止其运行,并显示“已损坏”的警告。

二、解决方案

1. 允许“任何来源”的应用程序运行

打开“终端”应用程序(可以在“应用程序”>“实用工具”中找到),输入以下命令并按回车:

sudo spctl --master-disable

根据提示输入您的管理员密码。然后打开“系统偏好设置”>“安全性与隐私”>“通用”,您会看到“允许从以下位置下载的应用程序”选项,现在可以选择“任何来源”了:

image-20260203上午120155297

步骤2:移除应用的安全隔离属性

再次打开“终端”,输入以下命令(注意命令末尾有一个空格):

sudo xattr -dr com.apple.quarantine 

不按回车,而是打开“访达”,找到无法打开的应用程序,将其拖拽到终端窗口中。此时终端会自动填充应用程序的完整路径,然后按回车执行命令并输入管理员密码。大概是这个样子

sudo xattr -dr com.apple.quarantine /Applications/MyApp.app

步骤3:双击打开应用程序

完成前两个步骤后,您现在可以正常双击打开应用程序了。

安全注意事项

  1. 谨慎使用“任何来源”选项:这会降低系统的安全性,建议在使用完应用程序后通过以下命令恢复设置:
    sudo spctl --master-enable
    
  2. 只从可信来源下载应用:即使解决了“已损坏”问题,也要确保应用程序来源可靠

为什么这个方法有效?

macOS使用com.apple.quarantine属性标记从互联网下载的文件,这个属性会告诉Gatekeeper在首次打开时检查应用程序。移除这个属性或完全禁用Gatekeeper可以绕过这些检查。

结论

这个3步方案适用于大多数从非官方渠道下载的macOS应用程序。


在 Mac 下搞定了 Jekyll 环境:一次踩坑全记录 WireGuard 隧道下 SSH 连接卡死问题排查