Releases: PandaBoby/SlowQ
Release list
SlowQ v1.0.10
SlowQ v1.0.10 · 慢Q
修复一次按满 ⌘Q 连退两个应用、长时间运行后进度环动画消失,以及睡眠瞬间触发合成退出的残留路径。
Fixes hold-⌘Q quitting two apps in a row, the progress ring animation dying after long uptime, and a stale synthetic-quit path across sleep.
🐛 修复
一次按满 ⌘Q,连退两个应用(本次最重要)
症状:按住 ⌘Q 满设定时长后,不仅退出了当前应用,连下一个接管前台的应用也被立刻退出——一次按满,关掉两个窗口。
原因:按满后进入"合成退出"流程时,App 会把事件拦截(event tap)整体物理禁用一小段时间,打算等 ⌘ 松开后投递一次合成的 ⌘Q。但禁用期间你的手指往往还按着,系统的按键重复会继续产生 ⌘Q:
- 这些重复的 ⌘Q 不再经过拦截、原样漏给前台应用,把 App A 退掉;
- App B 接管前台后,轮询检测到 ⌘ 松开,又把合成 ⌘Q 投给了 App B。
修复:暂停窗口不再物理禁用拦截——这本来就没有必要(合成事件走独立通道,不会被自己再拦到),物理 ⌘Q 由拦截回调直接吞掉。同时给合成事件烙上标记,即便它经过自家拦截也能被识别并放行。
长时间运行后,进度环动画消失
症状:App 运行较久之后,按住 ⌘Q 时 HUD 还会出现,但进度环的倒计时数字与动画不再刷新,像"死"在那里。
原因有两个,叠加发生:
- 显示/隐藏竞态:取消按住后 HUD 有 0.15 秒淡出动画;淡出进行到一半时若再次按下 ⌘Q,新一轮 HUD 刚显示,就被上一轮迟到的淡出回调"补刀"隐藏并停掉动画。触发次数越多越容易撞上,运行越久越明显。
- 显示链接失活:进度环动画的 CVDisplayLink 绑定创建时的显示器配置,长时间运行(锁屏/息屏/显示器变化)后可能静默失效,而代码只做了"复用重启",复用一个已死的链接,动画从此永久冻结。
修复:淡出回调带"代数"校验,新一轮显示会作废所有在途的隐藏回调;每次显示时释放旧链接、按当前显示器配置重建。
睡眠瞬间的"幻影退出"(v1.0.9 遗留)
按满时长、正处于"等 ⌘ 松开"的窗口时合盖睡眠:唤醒后残留的轮询计时器会在第一个周期就检测到 ⌘ 已松开(键态跨睡眠丢失),把一条真实的合成 ⌘Q 投给唤醒后最前面的应用。现在进入睡眠时会一并作废该计时器并复位暂停状态。
同时,等待 ⌘ 松开的 1.5 秒超时从"强制投递 ⌘Q"改为"放弃本次合成退出并复位"——超时本身说明 ⌘ 键态可疑(可能被闩住),强行投递会退出你未必想退的应用;看门狗的 3 秒强制复位保留为最后兜底。
📦 安装
- macOS 13+(Apple Silicon / Intel 通用二进制)
- 下载 DMG 拖入「应用程序」,或 zip 解压后放入「应用程序」
- 首次使用需在「系统设置 → 隐私与安全性 → 辅助功能」中勾选 慢Q
- 从旧版本升级:替换 App 后如拦截失效,请在辅助功能里重新勾选一次
SlowQ v1.0.9
SlowQ v1.0.9 · 慢Q
修复合盖睡眠唤醒后 ⌘Q 拦截静默失效,并修掉长期运行的内存泄漏与若干卡死路径。
Fixes ⌘Q interception silently dying after sleep/wake, plus a long-run memory leak and several stuck paths.
🐛 修复
合盖睡眠再唤醒后,⌘Q 拦截失效(本次最重要)
症状:合上盖子睡眠、再打开唤醒之后,按住 ⌘Q 不再出现进度环,⌘Q 直接被前台 App 执行;但 慢Q 进程仍在运行,菜单栏图标也还在。只有手动重启 App 才能恢复。
原因:睡眠会让系统作废事件拦截(event tap)底层的 Mach port,但 App 侧持有的引用仍然非空,于是被当成"还在工作":
- 失效之后回调不再被调用,而"被系统禁用时自动重启拦截"的补救逻辑写在回调里面——它挂在已经死掉的东西上,永远不会执行;
- 拦截的安装函数只判断"引用非空"就提前返回,把陈旧端口当成已装好,任何恢复路径都被它挡掉;
- 此前全应用只监听了"退出"一个系统通知,唤醒之后根本没有重建拦截的时机。
修复:补齐睡眠/唤醒、解锁/切回会话、显示器配置变化等系统通知;用端口有效性做真实判活;失效时整体重建拦截;并增加一个 5 秒一次的看门狗兜底——因为一旦拦截死掉,只有"从外部"看才可能发现。
长期运行的内存泄漏
事件回调在放行按键时多持有了一个引用。拦截订阅的是全系统的每一次按键,因此每敲一个键就泄漏一个事件对象,内存随打字量无界增长。6 处全部改为正确的不增加引用计数写法。
合成退出后拦截可能永久卡死
按住满时长后会短暂暂停拦截、向前台 App 发送一次 ⌘Q。原先这段"等待 ⌘ 松开"的轮询既没有超时也没有被持有:如果 ⌘ 的松开事件被睡眠转换吞掉,暂停状态会永远保持,拦截从此处于物理禁用且无人恢复——症状与上面那条完全一样。现在加了 1.5 秒硬超时,并增加暂停超时的看门狗复位。
跨睡眠的"幻影退出"
按住 ⌘Q 的过程中合盖睡眠,唤醒后计时会接着上次的进度继续算,把你几小时前已经放弃的那次按住兑现成一次真实退出——向唤醒后最前面的 App 投递 ⌘Q,有丢失未保存内容的风险。现在进入睡眠时立即把状态机与 HUD 归零,并作废计时器。
进度环动画冻结
动画刷新所用显示链接在停止时没有被释放,启动时便一直复用睡眠前创建的那个(它绑定的是当时的显示器配置),睡眠或显示器变化后可能不再回调,表现为按住时进度环卡住不动。现在停止时释放、启动时按当前显示器重建。
图标着色路径的强制转换
将 as! 改为防御性转换,失败时优雅降级为不绘制图标而不是崩溃。此前本机曾在该路径上产生过一次崩溃报告(Swift runtime failure: unexpectedly found nil while unwrapping an Optional)。
🔧 改进
- 权限检查不再常驻轮询:原先未授权时每秒轮询一次、且计时器永不失效,会跑满整个进程生命周期;现在统一由 5 秒看门狗承担,授权恢复后会自动装好拦截并刷新菜单。
- 简化启动保活:移除冗余的 objc 关联对象,只保留一种持有方式,消除关联键地址冲突的隐患。
- 日志格式修正,并补上"重新打开应用"路径下的空值保护。
📥 下载 / Download
| 文件 | 说明 |
|---|---|
SlowQ-1.0.9-macos-universal.dmg |
推荐。打开后把 SlowQ(慢Q)拖进 Applications |
SlowQ-1.0.9-macos-universal.zip |
解压后拖进 Applications |
通用二进制,macOS 13 Ventura 及以上,支持 Apple Silicon 与 Intel Mac。
⚠️ 首次打开必读
本应用未经 Apple 开发者签名与公证,macOS 会拦截首次启动。执行一次:
xattr -dr com.apple.quarantine /Applications/SlowQ.app🔑 授予辅助功能权限
系统设置 → 隐私与安全性 → 辅助功能 → 勾选「慢Q」。
升级提示:覆盖安装后辅助功能授权可能失效(adhoc 签名随二进制变化)。若拦截不工作,执行
tccutil reset Accessibility com.slowq.app后重新勾选。
本次升级强烈建议执行这一条 —— 这个版本专门修的就是"拦截静默失效",如果授权没勾上,会看起来像是没修好。
English
Fixed: ⌘Q interception died after closing the lid
Symptom: after sleeping the Mac (closing the lid) and waking it, holding ⌘Q no longer showed the progress ring and ⌘Q went straight through to the frontmost app — yet 慢Q was still running with its menu bar icon present. Only restarting the app brought it back.
Cause: sleep invalidates the Mach port behind the event tap, while the app's reference to it stayed non-nil and was therefore treated as healthy:
- once invalidated the callback is never invoked again — and the "re-enable when the system disables it" recovery lived inside that callback, i.e. attached to the thing that had already died;
- the install routine bailed out early whenever the reference was merely non-nil, so every recovery path was blocked;
- the app only observed the "terminate" notification, so nothing ever triggered a rebuild after wake.
Fix: sleep/wake, unlock/session-activation and display-configuration notifications are now observed; liveness is decided by actual port validity; a dead tap is fully rebuilt; and a 5-second watchdog backstops it — because once the tap dies, only an external check can notice.
Fixed: memory leak during long runs
The event callback over-retained every event it passed through. The tap subscribes to every keystroke system-wide, so each key press leaked an event object. All six sites now use the correct non-retaining return.
Fixed: interception could wedge permanently after a synthetic quit
After a full hold, interception is briefly paused while a ⌘Q is sent to the frontmost app. The "wait for ⌘ release" poll had neither a timeout nor an owner: if the key-up was swallowed by the sleep transition, the paused state persisted forever, leaving the tap physically disabled with nobody to recover it — the same symptom as the headline bug. A 1.5 s hard timeout and a paused-state watchdog reset were added.
Fixed: phantom quit across sleep
Sleeping mid-hold let the timer resume where it left off after wake, cashing in a hold you had abandoned hours earlier as a real quit — posting ⌘Q to whatever app was frontmost, with a risk of losing unsaved work. State and HUD are now reset on sleep and the timer invalidated.
Fixed: frozen progress ring
The animation display link was never released on stop, so it kept reusing the one created against the pre-sleep display configuration and could stop delivering callbacks after sleep or a display change. It is now released on stop and rebuilt against the current display on start.
Fixed: force cast on the icon tinting path
as! replaced with a defensive conversion that degrades to "no icon" instead of crashing. This path had previously produced a crash report on this machine (Swift runtime failure: unexpectedly found nil while unwrapping an Optional).
Improvements
- No more permanent permission polling: the old 1 Hz poll (never invalidated) ran for the whole process lifetime when permission was not granted; it is now covered by the 5 s watchdog, which installs the tap and refreshes the menu once permission returns.
- Simpler startup ownership: the redundant objc associated object was removed, leaving a single retention mechanism.
- Log format corrected, plus a nil guard on the "reopen app" path.
Upgrade note
Replacing the app changes the ad-hoc signature, so the Accessibility grant may be invalidated. If interception does not work, run tccutil reset Accessibility com.slowq.app and tick 慢Q again — this is strongly recommended for this release, since the whole point of the update is to stop interception from failing silently.
Download the .dmg or .zip below (universal binary, macOS 13+). Clear the quarantine flag once, then grant Accessibility permission.
SlowQ v1.0.8
SlowQ v1.0.8 · 慢Q
提示条移到屏幕顶部并严格居中。
Toast moved to the top of the screen and always centred.
✨ 调整
提示条位置:屏幕中央 → 屏幕顶部居中
之前「图标已隐藏 / 已恢复」的提示条出现在屏幕中间偏下的位置。现在改为:
- 位置固定在屏幕顶部 —— 菜单栏正下方 10pt,视觉上属于"系统通知"区域,不遮挡内容
- 严格水平居中 —— 对齐
visibleFrame的中心(而非整个屏幕,避免多显示器/刘海屏偏移) - 宽度自适应内容 —— 卡片宽度按文字实际宽度计算并夹在 240–680pt 之间,短提示不会被撑成大块,长提示也不会被截断;任何宽度都保持居中
- 胶囊形圆角 —— 圆角半径取高度一半,顶部提示看起来更轻盈
实测两种长度的提示条(由应用自身打印坐标验证):
| 提示内容 | 宽度 | 位置 | 居中 | 距顶部 |
|---|---|---|---|---|
| 菜单栏图标已隐藏 · 再次打开 慢Q 即可恢复 | 314pt | x=707 | ✓ | 43pt |
| 菜单栏图标已恢复 | 240pt | x=744 | ✓ | 43pt |
两者中心都落在 864pt(= 屏幕中心),宽度不同但都严格居中。
📥 下载 / Download
| 文件 | 说明 |
|---|---|
SlowQ-1.0.8-macos-universal.dmg |
推荐。打开后把 SlowQ(慢Q)拖进 Applications |
SlowQ-1.0.8-macos-universal.zip |
解压后拖进 Applications |
通用二进制,macOS 13 Ventura 及以上,支持 Apple Silicon 与 Intel Mac。
⚠️ 首次打开必读
本应用未经 Apple 开发者签名与公证,macOS 会拦截首次启动。执行一次:
xattr -dr com.apple.quarantine /Applications/SlowQ.app🔑 授予辅助功能权限
系统设置 → 隐私与安全性 → 辅助功能 → 勾选「慢Q」。
升级提示:覆盖安装后辅助功能授权可能失效(adhoc 签名随二进制变化)。若拦截不工作,执行
tccutil reset Accessibility com.slowq.app后重新勾选。
English
Toast relocated: centre of screen → top centre
The "icon hidden / icon restored" toast used to appear slightly below the middle of the screen. Now:
- Pinned to the top of the screen — 10 pt below the menu bar, where users expect system notifications, so it never covers content
- Strictly horizontally centred — aligned to
visibleFrame's centre rather than the full screen, so notched and multi-display setups stay correct - Width adapts to the text — clamped to 240–680 pt, so short messages don't become huge blocks and long ones aren't truncated; every width stays centred
- Capsule corners — radius is half the height, which reads lighter for a top-of-screen toast
Measured with the app logging its own frame:
| Message | Width | x | Centred | From top |
|---|---|---|---|---|
| menu bar icon hidden · open 慢Q again to restore | 314 pt | 707 | ✓ | 43 pt |
| menu bar icon restored | 240 pt | 744 | ✓ | 43 pt |
Both centres land on 864 pt (the screen centre) — different widths, both strictly centred.
Download the .dmg or .zip below (universal binary, macOS 13+). Clear the quarantine flag once, then grant Accessibility permission.
SlowQ v1.0.7
SlowQ v1.0.7 · 慢Q
修复「隐藏菜单栏图标后就找不回来」的问题。
Fixes: once the menu bar icon was hidden there was no way to bring it back.
🐛 修复:隐藏图标后无法恢复
问题
v1.0.6 引入「隐藏菜单栏图标」时,设计的找回方式是"重启应用后图标会显示 10 秒"。但实际根本行不通:
隐藏后应用仍在后台运行。再次打开它并不会重启进程,
applicationDidFinishLaunching不会再次执行,
那个 10 秒逃生窗口永远不会触发 —— 而且此时连菜单都没有了,无法退出应用,只能去活动监视器强杀。
修复
1. 再次打开应用即可恢复(核心修复)
实现了 applicationShouldHandleReopen:在启动台 / 应用程序文件夹 / Dock 里再点一次 慢Q(哪怕它已经在运行),图标立刻回来,并自动清除隐藏设置。
实测:图标恢复 ✓、进程数仍为 1 ✓(不会重复启动)、重启后保持可见 ✓。
2. 隐藏当场给出提示
点击隐藏时,屏幕中央立刻弹出一条提示条(不依赖通知权限、不抢焦点):
菜单栏图标已隐藏 · 再次打开 慢Q 即可恢复
3. 菜单项自说明
菜单项标题改为「隐藏菜单栏图标(再次打开应用可恢复)」,在点击之前就说明后果。
4. 保留启动时的 10 秒窗口
启动后图标先显示 10 秒(菜单顶部有提示),这期间打开菜单也会取消隐藏。
另外查清了 macOS 的行为:它会把状态栏项的可见性持久化到应用偏好里
(能看到NSStatusItem VisibleCC Item-0 = 0),所以隐藏过一次后,重启时新建的实例默认仍是隐藏的 ——
这也是为什么必须显式置为可见。
📥 下载 / Download
| 文件 | 说明 |
|---|---|
SlowQ-1.0.7-macos-universal.dmg |
推荐。打开后把 SlowQ(慢Q)拖进 Applications |
SlowQ-1.0.7-macos-universal.zip |
解压后拖进 Applications |
通用二进制,macOS 13 Ventura 及以上,支持 Apple Silicon 与 Intel Mac。
⚠️ 首次打开必读
本应用未经 Apple 开发者签名与公证,macOS 会拦截首次启动。执行一次:
xattr -dr com.apple.quarantine /Applications/SlowQ.app🔑 授予辅助功能权限
系统设置 → 隐私与安全性 → 辅助功能 → 勾选「慢Q」。
升级提示:覆盖安装后辅助功能授权可能失效(adhoc 签名随二进制变化)。若拦截不工作,执行
tccutil reset Accessibility com.slowq.app后重新勾选。
English
Fixed — hiding the menu bar icon was a one-way trip
The problem. v1.0.6 shipped "hide menu bar icon" with a safety net: every launch shows the icon for 10 seconds. In practice that never fires:
The app keeps running in the background after hiding. Opening it again does not relaunch the process, so
applicationDidFinishLaunchingnever runs again — and with the menu gone you cannot even quit it, short of
force-quitting from Activity Monitor.
The fix.
- Open the app again to restore it — implemented
applicationShouldHandleReopen. Clicking 慢Q once more in Launchpad / Applications / the Dock (even while it is running) brings the icon straight back and clears the hidden setting. Verified: icon restored, still exactly one process, and it stays visible after a relaunch. - A toast on hide — an on-screen card appears immediately (no notification permission, no focus stealing):
菜单栏图标已隐藏 · 再次打开 慢Q 即可恢复. - Self-documenting menu item — renamed to
隐藏菜单栏图标(再次打开应用可恢复)so the consequence is clear before you click. - The 10-second launch window remains — the icon shows for 10 s on every launch, and opening the menu during that window cancels the hide.
Also confirmed how macOS behaves: it persists status item visibility in the app's preferences (
NSStatusItem VisibleCC Item-0 = 0), which is why a newly created item stays hidden after a previous hide — and why the item must be forced visible explicitly.
Download the .dmg or .zip below (universal binary, macOS 13+). Clear the quarantine flag once, then grant Accessibility permission.
SlowQ v1.0.6
SlowQ v1.0.6 · 慢Q
一组实用功能:隐藏菜单栏图标、登录时自动启动、定时暂停、关于。
Practical additions: hide the menu bar icon, launch at login, timed pause, About.
✨ 新增功能
🙈 隐藏菜单栏图标
不想让图标占菜单栏空间时可以隐藏。隐藏后拦截依然生效,只是没有菜单入口了。
为了不会「藏丢」,做了一个逃生窗口:
- 每次启动应用,图标都会先显示 10 秒,菜单顶部提示「⏱ 菜单栏图标将在启动 10 秒后隐藏(打开菜单即保留)」
- 这 10 秒内打开一次菜单即取消本次隐藏,图标保留到退出为止
- 想找回图标:退出并重新打开 慢Q 即可
实现上踩到一个坑:macOS 会持久化状态栏项的可见性,所以隐藏过一次后,重启时新建的实例默认仍是隐藏的——逃生窗口根本不出现。修复方式是每次启动显式
isVisible = true,再由定时器决定是否隐藏。
🚀 登录时自动启动
基于系统的 SMAppService 登录项(而非已废弃的 LSSharedFileList),菜单里一键开关,状态带 ✓ 标记。
需要应用位于「应用程序」文件夹。若在开发目录里点击,会看到明确的错误提示 —— 系统不允许从任意路径注册登录项。
⏸ 定时暂停
「暂停拦截」提供 5 / 15 / 60 分钟,到点自动恢复,不用记得手动开回来。暂停期间菜单实时显示「还剩约 N 分钟」,也可随时点「立即恢复拦截」。
适合「接下来要连续退出好几个应用」的场景 —— 之前只能手动停用,然后常常忘记重新启用。
ℹ️ 关于
显示版本号与项目地址,一键跳转 GitHub。
📥 下载 / Download
| 文件 | 说明 |
|---|---|
SlowQ-1.0.6-macos-universal.dmg |
推荐。打开后把 SlowQ(慢Q)拖进 Applications |
SlowQ-1.0.6-macos-universal.zip |
解压后拖进 Applications |
通用二进制,macOS 13 Ventura 及以上,支持 Apple Silicon 与 Intel Mac。
⚠️ 首次打开必读
本应用未经 Apple 开发者签名与公证,macOS 会拦截首次启动。执行一次:
xattr -dr com.apple.quarantine /Applications/SlowQ.app或在 Finder 里右键 → 打开 → 弹窗里再点 打开。
🔑 授予辅助功能权限
系统设置 → 隐私与安全性 → 辅助功能 → 勾选「慢Q」。
升级提示:覆盖安装后辅助功能授权可能失效(adhoc 签名随二进制变化)。若拦截不工作,执行
tccutil reset Accessibility com.slowq.app后重新勾选。
English
New in this release
- Hide menu bar icon — interception keeps working while the icon is hidden. Every launch shows the icon for the first 10 seconds with a menu hint; opening the menu during that window keeps it for the session. So the icon can never be lost — quit and relaunch to get it back.
Gotcha found while building this: macOS persists status item visibility, so after one hide a freshly created item is still hidden on the next launch and the 10-second window never appeared. Fixed by explicitly setting
isVisible = trueon every launch and letting a timer decide. - Launch at login — uses the modern
SMAppServicelogin item (not the deprecatedLSSharedFileList), toggled from the menu with a ✓ indicator. The app must live in/Applications; registering from a dev folder shows a clear error. - Timed pause — pause for 5 / 15 / 60 minutes and it re-enables itself, with the remaining time shown live in the menu and an "resume now" action. Handy when you need to quit several apps in a row.
- About — shows the version and links to the project.
Download the .dmg or .zip below (universal binary, macOS 13+). Clear the quarantine flag once, then grant Accessibility permission. After upgrading over an older build the grant may need re-applying via tccutil reset Accessibility com.slowq.app.
SlowQ v1.0.5
SlowQ v1.0.5 · 慢Q
自定义磁盘卷图标:挂载 DMG 后,桌面与 Finder 里显示一枚专属安装盘图标。
Custom volume icon for the disk image.
✨ 本次改动
自绘的卷图标
之前挂载 DMG 后显示的是系统通用磁盘图标(或直接套用 App 图标)。现在改为专门绘制的安装盘造型:
- 圆角金属机身 + 顶部高光渐变
- 底部接缝分色,带一枚绿色电源指示灯(含光晕)
- 机身中央是白色蜗牛 logo(深色底上清晰可辨)
- 配色与安装界面横幅一致,整条安装体验视觉统一
由 tools/gen-volumeicon.swift 用代码绘制,无外部设计资源;输出 1024px 底图后经 sips + iconutil 生成 .VolumeIcon.icns。
应用本身与 v1.0.4 完全一致,本版只更新安装盘外观。
🐛 顺带修掉的两个打包坑
这两个问题都只有实际制作镜像时才会暴露,已在新脚本里绕开并写进注释:
1. Finder 会删掉 .VolumeIcon.icns
若在 hdiutil create 之前把卷图标放进暂存目录,Finder 打开该卷设置视图时会把它删除,最终镜像里就没有卷图标了。改为先只在临时目录生成 icns,等 Finder 设置完视图后再写入已挂载的卷。
2. 残留同名卷会让退盘静默失败
制作过程中若留下 /Volumes/SlowQ 1 这类残留挂载,Finder 里会出现两个同名磁盘,eject disk "SlowQ" 无法定位、静默失败,进而回退到强制卸载 —— 而强制卸载会丢失刚设置好的视图。现在脚本在开始前会预清理同名残留卷,并在写入卷图标后 sync 强制落盘。
顺带说明为什么卸载必须交给 Finder:直接
hdiutil detach时 Finder 会用内存里的旧快照覆盖.DS_Store(实测字节数从 10244 掉回 6148,背景图与图标大小全丢),只有 Finder 自己退盘才会先刷盘。
📥 下载 / Download
| 文件 | 说明 |
|---|---|
SlowQ-1.0.5-macos-universal.dmg |
推荐。打开后把 SlowQ(慢Q)拖进 Applications |
SlowQ-1.0.5-macos-universal.zip |
解压后拖进 Applications |
通用二进制,macOS 13 Ventura 及以上,支持 Apple Silicon 与 Intel Mac。
⚠️ 首次打开必读
本应用未经 Apple 开发者签名与公证,macOS 会拦截首次启动。执行一次:
xattr -dr com.apple.quarantine /Applications/SlowQ.app或在 Finder 里右键 → 打开 → 弹窗里再点 打开。
🔑 授予辅助功能权限
系统设置 → 隐私与安全性 → 辅助功能 → 勾选「慢Q」。未授权时菜单栏图标仍会显示,菜单里也提供了直接跳转设置的入口。
升级提示:覆盖安装后辅助功能授权可能失效(adhoc 签名随二进制变化)。若拦截不工作,执行
tccutil reset Accessibility com.slowq.app后重新勾选。
English
Custom volume icon
Mounting the disk image now shows a purpose-drawn installer-disk icon instead of the generic system volume icon:
- Rounded metallic body with a top gloss gradient
- A seam near the bottom with a green power LED (with glow)
- The snail logo rendered white in the centre so it reads clearly on the dark body
- Colours matched to the installer banner for a consistent experience
Drawn entirely in code by tools/gen-volumeicon.swift; a 1024px master is converted to .VolumeIcon.icns via sips + iconutil.
The app itself is identical to v1.0.4 — this release only changes how the disk image looks.
Two packaging bugs fixed along the way
1. Finder deletes .VolumeIcon.icns — if the icon is placed in the staging folder before hdiutil create, Finder removes it when it opens the volume to apply the view settings, so the final image ends up with no volume icon. The script now generates the icns in a temp directory and copies it onto the mounted volume after Finder has done its work.
2. A stale same-named volume makes ejecting fail silently — a leftover mount such as /Volumes/SlowQ 1 makes Finder see two disks with the same name, so eject disk "SlowQ" cannot resolve and fails without an error, which falls back to a forced detach that discards the view settings. The script now pre-cleans stale mounts and runs sync after writing the icon.
Reminder on why the volume must be ejected by Finder: a plain
hdiutil detachlets Finder overwrite.DS_Storewith its stale in-memory snapshot (measured: 10244 bytes back down to 6148, losing the background and icon size). Only Finder's own eject flushes first.
Download the .dmg or .zip below (universal binary, macOS 13+). Clear the quarantine flag once, then grant Accessibility permission. After upgrading over an older build the grant may need re-applying via tccutil reset Accessibility com.slowq.app.
SlowQ v1.0.4
SlowQ v1.0.4 · 慢Q
品牌强化:新增中文名「慢Q」、副标题与中英 Slogan。
Branding update: Chinese name 慢Q, subtitle and bilingual slogans.
🏷 命名
| 项 | 内容 |
|---|---|
| 应用名 | SlowQ |
| 中文名 | 慢Q |
| 中文副标题 | 防误触退出助手 |
| App Store 标题 | 慢Q - 防误触退出 |
| GitHub 描述 | SlowQ(慢Q)—— 防止误触 Command+Q 退出的 macOS 菜单栏工具 |
| 中文 Slogan | 退一步,再确认。 |
| 英文 Slogan | Slow down quitting. |
✨ 本次改动
应用内
- 中文系统下应用名显示为 慢Q,英文系统显示 SlowQ —— 通过
InfoPlist.strings按系统语言本地化 - 菜单里的退出项改为「退出 慢Q (⌥⌘Q)」
- 补充
LSApplicationCategoryType(工具类),为后续上架做准备 - 新增
CFBundleLocalizations,声明支持简体中文与英文
⚠️ 注意:本地化后,Finder 图标名与「系统设置 → 辅助功能」列表里显示的是「慢Q」。授权时请在列表中找「慢Q」(英文系统为 SlowQ)。
安装界面
顶部横幅改为完整的品牌区:
🐌 SlowQ 慢Q
防误触退出助手 · 退一步,再确认。
Slow down quitting.
仓库与文档
- GitHub / Gitee 仓库描述统一为:SlowQ(慢Q)—— 防止误触 Command+Q 退出的 macOS 菜单栏工具
- 中英 README 的标题区加入中文名、副标题与 Slogan
- 新增「命名与品牌」对照表,便于上架 App Store 时复用
📥 下载 / Download
| 文件 | 说明 |
|---|---|
SlowQ-1.0.4-macos-universal.dmg |
推荐。打开后把 SlowQ(慢Q)拖进 Applications |
SlowQ-1.0.4-macos-universal.zip |
解压后拖进 Applications |
通用二进制,macOS 13 Ventura 及以上,支持 Apple Silicon 与 Intel Mac。
⚠️ 首次打开必读
本应用未经 Apple 开发者签名与公证,macOS 会拦截首次启动。执行一次:
xattr -dr com.apple.quarantine /Applications/SlowQ.app或在 Finder 里右键 → 打开 → 弹窗里再点 打开。
🔑 授予辅助功能权限
系统设置 → 隐私与安全性 → 辅助功能 → 勾选「慢Q」。未授权时菜单栏图标仍会显示,菜单里也提供了直接跳转设置的入口。
升级提示:覆盖安装后辅助功能授权可能失效(adhoc 签名随二进制变化)。若拦截不工作,执行
tccutil reset Accessibility com.slowq.app后重新勾选。
English
Naming
| Item | Value |
|---|---|
| App name | SlowQ |
| Chinese name | 慢Q |
| Chinese subtitle | 防误触退出助手 |
| App Store title | 慢Q - 防误触退出 |
| GitHub description | SlowQ(慢Q)—— 防止误触 Command+Q 退出的 macOS 菜单栏工具 |
| Chinese slogan | 退一步,再确认。 |
| English slogan | Slow down quitting. |
What changed
- The app now displays as 慢Q on Chinese-locale systems and SlowQ on English ones, localized via
InfoPlist.strings. - The Quit menu item reads
退出 慢Q (⌥⌘Q). - Added
LSApplicationCategoryType(Utilities) andCFBundleLocalizations. - Note: because of the localization, the Finder icon label and the Accessibility permission entry read 慢Q on Chinese systems — look for 慢Q when granting permission (English systems show SlowQ).
- The installer banner now shows the full brand block:
SlowQ 慢Q/防误触退出助手 · 退一步,再确认。/Slow down quitting. - Repository descriptions on GitHub and Gitee updated; both READMEs gained the Chinese name, subtitle, slogans and a naming reference table.
Download the .dmg or .zip below (universal binary, macOS 13+). Clear the quarantine flag once, then grant Accessibility permission. After upgrading over an older build the grant may need re-applying via tccutil reset Accessibility com.slowq.app.
SlowQ v1.0.3
SlowQ v1.0.3
全新的 DMG 安装界面。· A redesigned DMG installer.
✨ 新的安装界面
打开 DMG 不再是朴素的白底加两个图标,而是一个完整的引导页:
- 顶部品牌横幅 —— 深色渐变底 + 蜗牛 logo + 应用名 + 中英双语一句话说明
- 中间拖拽指引 —— 连接 app 与「应用程序」文件夹的弧形箭头
- 底部双语说明 —— 中文主说明 + 英文对照,并附首次打开被 Gatekeeper 拦截时的终端命令
- 命令行代码框 —— 需要执行的
xattr命令单独放在圆角框里,方便对照输入 - 卷图标 —— 挂载后在 Finder 侧边栏显示蜗牛图标
- 窗口 —— 隐藏工具栏与状态栏,图标 128px,窗口尺寸与背景精确对齐
🔍 顺带修掉的一个渲染问题
初版安装界面的背景与文字在 Retina 屏幕上明显发虚。定位过程:
- 先怀疑字号太小 → 放大字号、提高对比度,仍然发虚
- 测量屏幕捕获的锐度:文字边缘对比度只有源图的一半
- 关键发现:Finder 会把背景图等比缩放到窗口大小,并不会按
background@2x.png命名去挑选 2x 图
所以只提供 1x 图时,它在 Retina 上被放大 2 倍 → 必然发虚。改为直接输出 2x 像素尺寸的背景图(1360×520 pt 的设计导出 1360×1040 px),缩放后正好与屏幕像素 1:1 对应。
实测中文说明行的文字边缘对比度(95 分位):
| 方案 | 边缘对比度 |
|---|---|
| 1x 图(被放大 2 倍) | 0.2235 |
| 2x 像素图(1:1 映射) | 0.4627(约 2 倍) |
同时 DMG 体积反而更小(629 KB → 516 KB),因为不再需要同时塞入两份背景图。
📦 其他
- 新增
tools/make-dmg.sh:独立的 DMG 制作脚本,处理暂存目录、Finder 视图设置、退盘与压缩 - 新增
tools/gen-dmgbackground.swift:安装界面背景生成器(纯代码绘制,无外部设计资源) release.sh的 DMG 环节改为调用make-dmg.sh
卸载方式的一个坑:设置 Finder 视图后不能用
hdiutil detach直接卸载 —— Finder 会在卸载时用内存里的旧快照覆盖.DS_Store,背景图与图标大小全部丢失。必须交给 Finder 自己eject才会先刷盘。这个坑已在新脚本里绕开并注释说明。
📥 下载 / Download
| 文件 | 说明 |
|---|---|
SlowQ-1.0.3-macos-universal.dmg |
推荐。打开后把 SlowQ 拖进 Applications |
SlowQ-1.0.3-macos-universal.zip |
解压后把 SlowQ.app 拖进 Applications |
应用本身与 v1.0.2 功能完全相同,本次只改进了安装界面 —— 已经在用 v1.0.2 的话无需重新安装。
通用二进制,macOS 13 Ventura 及以上,支持 Apple Silicon 与 Intel Mac。
⚠️ 首次打开必读
本应用未经 Apple 开发者签名与公证,macOS 会拦截首次启动。执行一次:
xattr -dr com.apple.quarantine /Applications/SlowQ.app或在 Finder 里右键 SlowQ.app → 打开 → 弹窗里再点 打开。
🔑 授予辅助功能权限
系统设置 → 隐私与安全性 → 辅助功能 → 勾选 SlowQ。未授权时菜单栏图标仍会显示,菜单里也提供了直接跳转设置的入口。
English
New DMG installer
Opening the disk image now shows a proper guided layout instead of a plain white background: a dark gradient banner with the snail logo, app name and a one-line pitch; a curved drag arrow between the app and the Applications folder; bilingual instructions at the bottom including the terminal command needed if Gatekeeper blocks the first launch; and a custom volume icon.
Fixed — soft/blurry background on Retina
The first version of the installer looked visibly soft. Enlarging the fonts and raising contrast did not help. Measuring the screen capture showed the text edge contrast was only half that of the source image.
Root cause: Finder scales the background picture to fit the window — it does not look for a background@2x.png sibling. Providing only a 1x image means it gets upscaled 2× on a Retina display. The fix is to ship the background at 2× pixel dimensions (a 680×520 pt design exported at 1360×1040 px), which maps 1:1 to screen pixels after scaling.
Measured 95th-percentile edge contrast for a line of Chinese text:
| Approach | Edge contrast |
|---|---|
| 1x image (upscaled 2×) | 0.2235 |
| 2x-pixel image (1:1) | 0.4627 (≈2×) |
The DMG also got smaller (629 KB → 516 KB) since only one background image is needed now.
Notes
- New
tools/make-dmg.shandtools/gen-dmgbackground.swift;release.shnow delegates DMG creation. - Setting up the Finder view means you cannot detach with
hdiutil detach— Finder overwrites.DS_Storewith its stale in-memory snapshot on unmount, losing the background and icon size. The volume must be ejected by Finder itself so it flushes first. The new script handles this.
The app itself is functionally identical to v1.0.2 — this release only improves the installer, so existing users need not reinstall. Universal binary, macOS 13+. Clear the quarantine flag once before first launch (xattr -dr com.apple.quarantine /Applications/SlowQ.app), then grant Accessibility permission.
SlowQ v1.0.2
SlowQ v1.0.2
菜单栏图标改为全自动、新增 0.5 秒长按档位、修复 App 图标被拉伸。·
Auto menu bar icon, a 0.5s hold option, and an App icon no longer stretched.
🐛 修复
App 图标被纵向拉伸
源图 SlowQ.png 是横版 384×256(宽高比 1.50),而 macOS 的 App 图标画布必须是正方形。构建脚本原先用 sips -z N N 直接缩放,等于把横版图强行压成正方形 —— 图形被纵向撑高变形。
新增 tools/gen-appicon.swift:先裁到内容包围盒,再按原始宽高比等比放入 1024×1024 正方形画布并居中留白(图形最长边占画布 86%,接近 macOS 图标安全区),最后才缩放成各尺寸。
修复前后对比(实测 icns 位图):
| 内容宽高比 | |
|---|---|
| v1.0.1 | 1.00 ✗(被拉伸) |
| v1.0.2 | 1.49–1.50 ✓(与源图一致) |
✨ 改进
菜单栏图标:移除手动切换,始终自动
v1.0.1 在菜单里提供「自动 / 单色 / 彩色」三态切换,但实际选择对大多数人是多余的 —— 自动识别已经能正确处理。本版移除该菜单项,行为固定为自动:
- 单色图标(如纯黑剪影)→ 模板模式,系统按菜单栏明暗渲染(深色→白、浅色→黑)
- 有真实彩色 → 保留原色
需要强制指定时可继续用隐藏开关:
defaults write com.slowq.app statusIconTemplate -bool true # 强制单色
defaults write com.slowq.app statusIconTemplate -bool false # 强制彩色
defaults delete com.slowq.app statusIconTemplate # 回到自动长按档位新增 0.5 秒
菜单「按住时长」现在提供 0.5 / 1 / 2 / 3 / 5 秒。0.5 秒适合已经习惯长按、只想防「手滑一碰」的场景。
📥 下载 / Download
| 文件 | 说明 |
|---|---|
SlowQ-1.0.2-macos-universal.dmg |
推荐。打开后把 SlowQ 拖进 Applications |
SlowQ-1.0.2-macos-universal.zip |
解压后把 SlowQ.app 拖进 Applications |
通用二进制,macOS 13 Ventura 及以上,支持 Apple Silicon 与 Intel Mac。
⚠️ 首次打开必读
本应用未经 Apple 开发者签名与公证,macOS 会拦截首次启动。执行一次:
xattr -dr com.apple.quarantine /Applications/SlowQ.app或在 Finder 里右键 SlowQ.app → 打开 → 弹窗里再点 打开。
🔑 授予辅助功能权限
系统设置 → 隐私与安全性 → 辅助功能 → 勾选 SlowQ。未授权时菜单栏图标仍会显示,菜单里也提供了直接跳转设置的入口(⚠️ 打开辅助功能设置)。授权后自动生效,无需重启。
升级提示:覆盖安装后辅助功能授权可能失效(adhoc 签名随二进制变化)。若拦截不工作,执行
tccutil reset Accessibility com.slowq.app后重新勾选。
English
Fixed — App icon was stretched vertically
The source artwork is landscape 384×256 (aspect 1.50) but a macOS app icon canvas must be square. The build script used sips -z N N, which squashed the artwork into a square and stretched it vertically.
The new tools/gen-appicon.swift crops to the content bounds, then fits the artwork into a 1024×1024 canvas at its original aspect ratio, centered with margin (longest edge at 86% of the canvas), and only then scales down to each icon size.
| Content aspect ratio | |
|---|---|
| v1.0.1 | 1.00 ✗ (stretched) |
| v1.0.2 | 1.49–1.50 ✓ (matches source) |
Changed — menu bar icon is now always automatic
v1.0.1 exposed an Auto/Mono/Color cycle in the menu, but the choice is redundant for most people. This release removes that menu item; behavior is fixed to auto-detection: monochrome artwork becomes a template image (rendered white on dark menu bars, black on light ones), colored artwork keeps its colors.
A hidden override remains available via defaults write com.slowq.app statusIconTemplate -bool true|false (delete the key to return to auto).
Added — 0.5-second hold option
The hold duration menu now offers 0.5 / 1 / 2 / 3 / 5 seconds. The 0.5s setting suits users who are already used to holding and only want protection against a single accidental tap.
Download the .dmg or .zip below (universal binary, macOS 13+). Clear the quarantine flag once, then grant Accessibility permission in System Settings → Privacy & Security → Accessibility. After upgrading over an older build the grant may need re-applying — use the menu entry, or tccutil reset Accessibility com.slowq.app and re-tick.
SlowQ v1.0.1
SlowQ v1.0.1
修复深色菜单栏下图标隐形的问题。· Fixes the invisible menu bar icon on dark menu bars.
🐛 修复
菜单栏图标在深色菜单栏下隐形
v1.0.0 使用彩色模式渲染菜单栏图标,而当前图标是纯黑剪影(rgb(0,0,0) + 透明背景)。深色菜单栏(深色外观,或浅色外观配深色壁纸)下,黑图标配黑背景就看不见了。
v1.0.1 改为自动识别:
- 加载图标时采样像素,若所有不透明像素的 RGB 三通道差异都很小(阈值 0.12),判定为单色
- 单色图标 → 自动使用模板模式,由系统按菜单栏明暗渲染(深色→白色、浅色→黑色)
- 有真实彩色信息 → 保持彩色模式,不损失配色
菜单项也从「彩色 / 单色」两态改为三态循环,保留手动控制:
菜单栏图标:自动 · 单色 → 单色(手动) → 彩色(手动) → 自动 · 单色
自动是默认值。若你之前手动设过彩色,升级后请点菜单切回「自动」(或在终端执行
defaults delete com.slowq.app statusIconTemplate)。
未授权时菜单栏不显示图标
v1.0.0 只在拿到辅助功能授权后才创建状态栏项,导致首次安装、还没授权时菜单栏完全没有 SlowQ 的痕迹,容易被误认为「应用没启动」。
v1.0.1 改为启动即显示菜单栏图标,无论是否已授权。
新增授权入口
未授权时,菜单里会多出一项:
⚠️ 打开辅助功能设置(需授权后才能拦截 ⌘Q)
点击直接跳到系统设置的辅助功能面板,省去手动翻找。
📥 下载 / Download
| 文件 | 说明 |
|---|---|
SlowQ-1.0.1-macos-universal.dmg |
推荐。打开后把 SlowQ 拖进 Applications |
SlowQ-1.0.1-macos-universal.zip |
解压后把 SlowQ.app 拖进 Applications |
通用二进制,macOS 13 Ventura 及以上,支持 Apple Silicon 与 Intel Mac。
⚠️ 首次打开必读
本应用未经 Apple 开发者签名与公证,macOS 会拦截首次启动。执行一次:
xattr -dr com.apple.quarantine /Applications/SlowQ.app或在 Finder 里右键 SlowQ.app → 打开 → 弹窗里再点 打开。
🔑 授予辅助功能权限
系统设置 → 隐私与安全性 → 辅助功能 → 勾选 SlowQ。未授权时 SlowQ 无法拦截 ⌘Q,但菜单栏图标仍会显示,菜单里也提供了直接跳转设置的入口。授权后无需重启,SlowQ 会自动检测并立即生效。
升级提示:从旧版覆盖安装后,辅助功能授权可能失效(adhoc 签名随二进制变化)。若菜单里出现
⚠️ 打开辅助功能设置,点击它重新勾选即可;若开关看着是开着的但仍无效,执行:tccutil reset Accessibility com.slowq.app然后重新打开 SlowQ 并重新勾选。
English
Fixes the invisible menu bar icon on dark menu bars. v1.0.0 rendered the icon in color mode, but the artwork is a pure black silhouette — invisible against a dark menu bar (dark appearance, or light appearance with a dark wallpaper).
v1.0.1 auto-detects the artwork: if every opaque pixel is effectively monochrome (RGB channel spread < 0.12) the icon is used as a template image, so macOS renders it white on dark menu bars and black on light ones. Genuinely colored artwork still renders in full color.
The menu toggle is now a three-state cycle, keeping manual control: Auto · Mono → Mono (manual) → Color (manual) → Auto · Mono.
Also fixed:
- No menu bar icon before accessibility is granted — the status item is now created at launch regardless of permission, so you can always see that SlowQ is running.
- New menu entry
⚠️ 打开辅助功能设置(shown only when not yet trusted) that jumps straight to the Accessibility pane.
Download the .dmg or .zip below (universal binary, macOS 13+). Clear the quarantine flag once before first launch:
xattr -dr com.apple.quarantine /Applications/SlowQ.appThen grant Accessibility permission in System Settings → Privacy & Security → Accessibility. After upgrading over an older build the grant may need to be re-applied (the ad-hoc signature changes with the binary); use the new menu entry, or tccutil reset Accessibility com.slowq.app and re-tick.