修复 macOS 上 “Gobliiins 已损坏,无法打开” 错误(不禁用安全性)
Source: Dev.to
请提供您希望翻译的正文内容,我将按照要求保留源链接、格式和技术术语,仅翻译文本部分。
Gobliiins(游戏)来自 NimbusApps 与 macOS Gatekeeper 的 “损坏且无法打开” 事件
我昨晚在 MacBook Air M2(macOS Sonoma 14.3)上尝试启动 Gobliiins(NimbusApps 发行),macOS 立刻弹出熟悉的警告:
“Gobliiins 已损坏且无法打开。您应该将其移至废纸篓。”
没有崩溃日志,也没有沙滩球——只有瞬间的拒绝。这正是 Gatekeeper 的经典表现。
背景
- 下载的是开发者官网提供的官方构建(NimbusApps 直接分发了几款复古游戏),不是 种子或未验证来源。
- 我在安装前已经仔细核对了来源。
为什么 Gatekeeper 会显示 “已损坏”
这句话具有误导性;二进制文件本身并未损坏。Gatekeeper 拒绝运行该应用是因为它未通过公证检查。
- Apple 对 Gatekeeper 的概述:
- 开发者对公证和代码签名的解释:
现代 macOS 同时验证代码签名 以及 公证票据。如果票据未正确 stapled,系统会尝试在线验证。任何失败(防火墙阻止、网络波动、证书过期)都会导致出现 “已损坏” 的提示。
诊断问题
-
右键 → 打开 – 通常会在 系统设置 → 隐私与安全 中出现 “仍然打开” 按钮,但这里没有出现。
-
重启 并 重新下载 – 信息仍然存在,说明问题并非下载损坏。
-
运行 Gatekeeper 的诊断命令:
spctl --assess --verbose=4 /Applications/Gobliiins.app输出指向公证被拒,而非二进制损坏。
-
检查 quarantine 属性:
xattr -l /Applications/Gobliiins.appcom.apple.quarantine标志仍在。
解决办法
在确认下载直接来自 NimbusApps 并且校验和匹配(NimbusApps 网站: )后,我移除了 quarantine 属性:
xattr -dr com.apple.quarantine /Applications/Gobliiins.app
游戏随后顺利启动,在 Apple Silicon 上通过 Rosetta 2 正常运行。
与 App Store 版本的对比
- App Store 版本:
- App Store 构建从未出现此问题,因为 Apple 通过完整的公证票据进行分发。
为什么复古/独立作品会出现这种情况
- 为现代 macOS 重新打包的旧作往往依赖包装层或兼容性 shim,增加了公证的难度。
- 从 macOS Ventura(并延续至 Sonoma)起,Apple 加强了运行时验证。之前仅提示警告的应用,如果无法确认公证状态,就会被直接阻止。
常见触发场景:
- 独立或复古游戏的重新发行
- App Store 之外的直接下载
- 尚未被 Apple 公证服务缓存的全新构建
问题并非游戏不安全;macOS 只是无法验证其安全性。
步骤摘要
-
不要把它当作损坏 – “已损坏” 往往意味着 Gatekeeper 阻止。
-
检查 Gatekeeper 状态:
spctl --assess --verbose=4 /path/to/app.app -
检查 quarantine 属性:
xattr -l /path/to/app.app -
验证来源(校验和、官方站点)。
-
在确认后移除 quarantine 标志:
xattr -dr com.apple.quarantine /path/to/app.app -
启动应用 – 应该可以正常运行,无需关闭系统完整性保护或其他安全设置。
最后思考
NimbusApps 的 Gobliiins 构建本身没有问题,只是 macOS 在启动时无法确认其公证状态。负责任地移除 quarantine 标志即可解决,使游戏像其他包装良好的标题一样运行。
现代安全层让启动经典益智游戏的难度甚至超过了解谜本身,但只需几个简单命令,就能在保持安全的同时尽情玩乐。