IOS-DOC-001 新增 MaterialReaderView #18

Open
opened 2026-05-30 19:56:06 +08:00 by wangdl · 1 comment
Owner

当前 iOS 已有知识库、资料列表、知识点详情等页面,但缺少资料原文件阅读能力。用户上传资料后必须能查看原文件。

目标:新增 MaterialReaderView 作为统一资料阅读入口。

支持格式:Markdown(Rust 解析后渲染)、TXT(Rust 读取后渲染)、图片(原生预览)、PDF(PDFKit/QuickLook)、Word/Excel(QuickLook)、PPT(外部打开或提示暂不支持)

页面功能:展示文件标题、根据文件类型选择阅读方式、支持返回、支持更多操作入口、支持阅读位置记录、支持标记已读

非目标:不做 PDF 标注、不做 Office 内置高保真预览、不做 OCR、不做复杂富文本笔记

验收标准:从资料详情页可进入 MaterialReaderView、Markdown 可以阅读、PDF 可以打开、图片可以查看、Word/Excel 可用系统预览打开、不支持格式有明确提示

当前 iOS 已有知识库、资料列表、知识点详情等页面,但缺少资料原文件阅读能力。用户上传资料后必须能查看原文件。 目标:新增 MaterialReaderView 作为统一资料阅读入口。 支持格式:Markdown(Rust 解析后渲染)、TXT(Rust 读取后渲染)、图片(原生预览)、PDF(PDFKit/QuickLook)、Word/Excel(QuickLook)、PPT(外部打开或提示暂不支持) 页面功能:展示文件标题、根据文件类型选择阅读方式、支持返回、支持更多操作入口、支持阅读位置记录、支持标记已读 非目标:不做 PDF 标注、不做 Office 内置高保真预览、不做 OCR、不做复杂富文本笔记 验收标准:从资料详情页可进入 MaterialReaderView、Markdown 可以阅读、PDF 可以打开、图片可以查看、Word/Excel 可用系统预览打开、不支持格式有明确提示
wangdl added this to the M3:iOS 主 App 资料阅读闭环 milestone 2026-05-30 19:56:06 +08:00
wangdl added the
priority:p0
type:implementation
area:ios
labels 2026-05-30 19:56:06 +08:00
Author
Owner

实现完成 (2026-06-02)

新增文件

Features/MaterialReader/MaterialReaderView.swift (~280 行)

核心架构:

  • ViewModel:调 Rust FFI 做解析(parseMarkdown / parseText / detectMaterialType / readImageMeta),状态机 loading/loaded/error
  • MaterialReaderView:根据 PreviewMode 分发 4 种渲染路径
    • nativeReader → Markdown/TXT block 列表 或 图片预览
    • platformPreview → QuickLook sheet(PDF/Word/Excel)
    • externalOpen → ShareLink 外部打开(PPT)
    • unsupported → 提示不支持
  • DocumentBlockView:渲染 Rust 生成的 8 种 DocumentBlock(标题/段落/列表/代码块/引用/表格/图片/分隔线)

解析逻辑

  • Markdown/TXT 解析全部走 Rust FFI(不重复实现 Swift 解析器)
  • 图片 metadata 走 Rust read_image_meta
  • PreviewMode 映射由 Swift 侧 1:1 转换(MaterialType.preview_mode() mirror)

Route

  • 新增 .materialReader(materialId:filePath:materialType:)

待 Xcode 配置

使用前需要把以下文件加入 Xcode 项目:

  1. bindings/ios/generated/zx_document.swift(生成的 Swift 类型)
  2. bindings/ios/ZxDocumentRuntime.xcframework(Rust 编译产物)
## 实现完成 (2026-06-02) ### 新增文件 **`Features/MaterialReader/MaterialReaderView.swift`** (~280 行) 核心架构: - **ViewModel**:调 Rust FFI 做解析(`parseMarkdown` / `parseText` / `detectMaterialType` / `readImageMeta`),状态机 loading/loaded/error - **MaterialReaderView**:根据 `PreviewMode` 分发 4 种渲染路径 - `nativeReader` → Markdown/TXT block 列表 或 图片预览 - `platformPreview` → QuickLook sheet(PDF/Word/Excel) - `externalOpen` → ShareLink 外部打开(PPT) - `unsupported` → 提示不支持 - **DocumentBlockView**:渲染 Rust 生成的 8 种 DocumentBlock(标题/段落/列表/代码块/引用/表格/图片/分隔线) ### 解析逻辑 - Markdown/TXT 解析全部走 Rust FFI(不重复实现 Swift 解析器) - 图片 metadata 走 Rust `read_image_meta` - `PreviewMode` 映射由 Swift 侧 1:1 转换(`MaterialType.preview_mode()` mirror) ### Route - 新增 `.materialReader(materialId:filePath:materialType:)` ### 待 Xcode 配置 使用前需要把以下文件加入 Xcode 项目: 1. `bindings/ios/generated/zx_document.swift`(生成的 Swift 类型) 2. `bindings/ios/ZxDocumentRuntime.xcframework`(Rust 编译产物)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/zhixi-document-runtime#18
No description provided.