umarz317/WatchPointer
效率与系统工具用 Apple Watch 通过蓝牙控制 Mac 光标,支持点击、拖拽和滚动。
项目介绍
WatchPointer 把 Apple Watch 变成 Mac 的指针设备。手表顶边指向屏幕的位置决定光标落点,轻点表盘点击、按住拖动,还支持右键和用数码表冠滚动。手表与 Mac 通过蓝牙直连,不依赖 Wi-Fi,也不需要服务器。Mac 端会在刘海区域显示连接状态、手表型号、电量、实时朝向,并附带一个小型光枪式游戏 Sky Shot 用于试瞄准。
它适合想要类似遥控器的指向方式、又愿意自行构建并侧载 Apple 应用的用户。
工作原理
手表端每秒采样重力和陀螺仪各 100 次。上下方向来自重力,不会漂移;左右方向由绕垂直轴转动的累积量得到。每个采样都带手表时间戳发送给 Mac。Mac 接收端像激光打墙一样把朝向投影到屏幕,使用时戳配合 1€ 滤波器平滑,并在独立线程上移动光标。点击落点锁定在拇指接触手表那一刻的朝向,避免轻触带来的抖动改变光标位置。蓝牙协议在 Mac/Sources/WatchPointer/Receiver.swift 文件顶部有说明。
快速使用
前提:Mac 运行 macOS 14 或更高版本并带蓝牙,Apple Watch 运行 watchOS 11 或更高版本,另需 Xcode 16 或更高版本安装手表应用(环境要求)。
-
在仓库中启动 Mac 接收端:
cd Mac swift run WatchPointer首次运行时,macOS 会请求蓝牙权限,并要求在系统设置 › 隐私与安全性 › 辅助功能中给终端应用授权。辅助功能权限用于移动光标,两项都允许后再次运行命令(Mac 端步骤)。接收端会出现在刘海中,没有刘海的 Mac 则显示在菜单栏中间。
-
用 Xcode 打开
Watch/WatchPointer.xcodeproj,在 Signing & Capabilities 中选择签名团队;如果 Xcode 提示 bundle identifier 冲突,改成自己的标识。把 Apple Watch 选为运行目标并按 ⌘R(手表端步骤)。 -
在手表上打开 WatchPointer,点击 Mac 名称旁的 Pair 配对。然后像握遥控器一样,让手表顶边(12 点方向)朝向屏幕,对准屏幕中心点 Center 校准(瞄准步骤)。
-
可选:用浏览器打开
Game/index.html,按 F 全屏,轻点手表开始 Sky Shot(Sky Shot)。
设置项
Mac 接收端启动时可传参调整,不用重新安装(设置):
swift run WatchPointer 1.2 # 速度:数值越大,到达屏幕边缘所需转动越小
swift run WatchPointer steady=0.6 # 静止时更稳(默认 0.8)
swift run WatchPointer quick=0.02 # 快速移动时延迟更小(默认 0.01)
使用约束
- 需要满足 Mac 和手表的最低系统版本,并安装 Xcode 16;手表应用必须经 Xcode 构建安装,签名时可能需要修改 bundle identifier。
- 手表只连接配对过的那台 Mac,直到解除配对。
- 手表离开手腕后可能因手腕检测而锁屏;手持使用时建议调整 Passcode › Wrist Detection 和屏幕唤醒时长(使用建议)。
- 配对由手表端发起,Mac 接收端目前不会弹出确认。接收端运行期间,附近任何能说该协议蓝牙设备都可能移动光标,不用时应退出接收端(安全说明)。
- 项目采用 MIT 许可证(许可证)。
HotRepo 点评
WatchPointer 在 2026-11-07 进入 HotRepo 新项目榜,当时记录为 128 star、12 fork,统计窗口从当日 11:45 UTC 开始、14:15 UTC 观测,期间净增 23 star,同期 fork 净增为 0。这只是新项目榜一个短窗口的单条记录,没有全语言日榜名次,窗口也很短,因此只能说明当时已有早期关注,不足以判断趋势。技术上值得留意的是它的瞄准方式不同于触控板替代品:重力加偏航积分给出绝对垂直朝向,基于时间戳的滤波针对的是延迟和抖动,而不只是传感器采样率。README 自己提示的配对无确认问题,是共享空间中使用时最需要注意的地方。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。