This commit is contained in:
douboer
2025-09-07 12:39:28 +08:00
parent 1ba01e3c64
commit 4d033257fe
5714 changed files with 15866 additions and 1032 deletions

70
ipad_app/README.md Normal file
View File

@@ -0,0 +1,70 @@
# iPad Reader (Offline Bundle Viewer)
基于 Python 导出的 iPad 数据包 (export_ipad_bundle) 的 SwiftUI 离线浏览器。
## 目标
- 离线浏览书籍元数据、书评与批注
- 快速导入 ZIP`ipad_bundle_*.zip`
- 原生 SwiftUI + Charts 展示周/月/年/气泡统计(含今年已读)
- 本地沙盒解压 + 简单封面缓存
## 数据包结构
```
books_meta.json # 书籍元信息数组
annotations.json # { bookId: [ {uuid, creationdate, selected, note, ...}, ... ] }
stats.json # { global: {...} }
bookintro.json # { title: review }
covers/<id>.jpg # 封面缩略图
```
## 运行环境
- Xcode 15+
- iOS 17 SDK可改最低到 16只要使用 Charts 框架即可)
- Swift 5.9+
## 功能概览
- 文档导入:使用 `UIDocumentPickerViewController` (通过 `UIKit` bridge) 选择 ZIP
- 解压:使用 `ZIPFoundation`(需 SPM 依赖)到 `Library/Application Support/ImportedBundle/<timestamp>/`
- 模型解析JSONDecoder -> 内存模型 + 按需懒加载 annotations
- 统计Swift Charts 构建 4 个图 + “已读”气泡自绘
- 搜索:标题/作者前缀过滤(基础实现)
## 目录结构
```
ipad_app/
README.md
Package.swift
Sources/
IpadReaderApp.swift # 入口
Models/BundleModels.swift # 数据模型
Services/BundleImporter.swift
Services/ImageCache.swift
ViewModels/LibraryViewModel.swift
Views/ContentView.swift
Views/BookListView.swift
Views/BookDetailView.swift
Views/StatsView.swift
Views/Components/BubbleMetricsView.swift
```
## 添加依赖
`Package.swift` 中引用:
```
.package(url: "https://github.com/weichsel/ZIPFoundation", from: "0.9.0")
```
## 使用步骤
1. 在根目录执行 `open ipad_app` 用 Xcode 打开 (或手动新建本地 Package App)
2. 运行到模拟器或真机(首次会是空库)
3. 点击 导入按钮,选择 Python 导出的 `ipad_bundle_*.zip`
4. 等待解析后显示书籍列表
5. 进入详情查看笔记与书评
## 后续可扩展
- Spotlight / CoreData 持久化
- 批注全文搜索、高亮段落分组
- AI 离线摘要缓存合并
- 多次导入合并策略(按 book id 去重)
---
此目录下其余 Swift 源码文件由后续步骤自动生成。