一个原生 macOS 菜单栏应用,用主密码或 Touch ID 保护隐私应用。
- 使用主密码或 Touch ID 验证身份。
- 保护新启动或已经运行的 macOS 应用。
- 将主密码安全存储在当前用户的 Keychain 中。
- 可配置登录时自动启动。
- 可选择进程退出、离开应用或闲置 5/15/30 分钟后重新上锁。
- 支持批量添加、拖放、从运行中应用选择及安全重新定位。
- 提供简体中文和英文界面、键盘操作及 VoiceOver 标签。
- 完全使用 Swift、SwiftUI 和 macOS 公共 API 构建。
- 启动受保护应用时:MacAppLock 通过
NSWorkspace立即终止新进程,显示解锁窗口,验证成功后重新打开目标应用。 - 切换到已经运行的受保护应用时:先隐藏目标应用,并在 Dock 激活完成后复验;验证成功后恢复并激活。如果系统持续拒绝隐藏,MacAppLock 会终止目标进程,验证成功后再重新打开。
- 一次验证会信任该次运行的进程;退出并重新打开应用后需要再次验证。
- 锁屏、睡眠或切换用户会立即清除当前信任并隐藏受保护应用,返回后必须重新验证。
- 主密码保存在当前 Mac 的 Keychain 中,不会写入 UserDefaults 或普通文件。
- 打开设置和退出保护同样需要验证;设置验证后会保留 5 分钟的管理权限,敏感操作会再次检查是否过期。
macOS 的公共 API 无法在第三方应用进程创建之前阻止 LaunchServices 启动它。当前实现使用公开 API 的最早通知点处理,少数应用的窗口可能会短暂闪现。若要做到内核级的启动前拦截,需要 Apple 单独审批的 Endpoint Security entitlement,不适合普通分发应用。
要求 macOS 13 或更高版本、Xcode 15 或更高版本。
克隆并运行:
git clone https://github.com/BuildWu19940706/MacAppLock.git
cd MacAppLock
swift run MacAppLock生成可安装的应用包:
./scripts/package_app.sh产物位于 dist/MacAppLock.app。将它拖入 /Applications 后启动,再在设置中开启“登录 Mac 时自动启动”。开发版本使用 ad-hoc 签名;正式发布时应替换为 Developer ID 签名并进行 notarization。
生成适合 GitHub Release 的 ZIP 和 SHA-256 校验文件:
./scripts/package_release.sh产物为同时支持 Apple Silicon 和 Intel Mac 的 Universal 开发预览版:
dist/MacAppLock-v<版本>-macOS-universal-development-preview.zip
dist/MacAppLock-v<版本>-macOS-universal-development-preview.zip.sha256
也可以从 Releases 下载公开发布的开发预览版。
Warning
GitHub 开发预览版使用 ad-hoc 签名,未使用 Developer ID,也未经 Apple 公证。macOS 无法验证开发者身份,Apple 也没有检查该下载包是否包含已知恶意软件。请仅在理解并接受风险时继续。
-
从同一个 GitHub Release 下载 ZIP 和对应的
.sha256文件。 -
在下载目录校验文件;看到
OK后再继续:shasum -a 256 -c MacAppLock-v<版本>-macOS-universal-development-preview.zip.sha256
-
解压 ZIP,将
MacAppLock.app拖入/Applications。 -
尝试打开一次;macOS 会阻止启动。
-
打开“系统设置 → 隐私与安全性”,滚动到安全区域并点击“仍要打开”。
-
再次确认并输入系统登录密码。系统会将该版本保存为例外,之后可以正常双击启动;下载新版本后可能需要重新放行。
具体界面和安全说明请参阅 Apple 的打开来自身份不明开发者的 Mac App。公司或学校管理的 Mac 可能禁止用户手动放行。
自签名证书、免费的 Personal Team、DMG 或 Homebrew 都不能让此预览版变成“已识别开发者”应用。要消除相应警告,仍需加入 Apple Developer Program,使用 Developer ID 签名并提交 Apple 公证。
- 点击菜单栏锁形图标,打开设置。
- 设置至少 6 位的主密码。
- 点击“添加应用”,选择
/Applications中需要保护的.app。 - 建议开启登录时自动启动,确保登录后持续保护。
首次启动会显示可恢复的分步引导。已有 v0.1.1 及更早版本的数据会原样继续使用,不会要求重新完成引导;应用身份信息会在原路径仍可验证时安全补全。
Touch ID 是否可用由系统和已录入指纹决定。Touch ID 不可用时,主密码始终可以解锁。
- macOS 公共 API 无法保证在目标应用显示任何界面之前将其拦截,部分应用可能短暂闪现。
- macOS 没有公开独立的“锁屏界面已显示”通知;当前通过会话失活、屏幕休眠和系统睡眠事件重锁。若某种锁屏路径未产生这些公共事件,无法保证在锁屏界面出现的同一时刻收到通知。
- GitHub Release 中的开发预览版使用 ad-hoc 签名,未经 Apple 公证,首次打开需要在“隐私与安全性”中手动放行。
- 受组织策略管理的 Mac 可能不允许用户运行未经 Developer ID 签名和公证的应用。
欢迎提交 Issue 和 Pull Request。提交变更前请运行:
swift test
./scripts/package_release.sh安全问题请遵循 安全策略 私下报告。
本项目采用 MIT License。