ReadViewSDK/.planning/PROJECT.md
2026-05-21 20:35:33 +08:00

74 lines
3.9 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.

# ReadViewSDK
## 这是什么
`ReadViewSDK` 是一个 iOS 阅读 SDK`RDReaderView`),提供 EPUB/TXT 的打开、分页与阅读器 UI并包含一个用于演示集成的 Demo 工程(`ReadViewDemo`)。本次初始化面向 **brownfield已有代码**,目标是在尽量控制影响面的前提下完成一次“核心渲染路径”的大改。
## 核心价值
稳定可用的 EPUB/TXT 阅读体验。
## 需求
### 已验证(现有能力)
- ✓ 支持通过 `RDURLReaderController` 以 URL 打开 `.epub` / `.txt` 并进入阅读器(现有)
- ✓ 具备 `RDEPUBReaderController` 作为主阅读器控制器,负责加载/分页/状态管理(现有)
- ✓ 具备 `RDReaderView` 作为分页容器视图,支持翻页/滚动等呈现模式(现有)
- ✓ reflowable EPUB 目前走 `WKWebView` 辅助分页/渲染的管线(现有实现;本次将改造)
- ✓ 固定版式Fixed Layout与交互式内容存在 `WKWebView` 相关能力与桥接(现有)
- ✓ TXT 通过 `RDPlainTextBookBuilder` / `RDEPUBTextBook` 路径进入同一阅读器 UX现有
- ✓ 默认使用 `UserDefaults` 进行部分阅读器状态/设置持久化(现有)
### 进行中(本次范围)
- [ ]**reflowable EPUB** 的渲染/排版/分页路径改为参考 `Doc/WXRead/` 的“微信读书WXRead渲染方式”原生排版为主并在 SDK 内稳定落地且可回归验证
### 不做(明确排除)
- Fixed Layout EPUB继续使用 `WKWebView`,不切换到 WXRead 渲染方式
- 交互式 EPUB含 JS / 音视频 / 表单 / iframe / 外链 / 脚本桥接等):继续使用 `WKWebView`,不切换到 WXRead 渲染方式
- 除 reflowable EPUB 渲染改造所必需的最小改动外,其它功能/交互/持久化协议/对外 API 暂不做主动修改
## 背景与上下文
- 仓库形态iOS SDK + Demo AppDemo 通过 CocoaPods 以本地 `:path` 引入 SDK。
- 当前分层:`EPUBCore`(解析/分页/状态)、`EPUBUI`(阅读器 UX、`EPUBTextRendering`TXT/TextBook、以及 `LegacyRDReaderController`(历史实现并存)。
- WXRead 参考资料位于 `Doc/WXRead/`,包含对微信读书 EPUB 阅读器的逆向分析文档与相关符号/源码片段。
## 约束
- **平台**iOS 15+Podspec 声明 iOS 15.0;工程中常见 15.6)— 现有基线
- **语言与风格**:代码标识符保持英文;文档/计划使用中文(见 `CONTEXT.md`)— 项目约束
- **依赖管理**CocoaPods 为主(`RDReaderView.podspec`、`Podfile`、`ReadViewDemo/Podfile`)— 现状约束
- **范围控制**:仅替换 reflowable EPUB 渲染方式Fixed Layout 与交互式内容保持 `WKWebView` — 本次目标边界
- **稳定性优先**:任何改造需以“可回归验证、不破坏现有打开/阅读主流程”为前提 — 核心价值驱动
## 关键决策
| 决策 | 原因 | 结果 |
|---|---|---|
| reflowable EPUB 改为 WXRead 风格原生渲染 | 追求更稳定可控的排版/分页与一致性 | — Pending |
| Fixed Layout 与交互式 EPUB 继续使用 `WKWebView` | 降低风险与范围,避免破坏既有能力 | — Pending |
| 其它能力暂不修改 | 控制重构半径,集中资源在核心渲染替换 | — Pending |
## 演进
本文件会在阶段切换与里程碑完成时持续演进。
**每个 Phase 完成后**(通过 `$gsd-transition`
1. 有需求被证伪 → 移到“不做”并说明原因
2. 有需求被验证 → 移到“已验证”并记录来源 Phase
3. 出现新需求 → 加到“进行中”
4. 产生关键决策 → 追加到“关键决策”
5. “这是什么”是否仍准确 → 如有漂移及时更新
**每个 Milestone 完成后**(通过 `$gsd-complete-milestone`
1. 全面复查所有章节
2. 核心价值是否仍是最高优先级
3. “不做”是否需要调整边界与理由
4. 更新背景与上下文到当前真实状态
---
*Last updated: 2026-05-21 after initialization*