MacKit 开发分享

原生 macOS 工具集 MacKit 开发分享

最近,我给自己的 Mac 写了一款小工具:MacKit。它使用 Swift 与 SwiftUI 构建,目前集成了清洁模式、访达剪切、窗口切换和程序坞增强四个功能,支持 macOS 14 及以上系统,同时兼容 Apple Silicon 与 Intel 两种架构。

实际上,市面上已经有不少工具覆盖了这些能力。但有些应用体积大、功能复杂,有些常驻后台时占用资源较多,还有些交互路径不够顺手;更常见的情况是,同一种需求分散在不同软件里,为了几个小功能,便要同时维护多套设置。因此,我更关心一个具体的问题:那些每天使用电脑时都会遇到、单独拿出来又似乎不值得开发一款应用的小需求,能不能收进同一个轻量、顺手、原生,也最符合个人习惯的工具里?

恰好如今 AI 编程工具的能力越来越强。借助这些工具,只要能描述清楚需求,也可以从一个可运行的原型开始,逐步把一个想法落实到原生应用里。因此,这篇文章想和大家分享 MacKit 目前的几个功能,以及我在原生交互与系统能力之间做过的选择。

MacKit 项目地址

开发初衷:让 Mac 更符合自己的使用习惯

事实上,macOS 自带的交互已经足够完整,但完整并不代表每一个细节都恰好符合自己的使用习惯。

比如擦拭键盘和触控板时,稍微碰一下就可能触发输入;移动文件时,总会下意识地按下熟悉的剪切快捷键;打开多个窗口后,希望切换时能够先看见窗口内容;而程序坞上的应用图标,也让人自然地想知道它背后究竟开着哪些窗口。

这些操作没有复杂的业务流程,却会反复出现在日常使用中。虽然它们大多已有现成方案,但要么需要安装多个软件,要么需要在系统设置里完成一些不太直观的配置。于是我想,既然需求已经足够明确,不如把它们做成一个自己愿意常驻后台的小工具。

MacKit 的定位也由此确定:围绕我的个人使用习惯,逐步补充实用的系统交互。在「轻一点,顺手一点」的原则下,尽量减少对系统的侵入和资源占用,让这些不起眼的小功能真正融入日常使用。

核心功能:从擦拭设备到管理窗口

清洁模式:给键盘和屏幕一个干净的片刻

清洁模式的使用场景很简单:擦拭设备前,先暂时拦截键盘、鼠标和触控板输入,让清洁过程不再伴随意外点击和一串莫名其妙的字符。

进入后,内置显示器会显示黑色遮罩及退出提示,方便在擦拭屏幕时观察灰尘和污渍,其他屏幕则显示退出提示。这里最需要考虑的细节,应当是锁住输入之后如何退出。MacKit 采用连续按下并松开 5 次 Esc 的方式,每次按键都会更新退出进度。长按不会重复计数,相邻两次间隔超过 3 秒则从头开始,避免把一次无意间的触碰当成退出操作。

此外,系统休眠、当前会话失活、显示器配置变化或输入监听中断时,清洁模式都会自动退出。毕竟,这个功能只是想让擦拭设备更方便,输入能否安全恢复,同样应当被认真对待。

访达剪切:让熟悉的快捷键继续生效

在访达里移动文件,系统原本支持先复制,再通过 ⌘ ⌥ V 将项目移到当前位置。不过,对于习惯了 Windows 剪切逻辑的人来说,⌘ X、⌘ V 这组操作显然更加自然。

因此,MacKit 在访达的文件浏览区域提供了剪切操作:选中文件后按下 ⌘ X,再到目标位置按下 ⌘ V,即可请求访达移动文件;如果临时改变主意,按一下 Esc 就能取消待移动状态。

实现上,这个功能会建立一个待移动会话,再将实际移动操作交给访达处理,因此同名文件冲突、移动过程以及撤销仍沿用系统的处理方式。剪贴板内容发生变化后,原有的待移动状态会自动失效,避免后续粘贴意外关联到旧文件。这里还有一个小细节:剪切时可以播放短促的剪刀音效,让这个看不见的“准备移动”动作多一点反馈。当然,声音可以单独关闭,是否需要这一点仪式感,还是交给使用者决定。

窗口切换:先看见,再选择

当同一个应用打开多个窗口时,仅知道应用名称往往还不够。尤其在文档、浏览器或开发工具之间来回切换时,真正想找的是某一个窗口里的内容。

因此,MacKit 提供了类似 Windows 的窗口预览切换体验。使用系统快捷键 ⌘ Tab 切换窗口时,原本只显示应用图标的切换器会改为展示窗口缩略图,让人在切换前就能看见窗口内容。选择窗口时,可以通过方向键或鼠标悬停操作,也可以按下 ⌘ Q、⌘ W、⌘ M 等快捷键,对选中的窗口执行退出、关闭或最小化操作。

窗口列表也需要照顾不同状态:最小化窗口排在普通窗口之后,无窗口的应用放在最后,确认选择后再打开应用。这样既保留了应用访问入口,也尽量把当前更可能需要的内容放在前面。

程序坞增强:把窗口信息放到图标旁边

窗口切换偏向键盘操作,而程序坞增强则照顾另一种习惯:先把指针移到应用图标,再决定接下来做什么。

开启悬停预览后,将指针停在程序坞的应用图标上,就能查看它的窗口缩略图,并点击预览切换到对应窗口。预览中也可以查看最小化、全屏状态,或直接关闭、最小化窗口及退出应用。

另一个功能是点击图标最小化:点击当前应用的程序坞图标时,将窗口最小化,再次点击即可还原;对于全屏窗口,则采用隐藏应用的方式处理。悬停预览和点击最小化可以分别开关,让鼠标操作按照自己的习惯组合。

原生体验:从功能可用到轻量顺手

作为一个需要长期留在系统里的工具,MacKit 在交互设计和系统能力的使用上,都需要考虑对系统的侵入性与资源占用。比如清洁模式的输入拦截、访达剪切的文件移动请求、窗口切换的缩略图渲染、程序坞增强的悬停预览,每一项都需要在原生体验和功能可用之间做权衡。

实现上,MacKit 使用 Swift 与 SwiftUI 构建,没有引入第三方运行时依赖,并尽可能复用系统提供的原生 API。这样既能保证功能的可用性,也尽量减少对系统的侵入。在我的日常使用中,MacKit 后台常驻时,活动监视器里的 CPU 占用率通常低于 0.5%,内存占用则在 50MB 左右。当然,这些数据会随功能开启状态、窗口数量和系统版本变化,只能作为实际体验的参考。

结语

相比于围绕一个完整业务场景展开的应用,MacKit 更像是一份逐渐落实到代码里的个人使用习惯清单。清洁设备、移动文件、切换窗口,这些事情本身都很小,但因为每天都可能发生,改善其中一个细节也会带来持续的使用体验变化。

后续功能会根据我的使用习惯逐步添加,同时继续打磨已有功能的稳定性、窗口预览的响应,以及不同显示环境下的交互表现。项目目前以 MIT 协议开源。如果你也想给自己的 Mac 补充这些操作,可以到 GitHub Releases 下载体验,将 DMG 中的 MacKit 拖入 Applications 即可安装。也欢迎到 仓库 提交 Issue,交流使用反馈和改进建议。


MacKit 开发分享
https://youyeyejie.github.io/_posts/MacKit开发分享/
作者
youyeyejie
发布于
2026年11月2日
更新于
2026年11月2日