macOS 上怎么检查一个应用有没有正确签名?
用 codesign 和 spctl 判断一个 macOS 应用的签名是否有效、有没有被改动、能否通过 Gatekeeper 检查。
快速开始
macOS 打不开某个应用,多半和代码签名有关:应用没有签名、签名之后被改动过,或者签名身份不被 Gatekeeper 信任。下面几条命令可以把这几种情况区分开,并判断问题出在签名本身还是 Gatekeeper 策略上。
症状
查看应用的签名与签名身份
先把应用包的签名信息打印出来,一眼就能看出它到底有没有签名、由哪个开发者 ID 和团队签名。如果 Authority 一栏是 ad-hoc 或者干脆没有这一行,说明这个应用从来没有被正确签名,问题不在 Gatekeeper,而在签名本身。把示例路径换成你要检查的应用:直接从访达把应用拖进终端窗口,就能粘贴出完整路径。
在终端查看 Mac 上任意应用的签名者、TeamID、CDHash 和权限声明。
$ codesign -dv --verbose=4 /Applications/Safari.app校验签名有没有被改动过
上一步只是列出签名信息,这一步才会真正用密码学校验整个签名以及包内的每一个文件。如果没有任何输出,说明签名完好。如果报错指向某个具体文件,或者提示 “code object is not signed at all”,说明应用在签名之后被修改过,或者根本没有签名。路径沿用上一步检查过的那个应用包。
检查应用包的签名是否有效、是否在签名后被修改过。
$ codesign --verify --deep --strict --verbose=2 /Applications/SomeApp.app让 Gatekeeper 给出裁定结果
真正拦截启动的是 Gatekeeper 的判断,它会因为 codesign 看不到的原因拒绝应用,比如缺少公证票据。加上详细输出的参数运行评估,就能拿到确切原因,例如 source=no usable signature,或者显示来源是 Developer ID。应用路径同样沿用上一步。
spctl 会按 macOS 的 Gatekeeper 策略评估任意应用,并告诉你接受或拒绝的具体原因。
$ spctl --assess --verbose /Applications/SomeApp.app为这个应用单独添加一条 Gatekeeper 例外
如果你信任这个应用,但它没有签名,或者用的签名身份 Gatekeeper 不接受,那就针对它单独加一条评估规则,而不是把整个 Gatekeeper 关掉。把 /Applications/MyTool.app 换成你刚才检查的那个应用包,label 取一个好记的名字,方便以后识别。这样应用可以启动,其他应用仍然照常接受评估。
spctl --add 会添加按应用的评估规则,让某一个工具可以启动,同时 Gatekeeper 对其他软件保持严格。
$ sudo spctl --add /Applications/MyTool.app --label "Approved Tools"▾ 撤销
$ sudo spctl --remove /Applications/MyTool.app确认 Gatekeeper 仍在正常执行策略
添加例外不应该把 Gatekeeper 关掉,所以再确认一次总开关状态。正常结果应显示 assessments enabled;如果显示 disabled,请先把总开关打开再继续。之后从访达打开刚才的应用,应该不会再被拦下。
用 spctl --status 查看 macOS 对下载应用的验证机制(门禁)当前是否启用。
$ spctl --status▾ 撤销
$ sudo spctl --global-enable如何确认已解决
codesign --verify 没有任何输出,spctl --assess 显示 accepted,从访达双击应用可以正常打开。
一键全部撤销
上面每一条命令都可以撤销。按此顺序执行即可全部还原。
$ sudo spctl --global-enable
sudo spctl --remove /Applications/MyTool.app执行前请先确认——部分步骤之间可能并非相互独立。
来源
- codesign — create and manipulate code signatures (macOS)依据: Documents -d (display), -v (verbose) and the detail levels that reveal authority chain, CDHash and entitlements.
- spctl — system policy security assessment tool (macOS)依据: Documents --assess to evaluate a path against system policy and --verbose to show the reason for the verdict.
- Code Signing Guide依据: Apple explains code signature validation and why deep verification checks nested code.
- Protecting against malware (Apple Platform Security)依据: Apple's security guide explains Gatekeeper and notarization assessments performed on downloaded apps.
- Protecting users from malware on Mac依据: Explains Gatekeeper's role in verifying that downloaded apps come from identified developers before they are allowed to run.
最后验证: 2026-09-22