适用系统:macOS Catalina 10.15 及之后所有版本(Monterey、Ventura、Sonoma 等) 适用机型:Intel / Apple Silicon 全系 MacBook Pro
当你第一次双击某些 下载自互联网或 U 盘 的 .app
/.pkg
/.dmg
时,会出现一条系统弹窗:
“XXX”无法打开,因为 Apple 无法检查其是否包含恶意软件。 此软件需要更新。请与开发者联系以获得更多信息。
这是 Gatekeeper 在阻止一个未通过 Apple 公证的可执行文件运行。自 2019 年 macOS Catalina 起,所有第三方 App 若未完成开发者签名 + Notarization 流程,都会触发这条提示。
组件 | 作用 |
---|---|
Gatekeeper | macOS 的强制执行安全策略,默认只允许运行 Mac App Store 或 “已公证的已识别开发者 (identified developer)” 的软件。 |
Developer ID | 为第三方开发者颁发的代码签名证书。 |
Notarization 公证服务 | 开发者将签名后的软件上传到 Apple 服务器,Apple 进行自动扫描(恶意软件、漏洞等)。审核通过后返回一个公证票据 (notarization ticket),开发者将其“钉住”(staple) 在 App 内部。 |
如果缺少以上任意一步,Gatekeeper 在第一次运行时就会拦截,并显示本文的报错弹窗。
⚠️ 风险提示:方法 3–5 会降低系统安全等级或完全绕过 Gatekeeper,仅在完全信任软件来源时使用。完成安装后请务必恢复默认设置。
.app
。macOS Ventura 及之后: > 系统设置 System Settings › 隐私与安全 Privacy & Security macOS Monterey 及之前: > 系统偏好设置 System Preferences › 安全性与隐私 Security & Privacy
com.apple.quarantine
(精确到单个文件)# 终端执行,替换路径为实际 App 的绝对路径
xattr -d com.apple.quarantine "/Applications/XXX.app"
xattr
会删除下载时自动打上的隔离标记,Gatekeeper 将不再校验该文件。
sudo spctl --master-disable # 关闭
# 安装并首次运行完第三方 App 后
sudo spctl --master-enable # 重新启用
关闭后,“系统设置 › 隐私与安全 › 安全” 会出现 “任何来源 (Anywhere)” 选项,所有 App 均可直接运行。
关机后长按 电源键 进入 Recovery OS。
打开 终端 执行:
csrutil disable # 关闭 SIP
spctl kext-consent disable
reboot
安装并验证 App 后,重启再次进入恢复模式:
csrutil enable # 重新开启 SIP
仅在需要加载未签名内核扩展或驱动时考虑此方案。
签名:
codesign --deep --options runtime \
--timestamp \
--sign "Developer ID Application: Your Team" \
MyApp.app
上传公证(Xcode 15):
xcrun notarytool submit MyApp.app \
--keychain-profile "AC_PASSWORD" --wait
钉票据:
xcrun stapler staple MyApp.app
验证:
spctl --assess --type execute --verbose MyApp.app
公证通过后,用户首次打开时将不会再看到本文的报错弹窗。
症状 | 可能原因 | 处理思路 |
---|---|---|
“仍要打开”按钮不出现 | 距离上次尝试已超 1 小时 | 重新双击一次 App,刷新按钮计时 |
右键→打开仍失败 | App 被沙箱化损坏或缺失签名 | 重新下载,或联系开发者更新签名 |
修改 xattr 后仍报警 | .app 内部还有脚本/二进制被隔离 | xattr -r -d com.apple.quarantine MyApp.app 递归删除 |
M 系列 Mac 启动闪退 | App 仅编译 x86-64,需安装 Rosetta 2 | softwareupdate --install-rosetta --agree-to-license |
xattr
精确放行,而非关闭全球策略。场景 | 命令 |
---|---|
单个 App 解除隔离 | xattr -d com.apple.quarantine "/路径/XXX.app" |
递归解除隔离 | xattr -r -d com.apple.quarantine "/路径/XXX.app" |
关闭 / 开启 Gatekeeper | sudo spctl --master-disable / sudo spctl --master-enable |
验证 App 是否已公证 | spctl --assess --type execute -v "/路径/XXX.app" |
现在你已经掌握了 从普通用户到开发者 两个角色视角下,彻底解决「无法打开,因为 Apple 无法检查其是否包含恶意软件」的全部方法。
建议:优先使用方法 1 或 2 进行单次放行;方法 3 仅对可信应用文件;方法 4–5 需在充分了解风险后再执行。
把这篇速查手册收藏起来,下次再遇到 Gatekeeper 报错,就可以 1 分钟内搞定!祝你使用愉快,安全第一。