macOS 不会自动刷新签名校验,所谓“强制刷新”是通过命令让系统重新评估签名状态或清除干扰项:1. 用 spctl --remove 清空单个应用的 Gatekeeper 缓存;2. 用 sudo xattr -rd com.apple.quarantine 移除隔离属性;3. 用 spctl --assess 查看当前签名判定结果;4. 用 sudo codesign --force --deep --sign - 重建 ad-hoc 签名。
macos 不会“自动刷新”签名校验,所谓“强制刷新”,本质是让系统重新评估某个应用的签名状态或清除干扰验证的元数据。这不是重启验证服务,而是通过命令触发 gatekeeper 重新检查、或移除导致校验失败的标记。
重置单个应用的 Gatekeeper 评估记录
系统会缓存对某个 App 的验证结果(比如“已拒绝”)。执行以下命令可清空该缓存,下次启动时强制重新校验:
- 打开终端,输入:spctl --remove /Applications/你的应用名.app
- 把“你的应用名.app”换成实际路径,含空格时加英文引号,例如:spctl --remove "/Applications/Zoom.us.app"
- 回车后无需密码;之后双击应用,系统会再次执行完整签名与公证检查
清除隔离属性(最常见有效操作)
90% 的“无法验证”“已损坏”提示,根源是下载时被标记了 com.apple.quarantine。移除它等于告诉系统:“这是我主动获取的,跳过网络来源审查”:
- 终端中输入:sudo xattr -rd com.apple.quarantine /Applications/你的应用名.app
- 拖入应用图标自动补全路径,输管理员密码(不显示字符)
- 执行成功后,该应用即脱离“首次下载”状态,Gatekeeper 不再拦截
验证当前签名是否被接受
确认系统当前如何看待这个 App 的签名,用这条命令直接查看 Gatekeeper 判定结果:
- 输入:spctl --assess --type execute /Applications/你的应用名.app
- 返回 accepted 表示签名有效且已通过验证
- 返回 rejected 表示被拦截,此时应配合 xattr 或 codesign 进一步处理
重建 ad-hoc 签名(适用于证书过期或无签名)
当原签名彻底失效(如开发者证书过期),可临时赋予一个系统认可的本地签名:
- 确保已安装 Xcode 命令行工具:xcode-select --install
- 执行:sudo codesign --force --deep --sign - /Applications/你的应用名.app
- 拖入应用完成路径填充,输密码后完成重签名;签名后 Gatekeeper 将视为可信











