修复 macOS 上 “Gobliiins 已损坏,无法打开” 错误(不禁用安全性)

发布: (2026年2月15日 GMT+8 07:09)
5 分钟阅读
原文: Dev.to

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,系统会尝试在线验证。任何失败(防火墙阻止、网络波动、证书过期)都会导致出现 “已损坏” 的提示。

诊断问题

  1. 右键 → 打开 – 通常会在 系统设置 → 隐私与安全 中出现 “仍然打开” 按钮,但这里没有出现。

  2. 重启重新下载 – 信息仍然存在,说明问题并非下载损坏。

  3. 运行 Gatekeeper 的诊断命令:

    spctl --assess --verbose=4 /Applications/Gobliiins.app

    输出指向公证被拒,而非二进制损坏。

  4. 检查 quarantine 属性:

    xattr -l /Applications/Gobliiins.app

    com.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 只是无法验证其安全性。

步骤摘要

  1. 不要把它当作损坏 – “已损坏” 往往意味着 Gatekeeper 阻止。

  2. 检查 Gatekeeper 状态

    spctl --assess --verbose=4 /path/to/app.app
  3. 检查 quarantine 属性

    xattr -l /path/to/app.app
  4. 验证来源(校验和、官方站点)。

  5. 在确认后移除 quarantine 标志

    xattr -dr com.apple.quarantine /path/to/app.app
  6. 启动应用 – 应该可以正常运行,无需关闭系统完整性保护或其他安全设置。

最后思考

NimbusApps 的 Gobliiins 构建本身没有问题,只是 macOS 在启动时无法确认其公证状态。负责任地移除 quarantine 标志即可解决,使游戏像其他包装良好的标题一样运行。

现代安全层让启动经典益智游戏的难度甚至超过了解谜本身,但只需几个简单命令,就能在保持安全的同时尽情玩乐。

0 浏览
Back to Blog

相关文章

阅读更多 »

已解决:Notion 无法工作!!!

执行摘要:Notion 显示离线通常是由于您电脑上的本地 DNS 缓存过期,而不是服务中断。清除 DNS 缓存可以强制…