iBook/ipad_app
douboer 6a8e0dc5a8 Remove ignored files from repo 2025-09-08 10:01:04 +08:00
..
.swiftpm/xcode 'update' 2025-09-07 12:39:28 +08:00
Sources 'update' 2025-09-07 12:39:28 +08:00
Package.resolved 'update' 2025-09-07 12:39:28 +08:00
Package.swift 'update' 2025-09-07 12:39:28 +08:00
README.md 'update' 2025-09-07 12:39:28 +08:00

README.md

iPad Reader (Offline Bundle Viewer)

基于 Python 导出的 iPad 数据包 (export_ipad_bundle) 的 SwiftUI 离线浏览器。

目标

  • 离线浏览书籍元数据、书评与批注
  • 快速导入 ZIPipad_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 源码文件由后续步骤自动生成。