Repository navigation
Releases
Baby Lock 1.2.2
Baby Lock 1.2.2
Universal arm64 + x86_64, macOS 13+.
安全更新:更新包签名
- Ed25519 签名 — 从 1.2.2 起,每个 Release 的
BabyLock-macOS.zip都会附带.sig签名和.sha256。App 内置公钥,安装前先验证签名;签名缺失或不匹配时不会安装。 - 只信任 GitHub HTTPS — 下载地址会校验
https和 GitHub 域名,重定向后的最终地址也会校验。 - bundle 校验加强 — 除 bundle ID、版本号外,还会检查最低系统版本、解压目录边界和符号链接;复制到
/Applications后会再次验证签名和版本,失败自动恢复旧版本。 - 首次升级说明 — 1.2.1 自带的更新器还没有签名校验,所以 1.2.1 → 1.2.2 这一跳仍由旧版更新器完成。从 1.2.2 开始,之后的每次更新都必须通过 Ed25519 校验。想从第一次就使用签名校验,可以手动下载 1.2.2 并用下面的 SHA256/
.sig核对。
SHA256:
22eb9bb76ba6ece1fbf5abf46fdb05372e50a8af47c81e587d3fc655c273ab3a
签名公钥(Ed25519,base64):
6yX33wBdVhlOYROiJ8V+uonayrn2d3BN5Dm0EZhb714=
锁定修复
- 电源键短按 — 锁定期间不再放行电源键短按,避免“按一下电源键 → 睡眠 → 唤醒后已解锁”。
- 睡眠/合盖 — 系统睡眠或合盖后,唤醒时会自动重新进入锁定。
- 显示器变化 — 插拔显示器/扩展坞不再解除锁定;黑屏覆盖会按新的屏幕布局重建。
- 锁定期间的菜单 — 只显示“已锁定”和解除手势提示;Settings、Check for Updates、Quit 不再可点,避免关闭“屏蔽触控板”时孩子直接退出 App。
- 设置窗口 — 开始锁定时会自动关闭已经打开的设置窗口。
- 更新弹窗 — 锁定期间不再弹更新错误框;错误提示不会出现在黑屏后面。
- 解锁计时器 — 解锁进度计时器改为 common run-loop mode,菜单或 modal 打开时也能完成解锁。
稳定性修复
- 60 Hz 菜单重建 — 解锁进度不再每 1/60 秒重建整个菜单;菜单只在锁定/解锁状态真正变化时重建,并在菜单打开期间延迟重建。
- 更新器管道死锁 — 不再先
waitUntilExit()再读管道;输出写入临时文件并加超时,避免ditto/codesign输出过多时永久卡死。 - 主线程阻塞 — 更新解压和校验移到后台任务,不再冻结界面。
- 复制后校验/回滚 — 新 App 复制后再次验证签名和版本;失败会恢复旧版本。
- 权限修复 — 重启脚本写入或启动失败时不再直接退出 App;
tccutil非零退出会记录。 - PID 等待 — 安装/重启脚本的 PID 等待增加 60 秒超时,避免 PID 复用导致永久等待。
- 单实例 — 增加
LSMultipleInstancesProhibited和运行时检查,避免两个实例同时创建输入拦截。
限制
- 重启、强制关机或强退后不会恢复锁定;锁定状态只保存在内存中。
- 长按电源键 5–10 秒仍可强制关机,这是硬件逃生口。
- 解锁手势显示在 HUD 上;会阅读的孩子可以学会,因此它不是防大孩子的强安全锁。
- 外接键盘没有右 Command 时,解锁手势不可用;只能等待自动解锁或长按电源键强制关机。
- 同一用户下的其他程序、Voice Control、屏幕共享、MDM 远程管理等不受保护。
安装
下载 BabyLock-macOS.zip,用 Release 里的 BabyLock-macOS.zip.sha256 和 BabyLock-macOS.zip.sig 核对,然后解压并把 Baby Lock.app 放到 /Applications。版本为 ad-hoc 签名;如果首次打开被 Gatekeeper 拦截:
xattr -dr com.apple.quarantine "/Applications/Baby Lock.app"English
- Ed25519-signed updates — every release now ships
BabyLock-macOS.zip.sigand.sha256; the app pins the public key and refuses an update with a missing or invalid signature. - GitHub-only HTTPS — archive and signature URLs, including redirects, must be HTTPS on GitHub-controlled hosts.
- Stronger bundle checks — minimum macOS version, extraction boundary, symlink rejection, and a post-copy signature/version verification with rollback.
- First hop — the 1.2.1 updater does not verify signatures, so the 1.2.1 → 1.2.2 upgrade still uses the old path. From 1.2.2 onward, every update is signature-verified. Verify the SHA256/signature manually if you want the signed path from the start.
- Power key — the short press is blocked while locked; holding the hardware power button for 5–10 seconds still forces a shutdown.
- Sleep/display — the lock re-engages after sleep or lid close, and display changes rebuild the blackout instead of unlocking.
- Locked menu — Settings, Check for Updates, and Quit are unavailable until the lock is released; an open Settings window closes when the lock starts.
- Update alerts — no modal alerts over the lock overlay; the unlock progress timer now runs in common run-loop modes.
- Stability — no 60 Hz menu rebuild, no wait-before-read pipe deadlock, installer work moved off the main thread, post-copy verification with rollback, relaunch failure handling, PID-wait timeouts, and a single-instance guard.
- Limitations — reboot/force-quit does not restore the lock; the hardware power-button long press remains the escape hatch; the unlock gesture is visible on the HUD and is not a strong lock against older children; keyboards without a right Command key cannot use the gesture.
Baby Lock 1.2.1
Baby Lock 1.2.1
Universal arm64 + x86_64, macOS 13+.
修复
- 权限重置 — 重置权限后不再同时弹出系统授权提示并自动打开系统设置窗口;现在只保留系统授权提示,由用户确认后进入设置。
- 检查更新菜单项 — 修复菜单栏“检查更新”偶尔消失的问题;现在每次打开菜单都会重建该行,不需要重启恢复。
- 启动检查更新 — 启动后的检查改为后台静默执行。没有更新时菜单保持“检查更新”,不会显示“正在检查更新…”;只有发现新版本时才直接显示“有更新 vX.Y.Z — 点击安装”。
English
- Permission reset — no longer opens System Settings on top of the macOS permission prompt. The system prompt remains; the user chooses when to open settings.
- Check for Updates row — the row is rebuilt on every menu open, so it no longer disappears until relaunch.
- Silent launch check — the startup check no longer shows a checking state. The menu stays on “Check for Updates” when there is no update; only an available release changes the item.
安装
下载 BabyLock-macOS.zip,解压后把 Baby Lock.app 放到 /Applications。版本为 ad-hoc 签名;如果首次打开被 Gatekeeper 拦截:
xattr -dr com.apple.quarantine "/Applications/Baby Lock.app"已安装 1.2.0 的用户可以直接用菜单栏的 检查更新 升级到 1.2.1。
Baby Lock 1.2.0
Baby Lock 1.2.0
Universal arm64 + x86_64, macOS 13+.
新功能
- 多个豁免按键 — 锁定期间可同时保留多个独立按键。可添加 🌐 Fn、↩、
⌃、C、V等;组合键(如⌃C、⌃V)只需把每个键分别加入。 - 一键绑定 Fn 键 — 输入法抢先拦截 Fn 时,点“绑定 Fn 键”即可加入豁免,无需进入录制流程。
- 自动检查与安装更新 — 启动时检查 GitHub Release;菜单栏“检查更新”会原地显示“正在检查 / 未检测到更新 / 有更新”,无更新 3 秒后恢复。确认后自动下载、校验、替换并重启。
修复与改进
- 权限重置 — 新增“重置权限并重试”,修复系统设置看起来已授权、但 ad-hoc 新构建实际未被信任的问题;更新后自动引导重新授权。
- 权限页窗口尺寸 — 关闭
NSHostingController的固有尺寸约束,并按实际内容测量权限页高度,消除大块空白。 - 更新菜单 — 点击“检查更新”后菜单保持打开,可原地看到进度和结果。
- 锁定 HUD — 浮动提示窗的阴影不再出现硬边。
English
- Multiple exempt keys — keep several keys usable while locked; add each key of a shortcut separately (e.g.
⌃,C,V). - One-click Bind Fn key for input methods that intercept Fn.
- In-menu update checks with checking / no-update / update-available states, followed by automatic download, verification, install, and restart.
- Reset permissions and retry for stale TCC grants after ad-hoc builds and updates.
- Content-sized permissions window and a clean HUD shadow.
安装
下载 BabyLock-macOS.zip,解压后把 Baby Lock.app 放到 /Applications。版本为 ad-hoc 签名;如果首次打开被 Gatekeeper 拦截:
xattr -dr com.apple.quarantine "/Applications/Baby Lock.app"已安装 1.1.0 的用户可以直接用菜单栏的 检查更新 升级到 1.2.0。
Baby Lock 1.1.0
First Baby Lock release, based on CleanLock 1.0.2.
- Default mode keeps your desktop visible and shows a compact floating unlock hint.
- Optional full-screen blackout (off by default) for all displays or the main display only.
- Optional trackpad and mouse blocking (on by default).
- Five languages: English, 简体中文, 繁體中文, Français, Русский.
- New app icon and menu bar icon.
Unlock: hold the left and right Command keys for 3 seconds.
This build is ad-hoc signed, not notarized by Apple. If macOS says the app is damaged, run:
xattr -dr com.apple.quarantine "/Applications/Baby Lock.app"