KeepAwake v1.2
KeepAwake v1.2
macOS 菜单栏保活工具 —— 自定义开始时间、时长、星期。屏幕可黑但 CPU / Wi-Fi / Terminal 等进程持续工作。
[English below | 英文说明在下方]
🚀 一键升级 / Quick Upgrade
如果你已经安装了 v1.1:菜单栏点 🌙 月亮 → 「检查更新…」 → 自动下载 13 KB 增量包升级。
If you already have v1.1: click 🌙 in menu bar → "检查更新…" → Sparkle auto-downloads a 13 KB delta and upgrades.
📥 首次安装 / First-time Install
- 下载
KeepAwake-v1.2.dmg(1.6 MB) - 双击挂载 → 把
KeepAwake.app拖到右边的Applications快捷方式 - 启动 App → 弹窗提示
- 推荐点「打开终端并执行」 —— 自动在 Terminal.app 里跑安装命令
- 装好后在 Terminal 按
⌘W关窗口(或输入exit+ 回车) - 重新启动 KeepAwake 即可使用
首次启动若提示"无法打开,因为它来自身份不明的开发者",请到「系统设置 → 隐私与安全性」点「仍要打开」。
If macOS warns "cannot be opened because the developer cannot be verified", go to System Settings → Privacy & Security → click Open Anyway.
✨ v1.2 主要变化 / What's New
用户体验 / UX
- 🪟 NSAlert 安装引导新增「打开终端并执行」按钮 —— 一键在 Terminal.app 里自动跑安装脚本
- 📝 install.sh 跑完后明确提示关闭 Terminal —— 不会再有"卡在原地"的感觉
- 📦 build.sh 自动把 InstallHelper 注入
~/Applications/KeepAwake.app—— 即使从源码 build 也能用引导功能
修复 / Bug Fixes
- 🔧 install.sh 用
launchctl print判定 LaunchAgent 启动 —— 修复 macOS 26 上偶发的"LaunchAgent 加载失败"误报 - ⚡ Sparkle 自动升级支持增量包 —— v1.1 → v1.2 仅需下载 13 KB
v1.1 → v1.2 增量包
- 完整 DMG:1.6 MB
- 增量包:13 KB(v1.1 → v1.2)
📋 功能 / Features
- 🌙 菜单栏 App —— 一键开启/关闭
- ⏰ 三种调度模式:立即保活 / 定时单次 / 每周循环
- 🌃 跨天时间段支持 —— 例如
工作日 22:00 → 次日 09:00自动识别 - 🔒 自动锁屏 —— 保活期间屏幕可黑,CPU 继续工作
- 🚀 开机自启 —— LaunchAgent 守护后台引擎
- 🪶 轻量原生 —— Swift + SwiftUI,单二进制 ~250 KB
- 🔄 自动升级 —— Sparkle 集成,菜单里一键检查更新
🖥️ 使用方式 / Usage
点击菜单栏 🌙 月亮图标:
| 菜单项 | 作用 |
|---|---|
| 状态: 空闲 / 保活中 · 至 09:00 | 当前状态 |
| 保活 1 小时 | 立即保活 60 分钟 |
| 保活到明早 9:00 | 立即保活到次日 09:00 |
| 无限时长保活 | 永不停止(需手动停) |
| 立即停止 | 解除保活 |
| 详细设置… | 打开 SwiftUI 面板(定时、星期、跨天) |
| 检查更新… | 自动检查新版本(Sparkle) |
| 退出 KeepAwake | 完全退出 App |
每周循环示例 / Weekly Examples
| 场景 | days | startTime | endTime |
|---|---|---|---|
| 工作日上班 | [1,2,3,4,5] |
09:00 |
18:00 |
| 工作日晚加班(跨天) | [1,2,3,4,5] |
22:00 |
09:00 |
| 周末全天 | [6,7] |
00:00 |
23:59 |
引擎自动识别跨天:
startTime > endTime时判定为"今天晚 → 次日早"。
⚙️ 系统要求 / Requirements
- macOS 14.0+ (Sonoma 或更新)
- Apple Silicon 或 Intel
- 启动时需要允许"打开未知开发者 App"
🗑 卸载 / Uninstall
一键卸载(不需要 App 安装包):
curl -fsSL https://raw.githubusercontent.com/CUinspace233/keep-awake/main/uninstall.sh | bash或者本地:
bash uninstall.sh # 完整卸载
bash uninstall.sh --keep-app # 只卸载后台引擎,保留 App完整卸载清理:
- GUI App 进程
- LaunchAgent
~/Library/LaunchAgents/com.cuinspace.keep-awake.plist - 后台引擎
~/Library/Scripts/keep-awake.sh - 配置 + PID
~/.config/keep-awake.{json,pid} - 日志
~/Library/Logs/keep-awake.* - App 本体
~/Applications/KeepAwake.app
📂 文件位置 / File Locations
| 路径 | 用途 |
|---|---|
~/Applications/KeepAwake.app |
App 主体 |
~/Library/Scripts/keep-awake.sh |
后台保活引擎 |
~/Library/LaunchAgents/com.cuinspace.keep-awake.plist |
LaunchAgent 配置 |
~/Library/Logs/keep-awake.log |
引擎日志 |
~/.config/keep-awake.json |
调度配置 |
🔐 安全 / Security
- DMG 内的 App 是 ad-hoc 签名(无 Apple Developer 账号),未做 Apple 公证
- 后台引擎只读 JSON + 调用系统
caffeinate,无网络通信 - 完整源码公开可审计:https://github.com/CUinspace233/keep-awake
- 自动升级用 Sparkle + EdDSA 签名验证,确保 DMG 来源可信
❓ 常见问题 / FAQ
Q:保活期间屏幕黑了,远程 SSH 会断吗?
A:不会。pmset displaysleepnow 只关显示器,CPU、Wi-Fi、SSH 全部继续。
Q:合盖时还能保活吗?
A:本 App 设计为开盖 + 锁屏场景。合盖时 macOS 强制系统睡眠,无法绕过。
Q:合上笔记本能保持网络吗?
A:用 caffeinate -s 也无法阻止合盖睡眠(macOS SMC 硬件行为)。建议合盖前先 caffeinate -t 3600 + 接电源。
Q:怎么验证保活生效?
A:在终端跑 bash ~/Library/Scripts/keep-awake.sh --status,应看到 caffeinate running: yes。
🔧 从源码构建 / Build from Source
git clone https://github.com/CUinspace233/keep-awake.git
cd keep-awake
bash icons.sh # 生成 App 图标(可选)
bash build.sh # 编译 ~/Applications/KeepAwake.app
bash install.sh # 安装后台引擎
open ~/Applications/KeepAwake.app需要 Xcode Command Line Tools (xcode-select --install)。
📦 打包 / Package
bash package.sh # 输出 build/KeepAwake-v1.2.dmg + appcast技术栈:Swift + SwiftUI + AppKit,标准 swiftc 编译(不依赖 Xcode 工程),集成 Sparkle 2.9.4。
📝 License
MIT
Full Changelog: v1.1...v1.2