如何快速访问信号应用程序分支上的 GRDB.swft/SQLCipher 数据库?

问题描述 投票:0回答:1

我目前正在开发信号消息应用程序的一个分支,这里我的应用程序来自原始的 5.22 版本。请看一下回购协议。我不是这个分支的原始开发者,也没有数据库经验。

更多信息:

我想执行本地加密和压缩备份,以便用户将其存储在电脑、磁盘或其他地方。我通过复制数据库、WAL、附件等,将所有内容都包含在一个文件中来完成此操作。此时用户已经安装了应用程序并启动了“恢复备份”路径,备份的所有文件都存储在一个新文件夹中。

应用程序正在使用

GRDB.swift/SQLCipher
pod 来管理数据库。

旧数据库和新数据库以相同的方式创建,我想它们使用相同的密码,在

Configuration()
init

中设置

目标:我应该读取旧数据库并将数据写入刚刚安装的数据库,选择要覆盖的内容(聊天)并保留(设置、密钥等)。

因为我想我应该首先在“导入的”数据库上打开数据库会话,所以我尝试这样做:

do {
var configuration = Configuration()
let dbQueueImported = try DatabaseQueue(path: importedSqlite.path) //here is crashing

//then I don't know what to do, some copy action maybe.

} catch {
print("error \(error)")
}

但是 dbQueueImported 触发了这个断言

extension Database {

//MARK: - database closing

///this method must be called before database deallocation

func close() {

SchedulingWatchdog.precodnitionValidQueue(self)
assert(!isClosed)

//rest of the code....

最后一件事,如果我评论断言,我会收到错误:

SQLite error 1 with statement 'SELECT * FROM sqlite_master LIMIT 1': unsupported file format.

我想我应该做一些事情来打开/关闭连接

  • 我应该如何读/写或复制甚至访问数据库?
  • 有没有办法获取表和列的列表,以便选择要复制的信息?

即使你可以告诉我是否有人在信号处,我可以寻求帮助也会很有用

swift database sqlite sqlcipher grdb
1个回答
0
投票

assert(!isClosed)
断言已在 GRDB 5.0.3 中被删除:考虑升级您的 GRDB 副本。

由于您可能没有运行 GRDB 5,请参阅迁移指南:

© www.soinside.com 2019 - 2024. All rights reserved.