很多人在 MacBook 上安装软件时,可能会遇到这样的提示:
text "XXX.app"已损坏,无法打开。你应该将它移到废纸篓。
或者类似提示:
text 无法打开"XXX.app",因为无法验证开发者。
很多小白看到这个提示,会以为软件真的坏了,其实不一定。很多时候,这是 macOS 的安全机制拦截导致的。
本文整理一下这个问题的原因、解决方法,以及需要注意的风险。
一、为什么会提示软件"已损坏"?
macOS 有一套安全机制,叫做 Gatekeeper。
它的作用是检查你打开的软件是否安全,例如:
- 软件是不是从 App Store 下载的
- 软件有没有 Apple 开发者签名
- 软件有没有经过 Apple 公证
- 软件是不是从互联网、网盘、聊天工具下载来的
- 软件是否带有隔离标记
当你从浏览器、网盘、微信、QQ、Telegram、GitHub、第三方网站下载软件时,macOS 可能会自动给这个软件加上一个扩展属性:
bash com.apple.quarantine
这个属性可以理解为:
这个软件是从互联网来的,打开前需要重点检查。
如果 macOS 检查后认为这个软件不可信,就可能提示:
text 软件已损坏,无法打开
但这并不一定代表软件真的损坏了,也可能只是系统拦截了它。
二、常见原因
出现这个问题,通常有下面几种情况:
1. 软件不是从 App Store 下载的
例如:
- 官网下载
- GitHub Release 下载
- 网盘下载
- 第三方网站下载
- 朋友发来的安装包
这些软件可能会被 macOS 标记为"来自互联网"。
2. 软件没有经过 Apple 公证
有些开发者开发的软件可以正常使用,但没有提交给 Apple 做公证。
macOS 就可能提示无法验证开发者,甚至提示软件已损坏。
3. 软件签名异常
有些软件在压缩、解压、传输过程中,签名信息可能出现异常。
例如:
- 解压工具不兼容
- 下载过程中被中断
- 文件被重新打包
- 软件被第三方修改过
这种情况下,macOS 也可能认为软件不安全。
4. 软件被加了隔离属性
这个是最常见的情况。
可以使用下面命令查看 App 是否带有扩展属性:
bash xattr /Applications/XXX.app
如果看到类似内容:
bash com.apple.quarantine
说明这个 App 被 macOS 加了隔离标记。
三、解决方法
方法一:优先使用系统自带方式打开
如果提示"无法验证开发者",可以先尝试这种方式:
- 打开「系统设置」
- 进入「隐私与安全性」
- 找到被拦截的软件
- 点击「仍要打开」
或者:
- 在 Finder 中找到这个 App
- 按住 Control
- 点击 App
- 选择「打开」
- 再次确认打开
如果这种方法可以解决,优先使用这种方式。
四、使用命令行解决
如果上面的方法不行,可以使用 xattr 命令清除隔离属性。
假设软件安装在:
bash /Applications/XXX.app
可以执行:
bash sudo xattr -rd com.apple.quarantine /Applications/XXX.app
这里的 XXX.app 换成你的软件名称。
例如:
bash sudo xattr -rd com.apple.quarantine /Applications/Google\ Chrome.app
注意:如果 App 名称中有空格,需要加反斜杠 \ 转义,或者使用英文引号包起来。
例如:
bash sudo xattr -rd com.apple.quarantine "/Applications/Google Chrome.app"
五、为什么这个命令有效?
命令:
bash sudo xattr -rd com.apple.quarantine /Applications/XXX.app
拆开来看:
bash sudo
表示使用管理员权限执行。
bash xattr
表示操作文件的扩展属性。
bash -r
表示递归处理整个 App 目录。
因为 .app 在 macOS 里不是一个普通文件,而是一个文件夹。
bash -d
表示删除指定的扩展属性。
bash com.apple.quarantine
就是 macOS 给下载软件加上的隔离标记。
所以这条命令的意思是:
删除这个 App 以及它内部文件上的隔离标记。
清除后,macOS 不再把它当作"刚从互联网下载、需要重点拦截"的软件,所以很多情况下就可以正常打开了。
六、还有一种常见命令:xattr -cr
有些教程会让你执行:
bash xattr -cr /Applications/XXX.app
这个命令也可以解决问题。
它的含义是:
bash -c
清除所有扩展属性。
bash -r
递归处理整个 App。
也就是说:
bash xattr -cr /Applications/XXX.app
会清除这个 App 上的所有扩展属性,不只是 com.apple.quarantine。
所以它通常也能解决"软件已损坏"的问题。
七、推荐使用哪个命令?
更推荐使用这个:
bash sudo xattr -rd com.apple.quarantine /Applications/XXX.app
因为它只删除隔离属性,更精准。
不太建议一上来就用:
bash xattr -cr /Applications/XXX.app
因为它会清除所有扩展属性,范围更大。
一般来说:
bash sudo xattr -rd com.apple.quarantine /Applications/XXX.app
已经够用了。
八、完整操作示例
假设你安装了一个软件叫:
text Demo.app
路径是:
bash /Applications/Demo.app
第一步:查看是否有隔离属性
bash xattr /Applications/Demo.app
如果输出:
bash com.apple.quarantine
说明它被隔离了。
第二步:清除隔离属性
bash sudo xattr -rd com.apple.quarantine /Applications/Demo.app
然后输入 Mac 登录密码。
注意:终端输入密码时不会显示内容,这是正常的,输完直接回车即可。
第三步:再次打开软件
重新打开 Demo.app,一般就可以正常运行了。
九、如果软件名称有空格怎么办?
比如软件叫:
text Visual Studio Code.app
路径就是:
bash /Applications/Visual Studio Code.app
这时候命令要写成:
bash sudo xattr -rd com.apple.quarantine "/Applications/Visual Studio Code.app"
或者:
bash sudo xattr -rd com.apple.quarantine /Applications/Visual\ Studio\ Code.app
推荐小白使用第一种,加英文双引号更直观。
十、如果还是打不开怎么办?
如果清除隔离属性后还是打不开,可以尝试下面几种方式。
1. 重新下载软件
可能安装包真的下载不完整,建议去软件官网重新下载。
2. 换一个解压工具
如果是 .zip 或 .rar 文件,可能是解压过程导致文件异常。
可以尝试使用:
- macOS 自带解压
- The Unarchiver
- Keka
重新解压后再安装。
3. 检查芯片架构是否兼容
现在 Mac 有 Intel 芯片和 Apple Silicon 芯片,也就是 M1、M2、M3、M4 等。
如果你下载的软件不支持当前芯片,也可能打不开。
一般软件会区分:
text Intel Apple Silicon Universal
如果你是 M 系列芯片,优先下载:
text Apple Silicon
或者:
text Universal
4. 检查系统版本是否支持
有些新软件需要较新的 macOS 版本。
例如软件要求:
text macOS 13 或更高版本
但你的系统是:
text macOS 12
也可能无法正常打开。
十一、这个方法安全吗?
这个命令本身没有问题,但不要对任何来历不明的软件随便使用。
因为清除隔离属性后,相当于绕过了 macOS 的一部分安全检查。
比较适合下面这些情况:
- 软件来自官网
- 软件来自 GitHub 官方 Release
- 软件来自可信开发者
- 软件是自己开发的
- 软件来源明确、可靠
不建议对下面这些软件使用:
- 破解软件
- 不明网盘资源
- 陌生人发来的安装包
- 不明论坛下载的软件
- 来历不清的工具类软件
如果软件本身有恶意,清除隔离属性并不会让它变安全,只是让 macOS 不再拦截它。
十二、常用命令汇总
查看 App 扩展属性
bash xattr /Applications/XXX.app
只删除隔离属性,推荐
bash sudo xattr -rd com.apple.quarantine /Applications/XXX.app
清除所有扩展属性,不优先推荐
bash xattr -cr /Applications/XXX.app
软件名称有空格时
bash sudo xattr -rd com.apple.quarantine "/Applications/XXX XXX.app"
十三、总结
Mac 提示软件"已损坏",很多时候并不是软件真的坏了,而是 macOS 的安全机制 Gatekeeper 认为这个软件来源不可信,或者软件带有 com.apple.quarantine 隔离属性。
推荐的解决方式是:
bash sudo xattr -rd com.apple.quarantine /Applications/XXX.app
如果软件来源可靠,执行后通常就可以正常打开。
但如果软件来源不明,不建议随便绕过系统安全检查。安全第一,尽量从官网或可信渠道下载软件。