一目了然地管理你的电脑启动项。
Launager 是一款免费开源的 macOS 启动项管理工具。它把系统里每一个后台项、守护进程和登录项收进同一个窗口,告诉你是谁装的(代码签名身份)、现在有没有在运行,并让你一键停用或移除。
launchd 是 PID 1——所有进程都由它而生。启动项就是 Mac 的"出生仪式",Launager 让你决定哪些有资格留下。
macOS 把启动项分散在至少四套机制里:
| 来源 | 里面住着什么 | 系统设置显示吗 |
|---|---|---|
~/Library/LaunchAgents |
当前用户的后台项 | 只显示为语焉不详的"后台项目" |
/Library/LaunchAgents |
所有用户的后台项 | 同上 |
/Library/LaunchDaemons |
root 守护进程 | 同上 |
| BTM 登录项 | "登录时打开"的 App | 显示,但没有路径、没有细节 |
系统设置不会告诉你 plist 在哪、指向哪个可执行文件、由谁签名——而第三方的更新器、辅助进程和赖着不走的卸载残留,正是仰仗这种不透明。Launager 负责撕掉它。
- 零授权查看"登录时打开"列表——打开即用,不弹任何授权框
- 添加 / 移除登录 App(首次修改时才请求一次"自动化"授权);也可以直接把 App 拖进窗口添加
- 每个 App 显示开发者签名身份,以及它顺手装进系统的后台组件("+N 后台项"徽章,点击直达)
- 最近移除记录:移除的 App 保留在侧边栏专属页面,一键"重新启用"
- 四层全景:用户后台项 / 全局后台项 / 守护进程 / 登录项,默认只看第三方,一键切换"全部"
- 签名身份经证书链锚点验证:Apple / App Store / 已识别开发者 / 不受信任的证书 / 临时签名 / 未签名 / 签名无效
- 伪装检测:标识符冒充
com.apple.*但签名验证不符的项目,会被红色"伪装系统项"标出——这是恶意软件最常用的持久化伪装手法 - 实时运行状态(PID)、一键启停(用户级免密;守护进程走 macOS 标准管理员授权)
- 安全删除:任务先停止,plist 移入废纸篓,并在
~/Library/Application Support/Launager/Backups保留备份 - 属性列表查看器(二进制 plist 自动转为可读 XML)
| 操作 | 所需权限 | 时机 |
|---|---|---|
| 查看"启动应用"列表 | 无 | — |
| 浏览用户后台项 / 全局后台项 / 守护进程 | 无 | — |
| 启停用户后台项 / 全局后台项 | 无 | — |
| 添加 / 移除启动应用 | 自动化(系统事件) | 首次修改时弹一次 |
| 查看"登录项"分类 | 完全磁盘访问权限 | 系统设置勾选一次,永久生效 |
| 启停守护进程;删除全局后台项 / 守护进程 | 管理员密码 | 每次操作(macOS 安全模型强制) |
缺少权限时功能优雅降级:界面内有一次性授权引导,授权后切回 Launager 自动刷新,之后所有操作静默进行。
要求 macOS 14(Sonoma)及以上。目前主要在 macOS 26 上开发与测试;更早版本遇到问题欢迎提 Issue。
从 Releases 下载与 Mac 架构对应的 Launager_<版本>_<架构>.dmg,打开后把 Launager 拖进"应用程序"。
标签发布由 GitHub Actions 使用 Apple Developer ID 签名并公证;本地 make-app.sh 构建仍使用 ad-hoc 签名,适合开发与测试。
Launager 使用新的 Bundle ID ai.tiy.launager;从 Birth 升级时,macOS 会将它识别为新应用,需要重新授予“自动化”和“完全磁盘访问”权限。旧的备份仍保留在 ~/Library/Application Support/Birth/Backups。
git clone https://github.com/tiylabs/launager.git
cd launager
./scripts/make-app.sh
open dist/Launager.app(Homebrew cask 计划中。)
swift test # 单元测试
./scripts/release-check.sh # 发版门禁:测试 → 打包 → 冒烟启动 → 健康检查
./scripts/make-dmg.sh # 打包分发用 DMG- SwiftUI + Swift Package Manager,无 Xcode 工程文件,零第三方依赖
- 三个 target:
BirthCore(扫描/控制/签名,UI 无关)、BirthUI(完整应用,可测试)、Launager(三行 main 的薄壳) - 每次发版前必须跑一遍
release-check.sh,任何一步红灯都不发布
推送形如 v0.2.4 的标签会触发 .github/workflows/release.yml:分别构建 Intel 和 Apple Silicon 版本,导入临时钥匙串中的 Developer ID 证书,以 Hardened Runtime 和时间戳签名,公证并装订 DMG,随后上传 ZIP 与 DMG 到 GitHub Release。仓库需要配置以下 GitHub Actions Secrets:APPLE_CERTIFICATE(Base64 编码的 .p12)、APPLE_CERTIFICATE_PASSWORD、APPLE_TEAM_ID、APPLE_ID 和 APPLE_APP_SPECIFIC_PASSWORD。
- 签名徽章显示的是身份,不是完整性:Launager 验证证书链锚点(确认"是谁签的"),不做全量内容哈希校验——那是 Gatekeeper 的职责。
- "登录项"分类只读:macOS 未向第三方开放切换这类项目的 API,Launager 提供直达系统设置的跳转。
- 本地开发构建使用临时(ad-hoc)签名;正式标签发布使用固定的 Developer ID 身份,避免因每次签名身份变化而让已授予的权限失效。
把 Launager.app 移到废纸篓即可。想清理得更彻底(可选):
defaults delete ai.tiy.launager # 偏好设置
rm -rf ~/Library/Application\ Support/Launager # 删除操作的备份别忘了在 系统设置 → 隐私与安全性 中移除授予 Launager 的权限。
Bug 与建议请提 GitHub Issues。
