静隐

May 28, 2026 · View on GitHub

[简体中文] | English

静隐 是一款轻量、现代的 macOS 工具,可在应用程序关闭最后一个窗口时自动终止该程序。它旨在成为旧版工具(如 SwiftQuit)的稳健、高性能且兼容 macOS Tahoe 的替代品。

下载 静隐

brew install --cask chentao1006/tap/quitty

🚀 核心功能

  • 自动终止:当您关闭最后一个窗口时,立即(或延迟)退出应用程序。
  • 适配 macOS Tahoe:使用原生辅助功能 API (AXObserver),以实现与 macOS 16 的最大兼容性。
  • 智能过滤
    • 包含模式:仅退出您指定列表中的应用程序。
    • 排除模式:退出除您希望保持运行的应用程序之外的所有程序。
  • 可配置延迟:设置应用程序终止前的自定义缓冲时间(0-5 秒)。
  • 登录时启动:与您的 Mac 无缝同步启动。
  • 自我学习引擎:静隐 会根据您的反馈进行学习。如果应用误退或无法退出,您可以点击反馈,系统将自动识别该应用的窗口特征并自我调整。
  • iCloud 云端同步:通过您的 iCloud 账号在多台 Mac 之间自动同步设置与已学习的退出规则,全程无感。
  • 社区化改进:可选的上报功能帮助我们持续优化预置规则,让每个用户都能享受到最精准的识别。

🛠 安装

1. 下载最近发行版 (推荐)

发行页面 (Releases) 下载最新的 DMG 文件。 只需打开 Quitty.dmg 并将 静隐 (Quitty) 拖入您的 Applications 文件夹。

2. Homebrew Cask

也可以通过 Homebrew 安装静隐:

brew install --cask chentao1006/tap/quitty

或先添加 tap:

brew tap chentao1006/tap
brew install --cask quitty

3. 从源码构建

或者,您可以使用提供的脚本直接从源代码构建并安装。

  1. 将此仓库克隆到本地机器。
  2. 打开终端进入项目目录。
  3. 运行安装脚本:
    chmod +x build_and_install.sh
    ./build_and_install.sh
    
  4. 脚本将以 Release 模式编译项目并将 Quitty.app 安装到您的 /Applications 文件夹中。

📦 发布

release.sh 会构建 DMG、创建 GitHub Release,并更新共享公开 tap chentao1006/homebrew-tap 中的 quitty cask。

这个 tap 会被多个项目共用,所以 release-to-brew.sh 会写入 Quitty cask,并让 tap README 保持通用说明。

./release.sh 1.2.3

常用发布选项:

SKIP_HOMEBREW_RELEASE=1 ./release.sh 1.2.3
SKIP_BREW_PUSH=1 ./release-to-brew.sh dist/Quitty.dmg 1.2.3
RUN_BREW_AUDIT=1 ./release-to-brew.sh dist/Quitty.dmg 1.2.3

📖 使用与设置

1. 辅助功能权限

静隐 需要 辅助功能权限 来监控其他应用程序的窗口事件。

  • 首次启动时,静隐 会提示您授予权限。
  • 前往 系统设置 > 隐私与安全性 > 辅助功能 并确保已启用 静隐。
  • 如果引擎未启动,请使用 故障排除 选项卡中的 运行诊断 按钮。

2. 配置

从菜单栏图标(“X”图标)打开设置窗口。

  • 通用:切换“登录时启动”并调整“退出延迟”。
  • 应用列表
    • 包含模式(仅退出这些)或 排除模式(退出除这些外的所有)之间进行选择。
    • 点击 + 按钮并从“应用程序”文件夹中选择应用程序。
  • 数据:启用“文件同步”,将您的应用列表和设置保存在 iCloud Drive 或 Dropbox 上的 JSON 文件中。

🔍 技术概览

与某些依赖于在最近的 macOS 更新中失效的高级框架的工具不同,静隐 采用了直接的方法:

  1. 它监控 NSWorkspace 的应用启动和终止通知。
  2. 对于每个目标应用,它向进程附加一个原生的基于 C 的 AXObserver
  3. 它监听 AXWindowClosed 通知。
  4. 触发时,它会对应用当前的窗口列表进行非阻塞检查。
  5. 如果窗口总数为零(不包括抽屉和表单窗口),它将通过对比已学习的幽灵窗口列表自适应灵敏度乘数进行二次确认。
  6. 确认无误后,将通过 NSRunningApplication.terminate() 执行退出。

⚠️ 重要提示

  • 系统应用:静隐 被硬编码为忽略关键系统进程(如 Finder、Dock、Spotlight、控制中心等),以确保系统稳定性。
  • 安全第一:如果辅助功能 API 无法返回有效的窗口计数,静隐 将中止退出过程,而不是冒着“杀掉”可能仍有活动窗口的应用的风险。
  • 开发工具:建议将 IDE(如 Xcode、VS Code)添加到排除列表中,以防止在编译或后台任务期间意外关闭。

🛡 隐私

静隐包含轻量级的匿名使用统计(由 Aptabase 提供支持)以帮助改进应用。该功能仅收集基本事件(如应用启动、成功自动退出等)。

  • 绝不收集任何个人身份信息 (PII)
  • 您可以随时在 设置 > 通用 中取消勾选“分享匿名使用数据”来退出追踪

📝 注意事项

由于 macOS 的安全机制限制,以及每个应用可能采用不同的窗口管理和技术实现,静隐 无法保证对所有应用都能完全实现自动退出功能。我们始终遵循保守原则,尽量避免误退出正在使用的应用,但仍无法做到 100% 避免误操作。如遇到无法退出或误退出的情况,欢迎提交 issue(点击这里提交),我会在有空时尽力修复。感谢您的理解与支持!

🛡 许可证

本项目在 MIT 许可证下按“原样”提供。