Skip to content

备份与恢复

这一页之前描述的是一套“压缩包 + manifest + 六步恢复流程”的设计,但当前代码里的 备份/恢复只是本地沙盒内的轻量快照,覆盖范围小得多。下面按实际实现重写,避免把 设想中的能力当成已有功能。

当前实现范围

设置 → 数据管理里的“备份”“恢复”按钮,实际只针对两个存储 key:

text
flagship.books         书架(书籍列表,含每本书的来源、目录、当前章节等)
flagship.bookSources    书源列表

不在这套备份范围内:阅读进度(flagship.progress.<bookId>,单独按书存储)、书签 (flagship.bookmarks)、替换规则(flagship.cleanRules)、RSS 订阅、TTS 引擎配置、 阅读排版设置。这些数据依然持久化在本地,只是不会被“备份”按钮覆盖式保护,也不会被 “恢复”按钮还原——它们的跨设备保护依赖的是 iCloud 同步,不是这里的备份。

备份/恢复的实际行为

  1. 点击“备份”→对 flagship.booksflagship.bookSources 各自调用一次 RobustStorageManager.createBackup(key:):把当前文件复制一份到应用沙盒内的 .backup/ 隐藏目录,文件名是 <key>_<unix时间戳>.bak
  2. 每个 key 只保留最新 3 份备份,超出的旧备份会被自动删除;
  3. 点击“恢复”→对每个 key 调用 restoreFromLatestBackup(key:):按创建时间取最新一份 .bak 文件,覆盖回当前数据文件;
  4. 成功/失败都会弹 toast 提示(这是后来修的一个问题——早期版本静默执行,用户点了按钮 却看不到任何反馈,容易误以为“点了没反应”而重复点击)。

这套机制本质上是同一台设备上的“最近几次快照”,用来防止一次写入把书架/书源数据 写坏后无法回滚,不是可以导出分享、转移到另一台设备的备份文件——.backup/ 目录在 应用沙盒内部,不出现在“文件”App 或隔空投送里。另外,写入 flagship.books/ flagship.bookSources 这类受管理的 key 时(只要 enableAutoBackup 开启,默认就是 开启的),本身也会在覆盖前自动打一份快照,不是只有手动点“备份”才会产生快照。

想要的是别的能力?

  • 单独迁移书源:用在线书源里的 JSON 导入/导出, 和这里的“备份”是两套独立机制;
  • 替换规则(正文清洗规则):在替换规则管理页有自己的导出/分享入口,同样不经过 这里的备份;
  • 跨设备保持书架、进度、书签、书源同步:见 iCloud 同步
  • 完整应用数据的可分享备份包:当前代码里没有这个功能,不要假设存在。

Readori 使用与开发文档