macOS 原生合盖休眠锁监控与电源管理工具
Monitor and terminate sleep-preventing assertions to eliminate battery drain on macOS.
你是否遇到过这样的情况:Mac 笔记本合上盖子放进背包,几个小时后拿出来不仅发烫,电量还莫名掉光?
这通常是因为某些第三方应用或后台进程持有了系统的 电源断言(Power Assertion / 休眠锁),强制阻碍 Mac 进入真正的睡眠状态。
SleepLockManager 是一款专为 macOS 打造的原生轻量级工具,通过调用底层 IOKit 接口,实时扫描并可视化当前系统的所有休眠锁,支持一键终止阻止休眠的异常进程。
- 🔍 底层断言扫描:实时监控
PreventUserIdleSystemSleep、PreventUserIdleDisplaySleep、SystemIsActive等电源断言。 - 🏷️ 智能进程分级:自动区分 系统核心进程 与 第三方用户进程,高亮危险的异常锁,防止误杀系统组件。
- ⚡ 电源状态感知:实时识别当前处于 电池供电 还是 外接电源 状态,精准定位合盖耗电元凶。
- 🛑 一键终止进程:支持优雅退出(SIGTERM)与强制结束(SIGKILL),并提供专门的失败诊断与提权指引。
- 🎨 macOS 原生质感:纯 SwiftUI 构建,支持 macOS 14+ 原生视觉风格,轻量且低资源占用。
[ macOS 系统内核 / IOKit ]
│
▼ (IOPMCopyAssertionsByProcess / pmset)
[ SleepLockManager 监控服务 ]
│
├──► 过滤与解析进程断言 (PreventUserIdleSystemSleep 等)
├──► 识别进程类型 (系统白名单 vs 第三方异常进程)
└──► 结合电源状态 (电池 / AC 电源)
│
▼
[ SwiftUI 原生交互界面 ] ──► [ 一键终止 / 强制释放休眠锁 ]
- 安装项目生成工具 XcodeGen:
brew install xcodegen
- 生成项目并打开:
xcodegen generate open SleepLockManager.xcodeproj
- 在 Xcode 中选择
SleepLockManagerScheme,按⌘R运行。
chmod +x build.sh
./build.sh
open build/SleepLockManager.app系统要求:macOS 14.0 (Sonoma) 或更高版本,已安装 Xcode Command Line Tools (
xcode-select --install)。
- 查看状态横幅:打开应用,顶部状态栏会直观显示当前系统是否已被“阻止休眠”,以及当前是电池还是电源适配器供电。
- 排查进程列表:在列表中查看持有休眠锁的进程名称、PID、断言类型及持续时间。
- 结束阻碍进程:点击右侧的 终止 按钮即可释放休眠锁。若遇权限不足,将弹出失败诊断页协助解决。
- 系统必要断言:如正在播放音频(Music/浏览器)、隔空投送传输或系统备份时,系统正常持有断言属于预期行为,请根据实际场景决定是否终止。
- Root 权限进程:部分由
root权限运行的守护进程,普通权限可能无法直接杀掉,建议在提示引导下或终端中进行处理。 - 架构兼容:支持 Apple Silicon (M1/M2/M3/M4) 及 Intel 架构 Mac。
SleepLockManager/
├── Models/ # 数据模型 (SleepAssertion, ProcessInfo)
├── Services/ # 核心底层服务 (AssertionMonitor, PowerSourceMonitor)
├── ViewModels/ # @Observable 业务状态管理
└── Views/ # SwiftUI 原生视图
├── StatusBannerView.swift # 电源与休眠状态横幅
├── ProcessRowView.swift # 进程断言列表项
└── KillFailureSheet.swift # 终止失败诊断弹窗
本项目为 Vibe Coding 产物,旨在解决作者日常 Mac 合盖后放包里发热掉电的个人痛点。
- 定位:开箱即用、轻量无冗余依赖、专注于单一痛点。
- 维护说明:个人业余项目,后期大概率按需维护,不承诺长期功能迭代。
- 二次开发:代码结构干净透明,欢迎自由 Fork、定制与魔改!
本项目基于 MIT License 开源。