macOS「OpenLess 已损坏」——Gatekeeper ad-hoc 签名绕过方法
问题现象
macOS 上打开 OpenLess DMG、把 app 拖进应用程序文件夹后,双击启动时可能弹出以下提示之一:
-「OpenLess 已损坏,无法打开」-「无法打开「OpenLess」,因为无法验证开发者」
为什么会这样
OpenLess 当前版本使用 ad-hoc 签名(开发者自己签的,没通过 Apple 公证)。Apple 的 Gatekeeper 机制会:
- 检测到应用文件带有 quarantine 标记(网络下载的文件默认有)
- 验证签名不是 Apple 公证过的开发者签名
- 拒绝启动、并提示「已损坏」或「无法验证开发者」
这不是 OpenLess 真的损坏了——是 Apple 的安全机制把 ad-hoc 签名的应用挡在了门外。
解决办法
打开终端(Terminal.app),执行这一条命令:
xattr -cr /Applications/OpenLess.app
执行完后直接再次双击 OpenLess 就能正常启动了——不需要再做别的操作。
命令解释
| 部分 | 含义 |
|---|---|
xattr | macOS 扩展属性管理工具 |
-cr | recursive(递归清除) + clear(清除)——递归清除目录下所有文件的扩展属性 |
/Applications/OpenLess.app | OpenLess 应用包的绝对路径 |
这条命令清除的是 macOS 给网络下载文件附加的 quarantine 扩展属性(com.apple.quarantine)。清除后 Gatekeeper 就不会再拦截这个应用了。
每次更新后都要跑
⚠️ 每次用新版本 DMG 覆盖安装后都要重新跑一次这条命令——新下载的 DMG 解压出来的 app 又会带 quarantine 标记。简单记:更新 → 跑命令 → 启动。
Homebrew 安装的也一样:brew upgrade openless 后同样需要跑 xattr -cr。
替代方法:右键「打开」
如果不想碰终端,还有一种图形界面的绕过方法:
- 打开「应用程序」文件夹
- 右键点 OpenLess → 选「打开」(不是双击)
- 弹出的警告里仍然会提示「无法验证开发者」,但多了一个「打开」按钮
- 点「打开」即可启动
但每次更新后还是要重复右键打开——不如跑命令一劳永逸(当前版本内)。
为什么 OpenLess 不做 Apple 公证
Apple 公证需要每年 99 美元的开发者账号 + 完整的签名和公证流程。OpenLess 作为一个开源免费工具,作者暂时没有做完整 Apple Developer Program 注册。未来如果有预算和时间可能补上,当前阶段只能靠用户手动绕过。
跑完命令还是报「已损坏」怎么办
极少数情况下 xattr -cr 也不管用。试试:
- 先删除
/Applications/OpenLess.app,重新从 DMG 拖入 - 拖入后先跑
xattr -cr,再双击启动(不要先双击,先清属性) - 如果还是不行,看 Gatekeeper 日志:
spctl --assess /Applications/OpenLess.app(会告诉你具体哪一步校验失败)
完成 Gatekeeper 绕过之后,别忘了还要在「系统设置 → 隐私与安全性」里授予 OpenLess麦克风和辅助功能权限。授权后必须完全退出并重启 OpenLess——辅助功能权限只在重启后生效。