243 lines
10 KiB
Markdown
243 lines
10 KiB
Markdown
# 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] Tab(4 个:学习/知识库/分析/我的)
|
||
- [x] Push(NavigationLink via Route,25 个路由目标)
|
||
- [x] Sheet(6 个)
|
||
- [x] FullScreenCover(未发现)
|
||
- [x] Alert(6 个)
|
||
- [x] ConfirmationDialog(1 个)
|
||
- [x] ContextMenu(1 处)
|
||
- [x] Menu(1 处)
|
||
- [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 |
|
||
| 代码存在但无导航入口的页面 | 2(AIHomeView, 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 中展示了日期范围标签但未发现切换逻辑 |
|
||
|
||
---
|
||
|
||
## 九、修正优先级
|
||
|
||
### P0(4 项)— 影响整体地图正确性
|
||
|
||
1. 分析页图表数据状态修正(部分完成 → 占位实现)
|
||
2. 每日学习时长持久化状态修正(已完成 → 部分完成)
|
||
3. 设置页通知开关 bug 状态修正(暂未确认 → 部分完成,存在 bug)
|
||
4. 总览页统计数字口径明确化
|
||
|
||
### P1(4 项)— 遗漏主要页面或业务能力
|
||
|
||
5. 补充 RecallTestPage 到页面地图和功能表
|
||
6. 补充 AIChatPage 会话置顶功能
|
||
7. 标注 WaitlistService 状态
|
||
8. 标注账号注销 API 状态
|
||
|
||
### P2(8 项)— 命名、描述、辅助状态完善
|
||
|
||
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 修正后可达"通过"标准。**
|