问题现象
通过 AirDrop 从其他设备传输应用到 Mac 后,双击打开时提示:
"XXX.app" 已损坏,无法打开。您应该将它移到废纸篓。
问题原因
这不是文件真的损坏了,而是 macOS 的 Gatekeeper 安全机制在作祟。
当应用通过 AirDrop、浏览器下载等方式获取时,macOS 会自动给文件打上 com.apple.quarantine(隔离)标记。对于未经 Apple 公证或签名的应用,系统会直接拒绝打开,并显示"已损坏"的误导性提示。
解决方案
方法 1:移除隔离属性(推荐)
打开终端,执行以下命令:
bash
xattr -d com.apple.quarantine /Applications/你的应用.app
示例(以 Sublime Text 为例):
bash
xattr -d com.apple.quarantine /Applications/Sublime\ Text.app
注意:
- 如果应用在其他位置(如
~/Downloads),需要修改路径 - 文件名中有空格需要用反斜杠转义(如
Sublime\ Text.app)
如果提示权限不足,加上 sudo:
bash
sudo xattr -d com.apple.quarantine /Applications/Sublime\ Text.app
方法 2:右键打开(临时绕过)
- 在 Finder 中找到应用
- 按住
Control键点击(或右键) - 选择「打开」
- 在弹出的警告中点击「打开」
缺点:每次打开都需要这样操作,不如方法 1 彻底。
方法 3:系统设置放行
- 双击应用(会报错)
- 打开「系统设置」→「隐私与安全性」
- 向下滚动,找到"XXX 已被阻止"的提示
- 点击「仍要打开」
为什么不推荐 xattr -cr?
网上很多教程使用 xattr -cr(递归清除所有扩展属性),但在新版 macOS(Ventura+)上可能会遇到:
xattr: [Errno 1] Operation not permitted
这是因为 -c 会尝试清除所有扩展属性,包括受 SIP(系统完整性保护)保护的属性。而 -d com.apple.quarantine 只删除隔离标记,更安全且成功率更高。
扩展知识
查看文件的扩展属性
bash
xattr /Applications/你的应用.app
如果输出包含 com.apple.quarantine,说明文件被隔离了。
批量处理多个应用
bash
cd /Applications
for app in *.app; do
xattr -d com.apple.quarantine "$app" 2>/dev/null
done
安全提示
⚠️ 移除隔离属性会绕过 macOS 的安全检查,请确保应用来源可信。建议:
- 只对来自可信来源的应用使用此方法
- 优先从官网下载或使用 Homebrew 等包管理器安装
- 不要对来历不明的应用执行此操作
总结
遇到 AirDrop 传输应用"已损坏"的问题,一条命令即可解决:
bash
xattr -d com.apple.quarantine /Applications/应用名.app
简单、高效、不需要关闭系统安全设置。
参考资料: