docs: initialize project

This commit is contained in:
shen 2026-05-21 20:35:33 +08:00
parent daa36d8fe7
commit 319a34da93

73
.planning/PROJECT.md Normal file
View File

@ -0,0 +1,73 @@
# 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*