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

3.9 KiB
Raw Blame History

ReadViewSDK

这是什么

ReadViewSDK 是一个 iOS 阅读 SDKRDReaderView),提供 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(阅读器 UXEPUBTextRenderingTXT/TextBook、以及 LegacyRDReaderController(历史实现并存)。
  • WXRead 参考资料位于 Doc/WXRead/,包含对微信读书 EPUB 阅读器的逆向分析文档与相关符号/源码片段。

约束

  • 平台iOS 15+Podspec 声明 iOS 15.0;工程中常见 15.6)— 现有基线
  • 语言与风格:代码标识符保持英文;文档/计划使用中文(见 CONTEXT.md)— 项目约束
  • 依赖管理CocoaPods 为主(RDReaderView.podspecPodfileReadViewDemo/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