本文已把 “XXX 已损坏,无法打开。您应该将它移到废纸篓/推出磁盘映像” 的根因、排查思路、风险提示与六大解决策略一步到位地梳理出来,力求让你 既能快速解决问题,又能理解 macOS 在幕后到底做了什么。内容基于 macOS 14 Sonoma 及之前版本,后续版本的思路也基本通用。
触发环节 | 主要机制 | 典型标志 | 说明 |
---|---|---|---|
Gatekeeper | spctl | 「已损坏」 | 校验开发者签名、苹果公证(Notarization)和安全策略 |
隔离属性 (Quarantine) | com.apple.quarantine xattr | 「来自未知开发者」或「已损坏」 | 浏览器/社交软件下载文件时自动打上隔离标记 |
XProtect / MRT | 系统恶意软件扫描 | 直接阻止启动 | 云端威胁情报更新后,系统会阻止特定哈希 |
代码签名缺失/损坏 | codesign | errSecCSReqFailed | 常见于改名、破解或不完全下载的 App |
磁盘映像属性 | hdiutil | 推出失败 | DMG内校验失败或 APFS 快照问题 |
一句话:系统把 任何 “无法验证安全来源”的可执行文件视作潜在威胁,于是把它拦在第一道关。
确认下载完整性 在终端校验 SHA-256:
shasum -a 256 ~/Downloads/XXX.dmg
与官网发布的哈希或可靠渠道对比。
排除「名字被改」的情况 重命名、修改资源文件或图标都可能破坏签名。确保你拿到的文件与原版一致。
检查磁盘空间与文件系统错误 打开「磁盘工具」→ 选中系统卷 →「急救」。空间不足或 APFS 损坏也会出现莫名其妙的“已损坏”。
确认无误后再进入后续步骤,否则你是在修“文件真坏了”的问题。
适合:偶尔用到的工具、小众且确认安全的 App。 优点:只影响这一份应用,Gatekeeper 其他策略不变。
# 假设已把 App 拖进 /Applications
sudo xattr -dr com.apple.quarantine /Applications/XXX.app
-d
只是删单个属性;-r
递归到所有子文件,保证框架、插件都解锁。适合:常用第三方软件、定制打包或内部测试版。 风险:App 不再经过首次运行时的安全扫描;请确保来源可信。
sudo spctl --master-disable # 关闭
spctl --status # 应为 "assessments disabled"
完成安装后务必重新打开:
sudo spctl --master-enable
适合:需要批量安装多款未公证软件或离线环境。 强烈建议:只在局域网或无外网场景下短时间使用,安装完立即恢复。
sudo codesign --force --deep --sign - /Applications/XXX.app
-
表示临时使用 ad-hoc 签名,不需要证书。
如果自己有 Apple Developer 证书,可替换 -
为 “Developer ID Application: Your Name (TeamID)”。
重新签名后再删隔离属性:
sudo xattr -dr com.apple.quarantine /Applications/XXX.app
适合:源码构建、自行打包或已被破解修改的 App。 风险:失去官方更新通道;升级时需重复此流程。
仅 Apple Silicon Mac(M1/M2/M3…)+ macOS 11 及以上
适合:需要安装老驱动、内核扩展 (kext) 的专业软件;例如旧版网卡驱动、虚拟化软件核心模块等。 风险:系统内核安全性降低;务必在确认软件无异常后恢复原状。
如果拿到的是 自建 DMG 或长期归档文件,可能因为 hdiutil
参数不当导致校验失败。方案如下:
挂载而不校验
hdiutil attach -noverify -noautofsck ~/Downloads/XXX.dmg
拷贝 App 至 /Applications
,走 方法 2 或 方法 3 的流程。
若仍报错,使用 hdiutil verify XXX.dmg
检查镜像本身;若失败,需重新打包:
hdiutil convert XXX.dmg -format UDZO -o New.dmg
场景 | 命令 | 输出关键字 | 用途 |
---|---|---|---|
判断 Gatekeeper 评估结果 | spctl --assess -vv /Applications/XXX.app | accepted / rejected | 快速知道被哪条策略挡下 |
查看签名详情 | codesign -dvv /Applications/XXX.app | Authority= | 验证签名完整、证书链 |
查 XProtect 日志 | log show --predicate 'subsystem == "com.apple.security"' --last 1h | Rejected code | 查看系统拦截原因 |
列出隔离标记 | xattr -p com.apple.quarantine /path | 0081;... | 确认文件是否带隔离属性 |
确认 Gatekeeper 状态
spctl --status # 应显示 assessments enabled
删除可疑软件后再清缓存
sudo rm -rf /Library/Caches/com.apple.XProtect.updates
sudo softwareupdate --background-critical
定期更新系统:安全数据库、XProtect 与 MRT 会随增量更新自动刷新。
首选官方或已公证软件,实在需要小众工具,也尽量去 GitHub 等提供校验值的渠道下载。
问题 | 摘要回答 |
---|---|
为什么我右键打开还是提示“已损坏”? | 可能是 App 内部还有隔离属性,确认已递归移除或用 xattr -lr /Applications/XXX.app 检查 |
关闭 Gatekeeper 会永久生效吗? | 重启仍保持关闭,需手动 --master-enable 开关或在「系统设置 ▸ 隐私与安全」内重启选项 |
Apple Silicon 机器能否刷 OpenCore 来装未签名 kext? | 技术上可行,但强烈不建议;降低启动安全性已能解决绝大多数驱动需求,风险更可控 |
升级系统后 App 又“损坏”了? | 新版 Gatekeeper/XProtect 数据库可能判定旧版 App 不安全,需要开发者重新签名或公证 |
# 一次性放行
xattr -dr com.apple.quarantine /Applications/XXX.app
# Gatekeeper 开关
sudo spctl --master-disable # 关闭
sudo spctl --master-enable # 开启
# 查看 Gatekeeper 评估
spctl --assess -vv /Applications/XXX.app
# 重新签名(Ad-hoc)
sudo codesign --force --deep --sign - /Applications/XXX.app
macOS 的安全链条(下载-隔离-签名-公证-运行时保护)看似繁琐,但层层相扣是为了防御日益复杂的恶意软件。真正高效且安全的做法是:
掌握以上流程,你就能在保证系统安全的前提下,自如安装任何值得信任的第三方应用。祝你使用顺利!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有