macos报“已损坏”是gatekeeper拦截未签名/篡改app,非文件损坏;先执行sudo spctl --master-disable开启“任何来源”,再用sudo xattr -r -d com.apple.quarantine清除隔离属性即可解决。

这是 macOS 的 Gatekeeper 机制在拦截未签名或被篡改的 App,不是文件真损坏,不用重装、不用删包,两步终端命令就能绕过。
为什么 macOS 会报“已损坏,无法打开”
macOS 从 10.12 起默认只允许运行 Apple 官方签名或经 Mac App Store 分发的应用。com.apple.quarantine 属性是系统自动加上的“隔离标记”,哪怕你刚下载完、没动过文件,也会触发该提示。它和病毒扫描无关,也不代表文件被破坏——只是 Gatekeeper 拒绝执行。
常见触发场景包括:
- 从官网直接下载的
WebStorm.app、VisualStudioCode.app等非 App Store 版本 - 用
codesign签名后又手动修改过资源(比如替换图标、改 Info.plist) - 通过 rsync / scp / 外接硬盘拷贝的 App,元数据丢失导致签名校验失败
先试 sudo spctl --master-disable 开启“任何来源”
这一步解决的是“系统根本不给你机会运行”的问题。执行后,macOS 会允许你手动点击“仍要打开”。
操作步骤:
- 打开
终端 - 输入
sudo spctl --master-disable,回车 - 输入管理员密码(输的时候不显示字符,输完直接回车)
- 打开
系统偏好设置 → 安全性与隐私 → 通用,确认“任何来源”已勾选(若没出现,重启终端再试一次命令)
⚠️ 注意:spctl --master-disable 在 macOS Sequoia(15.x)中仍有效,但部分企业 MDM 环境可能禁用该命令;如执行后无反应,说明策略已被锁定,跳过这步直接进下一步。
必须用 xattr -r -d com.apple.quarantine 清除隔离属性
绝大多数“已损坏”提示,真正卡点就在这里。Gatekeeper 不仅看签名,更依赖 com.apple.quarantine 这个扩展属性判断来源。不清掉它,点“仍要打开”也会立刻弹回错误。
正确操作(防错关键):
- 在终端输入
sudo xattr -r -d com.apple.quarantine(注意末尾有空格!) - 打开
访达 → 应用程序,找到目标 App(如PyCharm.app) - 直接把它拖进终端窗口——路径会自动补全,且空格/中文/特殊字符全部转义正确
- 回车,输入密码
✅ 成功后不会有任何输出,静默即成功。立刻双击 App 就能启动。
❌ 错误做法:手动敲路径(容易漏转义、写错大小写)、用 -d 不带 -r(只清顶层目录,子目录里的可执行文件仍被拦)。
极少数情况需要重签名(比如自己打包或修改过 App)
如果你明确改过 App 内容(例如替换了 Contents/MacOS/appname 二进制),清除 quarantine 属性后仍报错,说明签名失效。此时需本地重签:
- 确保已安装 Xcode 命令行工具:
xcode-select --install - 执行:
codesign --force --deep --sign - /Applications/YourApp.app
⚠️ - 表示使用 ad-hoc 签名(无需开发者证书),仅用于本地调试。不要对系统级工具(如 Terminal.app)乱签,可能引发权限异常。
真正麻烦的从来不是命令本身,而是顺序和细节:先开“任何来源”,再清 quarantine,缺一不可;拖入路径比手敲可靠十倍;重签名只是兜底手段,95% 的情况清属性就够了。










