介绍
# iCloud Find My
通过 iCloud CLI (pyicloud) 访问“查找”设备位置和电池状态。
## 设置
1. **安装 pyicloud:** ```bash brew install pipx pipx install pyicloud ```
2. **认证(一次性):**
询问用户的 Apple ID,然后运行: ```bash icloud --username [email protected] --with-family --list ```
他们需要输入密码并完成双重认证 (2FA)。会话将被保存,有效期为 1-2 个月。
3. **存储 Apple ID:**
将 Apple ID 添加到您的 TOOLS.md 或工作区配置中,以便在后续查询时记住它: ```markdown ## iCloud Find My Apple ID: [email protected] ```
## 使用方法
### 列出所有设备
```bash icloud --username APPLE_ID --with-family --list ```
**输出格式:** ``` ------------------------------ Name - Liam's iPhone Display Name - iPhone 15 Pro Location - {'latitude': 52.248, 'longitude': 0.761, 'timeStamp': 1767810759054, ...} Battery Level - 0.72 Battery Status - NotCharging Device Class - iPhone ------------------------------ ```
**解析提示:** - 设备之间用 `------------------------------` 分隔 - 位置是一个 Python 字典(使用 `eval()` 或用正则表达式解析) - 电池电量范围是 0.0-1.0(乘以 100 即为百分比) - 电池状态:“Charging”或“NotCharging” - 位置字段:`latitude`、`longitude`、`timeStamp`(毫秒)、`horizontalAccuracy`
### 获取特定设备
通过 grep 输出来查找特定设备: ```bash icloud --username APPLE_ID --with-family --list | grep -A 10 "iPhone" ```
### 解析位置
提取并格式化位置数据: ```bash icloud --username APPLE_ID --with-family --list | \ grep -A 10 "Device Name" | \ grep "Location" | \ sed "s/Location.*- //" ```
然后使用 Python 解析 Python 字典字符串,或使用正则表达式提取坐标。
### 解析电池
```bash icloud --username APPLE_ID --with-family --list | \ grep -A 10 "Device Name" | \ grep "Battery Level" ```
## 设备名称
设备名称来自 iCloud,可能包含: - 花哨的 Unicode 撇号 (U+2019 '),而不是 ASCII ' - 完全没有撇号(例如,“Lindas iPhone”)
使用不区分大小写的匹配,并根据需要规范化撇号。
## 会话管理
- 会话持续 **1-2 个月** - 存储在用户的主目录中 - 过期后,重新运行认证步骤 - PyiCloud 会在每次请求时自动验证
## 常见模式
**出门前检查电池:** ```bash # Get battery for specific device icloud --username ID --with-family --list | \ grep -B 2 -A 5 "iPhone" | \ grep "Battery Level" ```
**获取当前位置:** ```bash # Extract location dict and parse coordinates icloud --username ID --with-family --list | \ grep -A 10 "iPhone" | \ grep "Location" | \ sed "s/.*- //" | \ python3 -c "import sys; loc = eval(sys.stdin.read()); print(f\"{loc['latitude']}, {loc['longitude']}\")" ```
**检查设备是否正在充电:** ```bash icloud --username ID --with-family --list | \ grep -A 10 "iPhone" | \ grep "Battery Status" ```
## 主动使用场景
- **电池警告:** 在日历事件(出门)之前检查电池电量 - **位置上下文:** 通过检查用户当前位置来回答“我附近”的查询 - **在家/离家检测:** 根据坐标检查用户是否在家 - **低电量警报:** 如果电量 <30% 且未在充电,则发出警告
## 故障排除
**认证错误:** - 会话过期 - 重新认证 - Apple ID 错误 - 检查存储的 ID - 需要 2FA - 完成 2FA 流程
**无位置信息:** - 设备离线 - “查找”已禁用 - 定位服务已关闭
**找不到设备:** - 使用 `--list` 检查确切的设备名称 - 名称区分大小写 - 可能包含 Unicode 撇号
## 注意事项
- 需要 macOS(iCloud API 的怪癖) - 必须启用“家人共享”才能查看家人的设备 - 设备激活时,位置大约每 1-5 分钟更新一次 - 电池读数可能是缓存的(检查时间戳)