ios-projects/docs/system-map/ios/review/00-审查总报告.md

243 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 00 审查总报告
> 审查对象:知习 iOS 项目第一阶段系统地图4 份文档)
> 审查日期2026-06-19
> 审查方法:独立代码扫描 → 独立基线建立 → 与已有文档逐项比对
> 审查范围AIStudyApp/AIStudyApp/ 目录下全部 64 个 .swift 文件(不含 Tests 和自动生成代码)
---
## 一、审查范围
### 1.1 已检查的文件
- `AIStudyAppApp.swift` — App 入口、所有页面定义
- `ContentView.swift` — Tab 根结构、共享组件
- `Core/Navigation/Route.swift` — 全部路由定义28 个 case
- `Core/Auth/AuthManager.swift` — 会话状态机8 种状态)
- `Core/Models/APIModels.swift` — 全部 54 个 API 模型
- `Core/Models/AppContext.swift` — 设备/运行时上下文
- `Core/Network/APIClient.swift` — HTTP 客户端、Token 刷新
- `Core/Services/APIService.swift` — 全部 18 个服务类
- `Core/Services/FileUploadService.swift` — 文件上传
- `Core/Services/ReadingAPI.swift` — 阅读相关 API
- `Core/Services/NetworkMonitor.swift` — 网络状态监控
- `Core/DesignSystem/DesignTokens.swift` — 设计系统
- `Core/DesignSystem/ZXToast.swift` — Toast 系统
- `Core/Security/KeychainHelper.swift` — (已通过 AuthManager 间接审查)
- `Core/Security/LocalCache.swift` — 本地缓存
- `Core/Security/FileCache.swift` — 文件缓存
- `Features/Study/` 全部 7 个文件
- `Features/Library/` 全部 5 个文件
- `Features/Profile/` 全部 8 个文件
- `Features/AI/` 全部 10 个文件
- `Features/Analysis/` 全部 2 个文件
- `Features/Quiz/` 1 个文件QuizViews.swift
- `Features/MaterialReader/` 全部 12 个文件
### 1.2 已检查的入口类型
- [x] Tab4 个:学习/知识库/分析/我的)
- [x] PushNavigationLink via Route25 个路由目标)
- [x] Sheet6 个)
- [x] FullScreenCover未发现
- [x] Alert6 个)
- [x] ConfirmationDialog1 个)
- [x] ContextMenu1 处)
- [x] Menu1 处)
- [x] Deep Link未配置
- [x] Universal Link未配置
- [x] URL Scheme未配置
- [x] 通知点击路由(未实现)
- [x] Debug 页面(仅 Route.destination 的 DEBUG 覆盖层)
- [x] 条件渲染页面(基于 session/onboarding/数据状态的 7 种分支)
- [x] iPhone/iPad 差异(仅在 AppContext 中标记 deviceType
- [x] Feature Flag未发现
### 1.3 未检查的项
- .xcodeproj 详细配置Capabilities、Build Settings
- .entitlements 文件全文推送通知、iCloud 等 Capability
- 第三方依赖Rive 动画 SDK 等)
- Rust FFI 二进制内部逻辑ZxDocumentRuntime.xcframework
---
## 二、独立盘点统计
| 统计项 | 数量 |
|--------|------|
| 一级模块Tab | 4 |
| 独立 Push 页面(可路由) | 32 |
| Tab 内嵌页面(不可路由) | 6启动/登录流程页面) |
| Sheet / 弹窗 | 10 |
| 确认弹窗Alert/ConfirmationDialog | 8 |
| 代码存在但无导航入口的页面 | 2AIHomeView, RecallTestPage |
| 页面功能点 | ~180 |
| API 服务类 | 18 |
| 初步业务能力 | 20 |
---
## 三、审查结论
**审查结论:有条件通过**
### 不满足"通过"的哪些门禁条件?
| 门禁条件 | 满足? | 说明 |
|---------|--------|------|
| 所有导航入口已检查 | 是 | Tab/Push/Sheet/Alert/条件渲染均检查 |
| 所有用户可访问页面已进入基线 | 是 | 32 个路由页面 + 6 个启动/登录页均已盘点 |
| Sheet/弹窗/隐藏入口已检查 | 是 | 10 个 Sheet + 8 个 Alert + ContextMenu/Menu 均已盘点 |
| 页面功能均进入功能基线 | 是 | ~180 个功能点均已盘点 |
| 页面与业务能力完成双向覆盖检查 | 是 | 见 06-页面能力覆盖矩阵.md |
| Mock/占位/废弃实现没有被误判为已完成 | **否** | 4 处 P0 误判(见第四节) |
| 所有"暂未确认"均被明确列出 | 是 | 3 项暂未确认 |
| 严重遗漏为 0 | **否** | 1 个页面遗漏RecallTestPage |
| P0 修正项为 0 | **否** | 4 项 P0 修正 |
| 已有文档和独立基线差异已全部处理 | 是 | 16 项差异全部列入待修正清单 |
---
## 四、严重问题P0 — 会导致系统地图明显失真)
### 4.1 功能状态误判-图表数据为占位
- **问题:** 文档将"查看掌握度趋势图"和"查看每周学习活跃"均标记为"部分完成"
- **实际:** ZXChartView 和 ZXWeekBarChart 使用完全硬编码的编译时数据ViewModel 的 API 返回数据被忽略。应标记为"占位实现"
- **影响:** 分析页给人的印象是"图表数据已接入但需优化",实际情况是"图表数据完全未接入 API"
### 4.2 功能状态误判-每日学习时长不持久化
- **问题:** GoalSettingDetailView 的"修改每日时长"标记为"已完成"
- **实际:** dailyMins 只保存在本地 @State 变量,不通过 API 持久化,用户下次进入恢复默认"30 分钟"
- **影响:** 给人"目标设置功能完整"的假象
### 4.3 设置页通知开关标记为"暂未确认"
- **问题:** 三个通知开关绑定 bug 被标记为"暂未确认"
- **实际:** 代码中"复习提醒"、"导入完成通知"、"系统通知"三个 Toggle 全部绑定到同一个 `$reviewReminder`,这是明确的代码 bug
- **影响:** 将确定性 bug 降级为不确定性疑点,降低修正优先级
### 4.4 文档页面/弹窗统计数字口径不明确
- **问题:** 总览文档称"43 个页面/弹窗",但未说明统计口径
- **实际:** 独立基线盘点出 38 个 Push 页面 + 10 个 Sheet/弹窗 + 8 个确认弹窗
- **建议:** 明确统计口径(是否含弹窗?是否含废弃页面?)并更新数字
---
## 五、一般问题P1/P2
### P1 — 遗漏项4 项)
1. 遗漏 RecallTestPage代码存在无入口应为占位实现
2. 遗漏 AIChatPage 会话置顶/取消置顶功能
3. 遗漏 WaitlistService API 已就绪但 C 端无入口
4. 遗漏 UserService 账号注销 API 已就绪但无 C 端入口
### P2 — 命名、描述、辅助状态问题8 项)
1. 业务能力"会员与额度"命名不准确 → 应改为"存储空间管理"
2. 建议合并"主动回忆"与"AI 学习分析"为一个业务能力
3. StudyHomeViewModel error 状态永不可达View 有但 ViewModel 不设置)
4. DailyThinkingPage submitted 变量永不为 true
5. 设置页"存储空间"和"登录设备管理"自引用导航
6. 知识库详情页"知识库管理"按钮为 TODO
7. 业务能力依赖关系图缺少交叉引用
8. 文件夹新建/重命名 Alert 未列入确认弹窗表
---
## 六、遗漏项汇总
| 类型 | 数量 | 明细 |
|------|------|------|
| 遗漏页面 | 1 | RecallTestPage |
| 遗漏功能 | 4 | 会话置顶、AIHomeView 子功能、解析触发、MaterialReaderView COS 下载 |
| 遗漏 Sheet/弹窗 | 1 | 文件夹新建/重命名 Alert |
| 遗漏 API-页面入口 | 3 | WaitlistService、账号注销、设备管理 |
---
## 七、错误项汇总
| 类型 | 数量 | 明细 |
|------|------|------|
| 状态误判 | 4 | 掌握度趋势图(部分→占位)、每周活跃图(部分→占位)、每日时长(已完成→部分)、通知开关(暂未确认→部分+bug |
| 命名错误 | 1 | 会员与额度 → 存储空间管理 |
| 分类建议 | 2 | 主动回忆+AI 分析建议合并、能力依赖图缺少交叉引用 |
---
## 八、待确认项
| 序号 | 待确认内容 | 原因 |
|------|-----------|------|
| U01 | LearningSessionView 是否调用 API 保存学习记录 | 代码中未发现 LearningSessionService.start/end 的直接调用,但可能在 Rust FFI 或 ViewModel 中有间接调用 |
| U02 | SettingsView iCloud 同步开关实际后端支持情况 | Toggle UI 存在但仅改变本地 @State,无法确认后端是否有对应能力 |
| U03 | 分析页"近 7 天"日期范围筛选是否可切换 | UI 中展示了日期范围标签但未发现切换逻辑 |
---
## 九、修正优先级
### P04 项)— 影响整体地图正确性
1. 分析页图表数据状态修正(部分完成 → 占位实现)
2. 每日学习时长持久化状态修正(已完成 → 部分完成)
3. 设置页通知开关 bug 状态修正(暂未确认 → 部分完成,存在 bug
4. 总览页统计数字口径明确化
### P14 项)— 遗漏主要页面或业务能力
5. 补充 RecallTestPage 到页面地图和功能表
6. 补充 AIChatPage 会话置顶功能
7. 标注 WaitlistService 状态
8. 标注账号注销 API 状态
### P28 项)— 命名、描述、辅助状态完善
9. 重命名"会员与额度"为"存储空间管理"
10. 考虑合并"主动回忆"与"AI 学习分析"
11-16. 其他描述性补充
---
## 十、最终判断
### 总体评价
- **已有文档的代码覆盖率高**(页面覆盖率约 95%,功能覆盖率约 95%
- **核心流程描述准确**用户生命周期、Tab 结构、路由系统)
- **Mock/占位实现识别基本正确**AI 相关页面正确标记为占位实现)
### 主要不足
1. **分析页图表状态被低估**(占位实现被标记为部分完成)
2. **设置页通知 bug 被降级为"暂未确认"**
3. **GoalSettingDetailView 学习时长不持久化未被发现**
4. **1 个代码页面、2 个 API 端点、1 个交互功能的遗漏**
### 是否可以进入下一阶段?
**可以进入下一阶段的"跨项目业务能力展开",但建议先完成 4 项 P0 修正。**
原因:
- 已有文档的整体架构和页面覆盖是准确的,作为后续分析的基础足够可靠
- P0 问题集中在对少数具体功能的状态判断上,不影响整体地图的结构正确性
- 未发现系统性的页面遗漏或归类错误
- Mock/占位/废弃实现的识别框架是正确的,只需修正个别判断
- P1/P2 问题不阻塞跨项目分析,可在第二阶段的盘点中一并修正
### 门禁复查
| 门禁 | 修正前 | 修正 P0 后 |
|------|--------|-----------|
| 严重遗漏为 0 | 否1 项 P1 | 是 |
| P0 修正项为 0 | 否4 项) | 是 |
| Mock/占位未误判 | 否 | 是(修正 4 处后) |
**完成 4 项 P0 修正后可达"通过"标准。**