我开源了一个 macOS 菜单栏剪贴板历史工具:ShearingPlate
正文
最近把一个自己在做的 macOS 小工具整理后上传到了 GitHub,项目名叫 ShearingPlate。
它是一个面向 macOS 的菜单栏剪贴板历史工具,当前定位非常明确,不是直接奔着商业化分发去做,而是先完成一个可运行、可自用、可小范围测试的 MVP。
现阶段我更关注的是:核心体验能不能跑通,功能闭环是否完整,后续是否值得继续投入。
先放项目地址:
GitHub:https://github.com/MrSLH/LHSheringPlate
这里先特别说明一下:
本文全文由 CodeX 生成,我本人只提供思路、问题点以及建设方向。
## 一、这个项目是做什么的
ShearingPlate 是一个使用 Swift 构建的 macOS 菜单栏应用,主要用来记录剪贴板历史。
它当前聚焦几个最核心的使用场景:
- 平时复制过的文本和链接,之后可以快速找回
- 通过菜单栏面板查看最近历史
- 通过搜索快速定位内容
- 用全局快捷键快速呼出
- 数据默认本地保存,不依赖云端
我想做的不是一个“大而全”的剪贴板管理器,而是一个更轻量、更直接、先能稳定用起来的版本。
## 二、当前已经实现的功能
目前这个项目已经完成了一版比较完整的 MVP,支持:
- 菜单栏常驻
- 自动记录纯文本和 URL
- 默认保留最近 20 次复制记录
- 历史搜索
- 置顶、删除、清空未置顶
- 暂停记录
- 登录启动
- 全局快捷键打开面板
- 设置页录制自定义快捷键
- 来源应用黑名单
- 本地 JSON 持久化
- 一键打包 .app
- 一键生成测试分发 zip


对我来说,这一版最重要的意义不是“功能很多”,而是已经把一个桌面工具从想法推进到了“能跑、能用、能分发测试”的阶段。
## 三、技术选型
项目当前使用的是这套技术栈:
- Swift 6
- AppKit + SwiftUI
- NSPasteboard 轮询监听剪贴板
- Carbon RegisterEventHotKey 实现全局快捷键
- ServiceManagement.SMAppService 管理登录启动
- 本地 JSON 持久化
- Swift Package Manager
整体实现思路比较直接:
- AppDelegate 负责应用启动和各模块装配
- AppState 统一管理状态、设置和交互
- ClipboardMonitor 负责监听剪贴板变化
- HotKeyController 负责全局快捷键注册
- LaunchAtLoginController 负责登录启动状态
- FileClipboardStore 负责本地数据存储
这套拆分方式对 MVP 很合适,功能不重,但后续扩展也不会太乱。
## 四、实现里几个比较关键的点
这个项目虽然不大,但有几个点如果不处理好,体验会很差。
首先是剪贴板监听。
当前采用轮询方案,优点是实现简单、稳定、适合快速验证产品。为了兼顾性能和响应速度,项目里对轮询间隔做了控制,并且把这个配置开放到了设置页。
其次是“复制历史项时不要把自己再录进去”。
这类工具经常会遇到自触发问题,所以这里对主动写回剪贴板的内容做了哈希忽略处理,避免重复记录。
再一个是登录启动。
在 macOS 上,这个能力并不是简单加个开关就结束了。开发运行态和打包后的 .app 状态差异很大,所以项目里对登录启动做了状态分级提示,能更明确地告诉
用户当前为什么不能生效。
还有快捷键这块。
项目支持录制自定义快捷键,同时限制必须带修饰键,避免录出无效组合;如果系统注册失败,也会返回明确提示,而不是静默出错。
## 五、当前版本的边界
这个版本仍然是 MVP / Alpha,所以边界也很明确。
目前还存在这些限制:
- 只记录纯文本和 URL
- 还不支持图片、文件、富文本完整回放
- 当前构建产物是 x86_64
- Apple Silicon Mac 可能需要 Rosetta 2
- 当前是 ad-hoc 签名,不是公证版本
- 更适合本机自用和熟人内测,不适合公开大规模分发
这些限制我没有刻意回避,因为当前阶段的重点不是“包装成正式产品”,而是先验证方向。
## 六、为什么要开源出来
我把它上传到 GitHub,一方面是为了把项目沉淀下来,另一方面也是希望后面继续迭代时,能更清楚地记录这个项目是怎么一步步长出来的。
开源的意义对这个项目来说,不只是“让别人看代码”,更重要的是:
- 把思路真正落地成一个可运行项目
- 把实现路径整理清楚
- 把后续建设方向明确下来
- 为后面的测试、反馈和迭代留出空间
## 七、后续建设方向
后面如果继续往下做,我目前比较明确的方向有这些:
- 图片剪贴板支持
- 富文本和 HTML 支持
- 文件剪贴板支持
- SQLite 存储
- 更完整的搜索与过滤
- Universal Build
- Developer ID 签名与公证
- 自动更新能力
如果后续这些点逐步补齐,这个项目才会从一个“可用原型”慢慢走向一个“更完整的桌面工具”。
## 八、项目地址
GitHub:https://github.com/MrSLH/LHSheringPlate
最后再强调一次:
本文全文由 CodeX 生成,我本人只提供思路、问题点以及建设方向。记录内容全有本地存储,不涉及任何网络请求,安全可靠。
2026年03月23日更新:
ShearingPlate 本次更新完成了剪贴板能力和本地存储的整体升级。
### 新增
- 支持记录文本、URL、图片、富文本 / HTML、文件
- 支持图片缩略预览
- 文件类型图标细分为 PDF、文件夹、图片文件
- 菜单栏图标优化,更贴合剪贴板历史场景

### 优化
- 相同内容会自动合并,保留最近 20 条唯一历史
- 历史项复制时尽量保留原始数据格式,而不只复制纯文本
- 列表右侧为非文本内容显示格式标识
### 存储升级
- 本地持久化从 JSON 升级为 SQLite
- 兼容旧版 clip-items.json / settings.json,首次启动会自动迁移到 clipboard.sqlite3
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)