直接用终端命令可批量检查/Applications下应用的签名与公证状态:运行for循环结合codesign -dv --verbose=2和grep筛选Authority、valid on disk、Notarized字段;系统应用需查/System路径并验证valid on disk为yes;异常应用通过codesign --verify捕获错误类型;公证状态还可用xattr -pl com.apple.quarantine检测ticket=1。
直接用终端命令查所有已安装应用的签名状态,不能一键全扫,但可以高效批量检查关键路径下的.app文件。重点不是“全部”,而是覆盖你真正关心的、常被 gatekeeper 拦截的第三方应用和系统关键组件。
查/Applications目录下主流应用的签名与公证状态
这是最实用的起点——绝大多数用户安装的软件都在这里。运行以下命令,只显示每个应用的签发者、磁盘有效性及是否公证:
for app in /Applications/*.app; do [[ -d "$app" ]] || continue echo "== $(basename "$app") ==" codesign -dv --verbose=2 "$app" 2>/dev/null | grep -E "(Authority|valid on disk|Notarized)" echo done
说明:
• codesign -dv --verbose=2 输出精简但含核心字段
• grep 过滤出 Authority(谁签的)、valid on disk(文件没被改过)、Notarized(苹果是否公证)
• 若某应用无输出,说明它根本没签名或路径无效
顺带检查系统预装应用(如Safari、Finder)
它们不在/Applications里,而是在/System/Applications或/System/Library/CoreServices中。先用ps定位进程路径,再查签名:
# 查 Safari 实际路径(通常为 /System/Applications/Safari.app)
ps aux | grep -i "Safari.app" | grep -v grep | head -1 | awk '{print $11}'
<h1>再对路径执行签名检查(注意加引号防空格)</h1><p>codesign -dv --verbose=4 "/System/Applications/Safari.app"说明:
• 系统应用 Authority 一般显示 Apple Mac OS Application Signing 或类似 Apple 自签名证书
• “valid on disk” 必须是 yes;若为 no,可能系统完整性被破坏(如禁用了 SIP)
快速筛出签名异常的应用(无签名/未公证/开发者未知)
把上面的循环稍作增强,只列出有问题的条目,省得人工翻:
for app in /Applications/*.app; do
[[ -d "$app" ]] || continue
output=$(codesign --verify --verbose=1 "$app" 2>&1)
if [[ $? -ne 0 ]]; then
auth=$(codesign -dv --verbose=2 "$app" 2>/dev/null | grep "Authority" | cut -d: -f2- | sed 's/^ *//')
echo "$(basename "$app"): $auth → $(echo "$output" | tail -1)"
fi
done说明:
• codesign --verify --verbose=1 有报错即说明签名验证失败
• 输出会标出是“code object is not signed”(完全没签名)、“invalid signature”(签名损坏)还是“a sealed resource is missing or invalid”(资源被删改)
• 同时附上 Authority 字段,一眼看出是不是 unidentified developer
补充:验证公证票据是否存在(xattr方式)
有些应用虽有 Developer ID 签名,但没走苹果公证流程,macOS Ventura 及更新版本会拦截。可检查其是否携带公证票证:
xattr -pl com.apple.quarantine "/Applications/Postman.app" 2>/dev/null | grep -q "ticket=1" && echo "已公证" || echo "未公证(或票据丢失)"
说明:
• ticket=1 表示系统曾成功获取并缓存了苹果的公证响应
• 若命令无输出或提示 No such xattr,大概率未公证,需联系开发者提交公证


















