Skip to content

Repository files navigation

OpenYoink 图标

OpenYoink

随手一拖,先放一下。

原生 macOS 拖拽暂存架。把文件、文本、图片和链接暂存在屏幕边缘或 Mac 刘海, 切换到目标位置后再继续拖。


最新版本 下载量 macOS 15+ Swift 6 MIT 许可证

下载 · 官网 · 使用文档 · English


OpenYoink — 随手一拖,先放一下

Note

当前稳定版 v1.6.8 新增侧边暂存架“拖入后保持展开”设置,默认保留原有行为,并修复拖放回调顺序导致的意外收起。顶部灵动岛行为不变。感谢社区贡献者 @Miriam-Eason 的 PR #1。完整教程见使用文档。

它解决什么问题

在 Finder、浏览器、邮件等应用之间搬东西时,目标窗口往往不在眼前。OpenYoink 给内容一个临时落脚点:先拖进屏幕边缘或 Mac 刘海,切换窗口后再拖到目标位置。

OpenYoink 常驻菜单栏,不显示 Dock 图标。需要时出现,用完后收起。

核心亮点

  • 接住常用内容:文件、文件夹、纯文本、富文本、图片、链接,以及邮件、日历事件、联系人。
  • 多种唤出方式:拖拽时自动出现、边缘拉环、全局快捷键、鼠标摇动手势。
  • 两种独立入口:经典侧边暂存架与 OpenYoink Island 可单独启用或同时使用,共享同一个暂存空间。
  • 原生 Island:全新安装默认启用并与 Mac 刘海融合;外接屏或无刘海设备使用顶部悬浮胶囊,含暂存架、传输、计时器、电池、系统状态、正在播放与快速访问模块。快速访问可收藏常用文件夹,电池模块可查看实时功率与两分钟波形,各模块均可独立关闭。
  • 整理而不打断:Quick Look、多选、框选、Stack、手动排序、最近项目。
  • 适应复杂桌面:多显示器、多 Space、全屏应用,按应用关闭自动唤出。
  • 可预期的文件语义:默认引用原文件;拖到 Finder 时只请求复制。按住 ⌘ 拖入启用托管移动,详见文件安全与生命周期。
  • 原生且克制:SwiftUI + AppKit,中英文界面,登录时启动,Sparkle 自动更新。

安装

系统要求:macOS 15 Sequoia 或更高版本。 Release 构建同时面向 Apple Silicon 与 Intel Mac。

Homebrew(推荐)

brew install --cask muqy1818/tap/openyoink

Homebrew cask 下载对应版本的 GitHub Release DMG,并在安装后移除这一应用的隔离属性,通常不会出现 Gatekeeper 拦截。该步骤不改变安装包签名,也不等同于 Apple 公证。安装后可由 Sparkle 检查后续更新。

手动安装

  1. 从 GitHub Releases 下载最新 DMG。
  2. 打开 DMG,将 OpenYoink 拖入 Applications。
  3. 首次启动若被 macOS 拦截,在 Finder 中右键 OpenYoink 并选择“打开”,或前往 系统设置 → 隐私与安全性 允许打开。

Note

GitHub Releases 中的免费社区构建使用 ad-hoc 签名,未经过 Apple 公证,因此首次手动安装可能触发系统提示。Sparkle EdDSA 签名保护的是更新包完整性,不能替代首次下载校验或 Apple 公证。

仍然无法打开?

仅在确认应用来自上面的 OpenYoink 官方 Release 地址后使用。可以先运行 shasum -a 256 OpenYoink-VERSION.dmg(把 VERSION 换成实际版本号),并与同版本 Homebrew cask 中的 sha256 比对。下面的命令会明确绕过这一个应用的 Gatekeeper 隔离检查:

xattr -dr com.apple.quarantine /Applications/OpenYoink.app

快速上手

操作 方式
显示 / 隐藏 ⌘⇧Space、菜单栏菜单,或单击屏幕边缘的拉环
添加内容 拖到暂存架或边缘拉环上
移动而非引用 按住 ⌘ 拖入文件或文件夹
暂存剪贴板 连按两次 ⌘⇧Space
Quick Look 选中卡片后按 Space,或双击卡片
多选 按住 ⌘ 点选,或在空白处拖动框选
移除 悬停后点 ×、按 Delete,或右键菜单
调整位置 沿屏幕边缘拖动拉环,或在设置中选择位置
开启 / 关闭 Island 设置 → 通用 → OpenYoink Island

支持的内容

内容 OpenYoink 的处理方式
文件与文件夹 默认保留对原位置的 sandbox bookmark,不复制到暂存架
纯文本与链接 直接记录在暂存架数据中
图片、HTML 与 RTF 在应用沙箱的托管目录中物化为文件
联系人、日历事件与邮件 来源应用提供可读数据时,物化为 .vcf、.ics、.eml

拖出普通文件时,OpenYoink 提供文件 URL 与 Chromium 兼容的文件名表示,兼容 Finder、Safari 和常见 Chromium 浏览器上传区域;托管移动项目使用可确认落盘的 file promise,交付成功后才离架。是否接受最终仍由目标应用或网站决定。

文件安全与生命周期

  • 普通拖入只保存对原位置的引用。移除卡片或选择“拖出后移除”不会删除原文件;若原文件被移动、删除或磁盘离线,卡片会显示不可用,直到 bookmark 再次解析。
  • 按住 ⌘ 拖入时,OpenYoink 先把内容复制到应用沙箱的托管目录并确认副本存在,再把原文件移入废纸篓。任一步失败都保留原文件并回退为普通引用。原文件仅在废纸篓尚未清空时可恢复。
  • 托管移动项目拖出成功后,目标位置收到文件,暂存架卡片和托管副本随即删除;不受普通项目的“拖出后处理”设置影响。取消或交付失败时,项目与副本会保留以便重试。
  • 文本与链接随卡片保存,移除时一并清除。图片、富文本、邮件等物化文件在卡片被手动或按策略移除后会失去引用,下次启动的安全清理中删除;也可以在 设置 → 存储 立即查看和清理。

隐私与设计

  • 启用 App Sandbox;暂存架数据和物化文件保存在沙箱内的 Application Support/OpenYoink,可在 设置 → 存储 打开数据目录或清理未使用文件。
  • 无账号、无分析统计或遥测上报。正常使用不要求辅助功能或输入监控权限;文件访问范围来自用户主动拖入的内容。
  • 自动更新检查默认开启,可在设置中关闭。检查更新会访问 GitHub Pages / Releases;当前版本没有其他后台联网功能。
  • 只有在执行“连按两次快捷键暂存剪贴板”时才会读取当前剪贴板内容。
  • “正在播放”是可选的 Island 模块,默认关闭。启用后显示真实封面、播放进度与媒体控制,优先使用本地捆绑的 helper;helper 不可用时才尝试 Apple Music / Spotify AppleScript,并可能请求“自动化”权限。该模块不联网,失效也不会影响暂存架和其他 Island 模块。
  • “快速访问”是可选的 Island 模块,默认关闭。它只保存用户主动添加文件夹的 security-scoped bookmark;默认打开时由 macOS 选择当前默认文件管理器,不硬编码 Finder 或 QSpace,移除收藏不会删除真实文件夹。
  • 持久化采用 security-scoped bookmarks 与原子 JSON 写入,减少不必要的原文件复制和部分写入造成的快照损坏风险。

从源码构建

开发环境需要 macOS 15+ 与 Xcode 26+。

git clone https://github.com/MuQY1818/OpenYoink.git
cd OpenYoink

xcodebuild \
  -project Open-Yoink.xcodeproj \
  -scheme OpenYoink \
  -destination 'platform=macOS' \
  build

xcodebuild \
  -project Open-Yoink.xcodeproj \
  -scheme OpenYoink \
  -destination 'platform=macOS' \
  test \
  -only-testing:OpenYoinkTests

本地构建无需设置 DEVELOPMENT_TEAM。项目使用 SwiftUI 渲染界面,以 AppKit 管理窗口、拖放和全局事件;测试覆盖持久化、拖入拖出、快捷键、触发器和布局等核心行为。

维护者可通过 Scripts/make-release.sh 生成 Developer ID + 公证的正式构建,或显式使用 --adhoc 生成免费社区构建。脚本不会在签名失败时静默降级发布模式。

参与项目

欢迎提交 Issue 和 Pull Request。

  • Bug 报告请附上 macOS 版本、OpenYoink 版本、复现步骤和预期行为。
  • 较大的功能改动建议先开 Issue 讨论,避免双方在目标上产生偏差。
  • 提交前请运行完整测试,并保持改动聚焦、说明清楚。

Roadmap

  • 可选的剪贴板历史与隐私过滤
  • Handoff 与更深的系统集成

Roadmap 表示探索方向,不承诺具体版本或时间;优先级会根据稳定性和用户反馈调整。

致谢与许可

OpenYoink 是独立的开源实现,与商业应用 Yoink 及其开发者没有隶属、授权或背书关系。自动更新由 Sparkle 提供。

第三方组件与许可证见 THIRD_PARTY_NOTICES.md。项目基于 MIT License 开源。


© 2026 weijue · MIT License

Releases

Packages

Contributors

Languages