anamikalikestocode/nearby

GitHub: anamikalikestocode/nearby

一款原生 macOS 应用,通过解密「查找」本地缓存实现好友近距离 iMessage 提醒,无需服务器、无需注册、数据不离开设备。

Stars: 1 | Forks: 0

# 附近的 **当朋友在步行距离内时,发送短信通知你。** Apple 不允许你在“查找”(Find My) 的基础上进行开发——没有 API,没有 SDK,什么都没有。`nearby` 是一个变通方案。它会读取 Mac 上“查找”的加密缓存,并在朋友靠近时给你发短信。 原生 macOS 应用。无需服务器。无需注册。你的数据永远不会离开你的设备。

iMessage notification showing a friend is nearby

## 为什么开发这个 我以前总像个强迫症一样不停地查看“查找”。所以我把它自动化了。 ## 安装 ``` curl -sL https://github.com/anamikalikestocode/nearby/releases/latest/download/Nearby.zip -o /tmp/Nearby.zip && unzip -qo /tmp/Nearby.zip -d /Applications && xattr -cr /Applications/Nearby.app && open /Applications/Nearby.app ``` 只需一条命令。下载、安装、启动。没有 Gatekeeper 警告。
或者从源代码构建 ``` cd NearbyApp && swift build -c release ```
## 工作原理 1. Apple 的 `searchpartyd` 将加密的位置信息存储在 `~/Library/com.apple.icloud.searchpartyd/` 中 2. 这包括**你朋友的**位置和**你自己 iPhone 的** GPS —— 它们都在同一个缓存中 3. 加密密钥 (`BeaconStoreKey`) 位于你的登录钥匙串中 4. 每个 `.record` 文件都使用 AES-256-GCM 加密:`[nonce, tag, ciphertext]` 5. `nearby` 对它们进行解密,通过 haversine 公式计算距离,并通过 iMessage 给你发短信 6. 作为后台调度程序运行 —— 即使合上盖子也能静默运行 **即使合上笔记本电脑也能工作。** 你的 Mac 会从“查找”中读取你 iPhone 的 GPS,因此即使你在走动,它也知道*你*在哪里。合上笔记本电脑,离开家 —— 它仍会在后台持续检查。 ## 你会得到什么 每当有朋友靠近时,你会收到一条短信: ``` [09:14] 📍 iPhone GPS: 40.7497, -73.9760 [09:14] 🔔 Taylor is 5 min walk away (400m) [09:14] 📱 iMessage sent [09:30] ⏳ Taylor is 380m away (cooldown active) [11:42] 🔔 Rohan is 2 min walk away (150m) [11:42] 📱 iMessage sent [23:02] 💤 Rohan is 450m away but it's quiet hours ``` 点击菜单栏图标 → **立即检查 (Check Now)** 即可随时进行手动检查。 ## 配置 打开应用 → **设置...** 来更改设置。默认配置: | 设置 | 默认值 | 描述 | |---|---|---| | 提醒范围 | `800m` | 约 10 分钟步行路程 | | 冷却时间 | `4 hours` | 不对同一个朋友重复提醒 | | 免打扰时段 | `11pm–8am` | 在你睡觉时不发送提醒 | ## 系统要求 - macOS 13+ (Ventura) - 登录 iCloud 并启用“查找” - 至少有一个通过“查找”与你共享位置的人 - 完全磁盘访问权限 (应用在首次启动时会提示你) ## 加密原理 Apple 的“查找”使用[离线查找网络](https://support.apple.com/en-us/HT210515),通过附近 Apple 设备中继的 BLE 信标来定位设备。你的 Mac 会将这些位置缓存为使用 AES-256-GCM 加密的二进制 plist 文件。 解密密钥是一个 32 字节的对称密钥,存储在你登录钥匙串的 `BeaconStore` 服务下。可通过 Security 框架读取 —— 无需修改 SIP,无需 root 权限,无需破解。 每个 `.record` 文件都是一个 plist 数组:`[nonce (16 bytes), tag (16 bytes), ciphertext]`。解密后的 payload 包含 `latitude`、`longitude`、`timestamp`,以及一个标识设备所有者的 `findMyId`。朋友身份通过 `SecureLocationSharedKeys/` 记录进行解析。 ## 隐私 - **所有操作均在本地运行。** 没有服务器,没有数据分析,没有遥测。 - **你只能看到已经通过“查找”与你共享位置的人。** 这不会让你获取任何新用户的访问权限。 - **加密密钥在运行时从你的钥匙串中读取。** 它永远不会被写入磁盘或存储在配置文件中。 ## 卸载 从菜单栏退出应用,然后将其从“应用程序”中移出。配置存储在 `~/Library/Application Support/com.nearby/` —— 删除该文件夹即可彻底清除。 ## 许可证 MIT 由 [@anamika__x](https://x.com/anamika__x) 构建 —— 因为你的手机应该主动告诉你朋友何时在附近。
标签:AES-256-GCM解密, Haversine公式, HTTP工具, iMessage短信通知, macOS原生应用, macOS钥匙串, searchpartyd, Swift, 位置缓存解密, 位置追踪, 后台监控, 命令行安装, 地理围栏, 无需服务器, 朋友定位, 极客工具, 网络安全, 网络调试, 自动化, 苹果Find My, 距离计算, 近距离提醒, 隐私保护