Skip to content

Latest commit

 

History

History
60 lines (46 loc) · 3.38 KB

File metadata and controls

60 lines (46 loc) · 3.38 KB

Da Rings macOS App — 验收清单(2026-07-29)

隔夜完成全部计划功能。以下是早上统一验收的清单与真机冒烟步骤。

一、已验证(真机 + 金标准单测)

功能 协议 状态
BLE 扫描 / 连接 / ready 序列 CRREPA 栈 fdda 服务 ✅ 真机连上、100% 电量截图已确认
帧编解码 FD DA 10 len type feature payload 无 CRC/加密 ✅ 45 个单测
今日步数汇总(步数/距离/卡路里/活动分钟) type=2 / feat=0x13 ✅ 单测 + 解码器实证
步数明细 48×30min 柱状图 type=2 / feat=0x18 ✅ 单测(每对小端)
实时心率(开始/停止 + 大数字 BPM) type=1 / feat=0x09 ✅ 流式订阅 + 单测
电量(标准 2A19 通知) 180F ✅ 连上即显示
设备信息(型号/固件/硬件/软件/序列号/厂商) 180A 标准 ✅ 连上即自动读

二、未验证(已接线,待真机逆向响应布局)

下列指标的请求命令已按反编译推断接好,点对应标签会发查询;响应布局未知,UI 先以原始字节(day + hex)展示。请在真机上用「调试」台对照反编译推断布局后,再升级为精确解码器(参考已验证的 StepsTotal)。

标签 命令 type/feature 当前展示
心率(历史区) type=2 / 0x09 原始字节
睡眠 type=2 / 0x0E 原始字节
血氧 type=2 / 0x0B 原始字节
压力 type=2 / 0x0F 原始字节
HRV type=2 / 0x10 原始字节
体温 type=2 / 0x11 原始字节
目标步数(设置) type=1 / 0x07 ⚠️ 原实现 (byte) 截断为 0–255,语义未实证

三、真机冒烟步骤(约 3 分钟)

  1. 启动open /tmp/darings-dd/Build/Products/Debug/DaRings.app(或 Xcode Run)。首次会请求蓝牙权限,允许。
  2. 连接:左侧「设备」→「开始扫描」→ 点列表里的戒指(VRing 等)→ 顶部横幅显示「已连接」+ 电量。
  3. 今天:自动拉取今日步数;点「实时心率 → 开始测量」看 BPM 跳动,测完点「停止」
  4. 活动:看 48 桶柱状图(今天步数分布)。
  5. 设置:自动读出型号/固件/序列号/厂商。
  6. 逆向未验证指标:左侧「调试」→ 快捷命令发「睡眠/血氧/…」→ 在「分组捕获」看戒指返回的 (type,feature) 与 hex → 推断布局后告诉我,我补精确解码器。
  7. 断开:「设置 → 断开连接」或「设备 → 断开连接」。

四、构建与测试

# 单测(RingProtocol 包,45 个,无需真机/app 宿主)
cd RingProtocol && swift test

# 构建 app
cd app && xcodegen generate && \
  xcodebuild -project DaRings.xcodeproj -scheme DaRings \
    -configuration Debug -destination 'platform=macOS' build \
    -derivedDataPath /tmp/darings-dd

当前:BUILD SUCCEEDED(0 warning);45/45 tests pass

五、架构速览

  • RingProtocol(Swift Package):协议层 + ConnectionService + VitalsService + 解码器。放包内是为 swift test 免 app 宿主。
  • app/DaRings:BLETransport(@MainActor CoreBluetooth)+ DeviceCoordinator + SwiftUI 视图(今天/各指标/活动/设置/调试)。
  • 并发:BLETransport @MainActor + CBCentralManager(queue:.main) 主线程回调;ConnectionService/VitalsService @MainActor @Observable。