Skip to content

BuildWu19940706/MacAppLock

Repository files navigation

MacAppLock

一个原生 macOS 菜单栏应用,用主密码或 Touch ID 保护隐私应用。

CI License: MIT

功能

  • 使用主密码或 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 下载公开发布的开发预览版。

安装 GitHub 开发预览版

Warning

GitHub 开发预览版使用 ad-hoc 签名,未使用 Developer ID,也未经 Apple 公证。macOS 无法验证开发者身份,Apple 也没有检查该下载包是否包含已知恶意软件。请仅在理解并接受风险时继续。

  1. 从同一个 GitHub Release 下载 ZIP 和对应的 .sha256 文件。

  2. 在下载目录校验文件;看到 OK 后再继续:

    shasum -a 256 -c MacAppLock-v<版本>-macOS-universal-development-preview.zip.sha256
  3. 解压 ZIP,将 MacAppLock.app 拖入 /Applications

  4. 尝试打开一次;macOS 会阻止启动。

  5. 打开“系统设置 → 隐私与安全性”,滚动到安全区域并点击“仍要打开”。

  6. 再次确认并输入系统登录密码。系统会将该版本保存为例外,之后可以正常双击启动;下载新版本后可能需要重新放行。

具体界面和安全说明请参阅 Apple 的打开来自身份不明开发者的 Mac App。公司或学校管理的 Mac 可能禁止用户手动放行。

自签名证书、免费的 Personal Team、DMG 或 Homebrew 都不能让此预览版变成“已识别开发者”应用。要消除相应警告,仍需加入 Apple Developer Program,使用 Developer ID 签名并提交 Apple 公证。

初次使用

  1. 点击菜单栏锁形图标,打开设置。
  2. 设置至少 6 位的主密码。
  3. 点击“添加应用”,选择 /Applications 中需要保护的 .app
  4. 建议开启登录时自动启动,确保登录后持续保护。

首次启动会显示可恢复的分步引导。已有 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

About

A native macOS menu bar app that protects private apps with a master password or Touch ID.

Topics

Resources

License

Security policy

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors