musubipapi/airpointer
效率与系统工具把合盖的 AirPods Pro 充电盒变成 Mac 的移动指针和点击设备。
项目介绍
AirPointer 把合盖的 AirPods Pro 充电盒当成 Mac 的指针:移动充电盒就能移动光标,轻敲充电盒正面即可点击。项目用 Swift 构建,并配有辅助程序,分别负责建立蓝牙连接、读取运动数据、识别敲击和维持音频链路。
项目对工作原理的说明比较完整:运动数据会被换算成屏幕坐标,朝向敲击方向的突然移动会被识别为点击,会话期间应用会关闭 Mac 声音和麦克风在 AirPods 上的输出。为了保持音频链路,应用会向 AirPods 播放静音;当光标小于 2× 时,还会通过私有 macOS 调用临时放大光标。它的适用对象是已拥有兼容 AirPods 和 Mac、并愿意从源码构建应用的用户。
构建与试用
需要已与 Mac 配对的 AirPods、Xcode,以及 Apple Silicon 上的 macOS 26;目前只在同一台 Mac 和同一副 AirPods Pro 3 上测试过。AirPods Pro 2 可被识别,但未测试。
在仓库目录中构建并打开应用:
zsh ./build.sh
open AirPointer.app
构建过程还会运行自检和敲击检查。不要在指针会话进行中构建。首次打开应用时,设置分为四步:在辅助功能列表中允许 AirPointer;打开再合上盒盖、让充电盒正立以完成连接;指向三个点完成校准;敲击充电盒正面三次。在任意应用中按 fn ⌃ 连接,再按一次暂停或继续;快捷键可在设置中修改。会话结束后,打开再合上盒盖即可再次连接。
如果重新构建后 AirPointer 没有出现在辅助功能列表中,运行:
tccutil reset Accessibility local.airpointer
使用约束
兼容范围窄,而且部分情况没有验证:只测试过 AirPods Pro 3、macOS 26 和 Apple Silicon;会话中强制退出、休眠唤醒、蓝牙断开以及通话都没有被刻意测试。每次连接会让 AirPods 的蓝牙链路短暂断开,音频也会停止,因此不要在通话中连接。会话期间,应用会关闭所有 AirPods 上的 Mac 声音和麦克风,并在会话结束后、或在强制退出后下次打开应用时恢复。
合盖约 30 分钟后会话会结束。README 将原因归于耳机固件中的计时器,并给出了读取固件得到的地址和时长,同时说明还没有通过实时抓包确认。结束会话会消耗充电盒中存储的诊断数据,部分 AirPods 连接设置也可能保持会话时的状态。应用移动光标和点击需要辅助功能权限,放大光标则使用私有 macOS 调用。代码采用 MIT 许可证,但 Assets/ 不在该许可证覆盖范围内,另有单独授权。
HotRepo 点评
该项目在 HotRepo 的新项目榜上首次出现于 2026-11-06,记录到约十小时增长窗口内新增 125 个 Star 和 13 个 Fork。这个单日首次快照说明它一开始就受到关注,但没有更长时间序列可用于判断热度是否延续。它的亮点更多在于把一个范围很窄、方式特殊的硬件玩法讲清楚:明确列出测试过的 AirPods 型号、30 分钟会话上限对应的固件地址,以及尚未测试的情况。限制也同样清楚:使用非测试过的 Pro 3 配置时,用户处于未经确认的支持范围之外;应用需要从源码构建,并未提供现成安装包。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。