Block a user
IOS-INFO-012:Rust Event → UploadItem 映射
IOS-INFO-039:Runtime 启动恢复、stale events 重载与异常 session 恢复
IOS-INFO-005:接入 document runtime V2 FFI
IOS-INFO-006:ReadingRuntimeSessionManager
IOS-INFO-007:MaterialReaderView 生命周期事件恢复
IOS-INFO-008:Heartbeat Timer / pause / resume / close
IOS-INFO-010:MarkedAsRead Runtime 事件接入
IOS-INFO-013:本地 ReadingEventUploadQueue
开发完成评论
完成内容
ReadingEventQueueItem结构增强:- 新增
userId: String— 用户隔离 - 新增
nextRetryAt: Date?— 重试调度 - 状态重命名…
- 新增
IOS-INFO-012:Rust Event → UploadItem 映射
开发完成评论
完成内容
ReadingEventMapper重构为使用AppContext(IOS-INFO-038):map()和mapOne()参数从appVersion: String改为 `appContext:…
IOS-INFO-011:Rust Event export → 本地队列 → ack
开发完成评论
完成内容
修正 ack 时机(核心修复):
exportAndEnqueue()改为:Rust export → map → enqueue 本地队列成功后立即 ack- 不等…
IOS-INFO-010:MarkedAsRead Runtime 事件接入
开发完成评论
完成内容
- MarkedAsRead 已在多个层次完整实现:
- UI 层:
MaterialReaderView.markAsRead()+isMarkedRead幂等 guard + V2/V1 分支 - Session…
- UI 层:
IOS-INFO-009:阅读位置采集适配器
开发完成评论
完成内容
ReadingPositionAdapter已有完整实现,本次补全测试覆盖:- 5 种材料类型 position 生成:PDF(pageNumber/pageProgress/overall)…
IOS-INFO-008:Heartbeat Timer / pause / resume / close
开发完成评论
完成内容
- Heartbeat Timer 已在
ReadingRuntimeSessionManager中完整实现:startHeartbeat(interval: 15)—Timer.scheduledTimer每 15s tick -…
IOS-INFO-007:MaterialReaderView 生命周期事件恢复
开发完成评论
完成内容
MaterialReaderView添加@Environment(\.scenePhase)+.onChange(of: scenePhase):.background→sessionManager.pause()+ `exportAndEnqueu…
IOS-INFO-006:ReadingRuntimeSessionManager
开发完成评论
完成内容
- 状态机扩展:
idle → opening → active → closing → closed+paused+failed(Error)opening过渡态:startSession 成功前 -…
IOS-INFO-039:Runtime 启动恢复、stale events 重载与异常 session 恢复
开发完成评论
完成内容
- 新建
Core/Services/RuntimeRecoveryService.swift(57 行):run(adapter:)— 完整恢复流程入口- Step 1: `adapter.reloadStaleEvents(…
IOS-INFO-005:接入 document runtime V2 FFI
开发完成评论
完成内容
- 新增
RuntimeError枚举(Core/Services/ReadingRuntimeAdapter.swift):.document(DocumentError)— 包装 UniFFI Rust 错误 -…
IOS-INFO-003:定义 ReadingRuntimeAdapter 协议
IOS-INFO-004:V1 ReadingEventCollector 断链修复与兼容层