简体中文 | English
xxMac 是一个基于 SwiftUI + AppKit 的 macOS 原生菜单栏效率工具。它把启动器、应用快捷启动、窗口管理、中国日历、快捷键冲突定位和剪贴板历史整合到一个轻量入口里,日常使用形态是:
- 菜单栏常驻入口。
- 全局热键唤起的浮动启动器面板。
- 三栏结构的设置窗口。
| 能力 | 说明 | 类似/替代 |
|---|---|---|
| 启动器 | 通过全局热键打开半透明浮层,搜索应用、执行窗口命令、选择剪贴板历史,支持自定义底色、透明度、内容大小和窗口宽高。 | Alfred / Spotlight |
| 应用快捷启动 | 为指定 App 绑定独立热键,支持启动、激活、隐藏切换。 | Thor |
| 窗口管理 | 快捷操作窗口左右半屏、上下半屏、四角、居中、最大化、缩放、跨屏移动等。需要在"系统设置 > 隐私与安全性 > 辅助功能"中授权;重新打包或移动 App 后,需要删除旧 App 授权并重新添加当前 App。 | ShiftIt |
| 中国日历 | 菜单栏显示日期,支持中国农历、节假日、节气、周数和菜单栏样式配置。 | CalendarX |
| 快捷键捕捉 | 记录快捷键被哪个 App 接收,用于定位快捷键冲突。 | Shortcut Detective |
| 剪贴板历史 [默认关闭] | 记录文本和图片剪贴板,使用 SQLite 持久化,支持检索、预览和回贴。 | 剪贴板管理器 |
| LockJob | 一键遮住所有屏幕并阻止系统睡眠,Claude、Codex、构建、下载和 SSH 会话继续运行;显示时间和自定义状态文字,支持 Touch ID 或本机密码解锁。 | caffeinate + 锁屏遮罩 |
| 多语言 | 已有简体中文、繁体中文、英文资源结构。 | - |
| 快捷键 | 动作 |
|---|---|
Control + Option + Space |
打开或关闭启动器 |
Control + Option + Command + ←/→/↑/↓ |
当前窗口左右/上下半屏 |
Control + Option + Command + 1/2/3/4 |
当前窗口移动到四角 |
Control + Option + Command + C |
当前窗口居中 |
Control + Option + Command + M |
当前窗口最大化 |
Control + Option + Command + F |
切换全屏 |
Control + Option + Command + =/- |
放大或缩小窗口 |
Control + Option + Command + N/P |
移动到下一块/上一块屏幕 |
Control + Option + Command + L |
LockJob:遮住屏幕并保持运行 |
这些快捷键都可以在设置窗口里调整。
启动器搜索到应用后,直接按 Return 打开应用;按住 Command 时选中行会显示 Reveal in Finder,此时按 Return 会在 Finder 中定位该应用文件。
前置要求:
- macOS 13 或更新版本。
- Xcode Command Line Tools 或 Xcode。
- Swift 5.9 兼容工具链。
开发运行:
swift build swift run xxMac
打包为 .app:
bash bundle_app.sh open xxMac.app
发布为 .dmg:
bash publish_dmg.sh
发布脚本会先打印 Sources/xxMac/Info.plist 中记录的当前版本号,并提示输入本次发布版本。版本会写回 CFBundleShortVersionString 和 CFBundleVersion,最近更新时间会写回 XXLastUpdated,生成的 DMG 默认命名为 xxMac-版本号.dmg。
publish_dmg.sh 默认使用固定签名身份 qbmiller-dev,不允许发布时退回 ad-hoc 签名。这样可以让 macOS 辅助功能权限尽量绑定到稳定的 App 身份,减少重新打包后需要删除旧授权并重新添加的情况。需要临时换证书时,可以通过 SIGNING_IDENTITY 环境变量覆盖。
如果没有开发者账号,App 拷贝到 /Applications 后可能会被 macOS 标记为隔离来源,导致打不开。可以先清理隔离属性再启动:
xattr -cr /Applications/xxMac.app open /Applications/xxMac.app
如果要使用开发者证书签名:
SIGNING_IDENTITY="Apple Development: Your Name (TEAMID)" bash bundle_app.sh首次运行后,需要在"系统设置 > 隐私与安全性"里授予权限:
- 辅助功能权限:窗口管理、全局热键、模拟粘贴依赖它。
- 自动化权限:应用激活、重开窗口和剪贴板回贴链路可能用到。
如果窗口控制、全局热键或剪贴板回贴在重新打包后失效,优先检查系统"辅助功能"列表里授权的是否是当前路径下的 xxMac.app,并确认发布包使用同一个 SIGNING_IDENTITY 签名。macOS 的辅助功能授权会受 App 路径和签名状态影响,重新打包或移动 App 后可能需要删除旧授权并重新添加。
- 应用搜索默认扫描
/Applications、/System/Applications、/System/Library/CoreServices,也支持在设置里添加自定义搜索路径。 - 热键配置、应用快捷启动配置、启动器窗口宽高与外观、语言偏好等轻量配置保存在
UserDefaults。 - 剪贴板数据库与图片缓存位于
~/Library/Application Support/xxMac。 - 剪贴板历史最多保留条数和图片缓存总量可在"剪贴板通用"中配置,默认分别为 1000 条和 500 MB。
- 设置窗口第一列是工具分类,第二列是功能项,第三列是具体配置。
xxMac/
├── Package.swift
├── README.md
├── PACKAGING_GUIDE.md
├── bundle_app.sh
├── publish_dmg.sh
├── Resources/
│ ├── AppIcon.icns
│ ├── *.lproj/
│ └── calendar_*.json
├── Sources/xxMac/
│ ├── xxMac.swift
│ ├── Managers/
│ ├── Models/
│ ├── ViewModels/
│ └── Views/
└── docs/
├── images/
└── ARCHITECTURE.md
swift build
swift run xxMac
bash bundle_app.sh
bash publish_dmg.sh
VERSION=0.0.1 bash publish_dmg.sh
xattr -cr /Applications/xxMac.app
log stream --style compact --predicate 'process == "xxMac"'
codesign -v xxMac.appdocs/ARCHITECTURE.md:项目架构、模块职责、运行流程、数据配置和后续任务地图。PACKAGING_GUIDE.md:打包、签名、权限、日志和快捷键排障。