Signal iOS 5.22.1分支GRDB.swift/SQLCipher数据库备份恢复问题
问题背景
- 基于Signal iOS 5.22.1版本分支开发,无数据库开发经验
- 需求:实现本地加密压缩备份(可存至PC/磁盘等设备);恢复时将备份文件存入新文件夹,读取旧数据库数据并写入新数据库,按需覆盖(如聊天记录)或保留(如设置、密钥)数据
- 项目使用
GRDB.swift/SQLCipher管理数据库,新旧数据库创建方式一致,推测使用相同的Configuration初始化密码
尝试代码
do { var configuration = Configuration() let dbQueueImported = try DatabaseQueue(path: importedSqlite.path) //此处崩溃 //后续需执行数据复制操作,但暂未明确方法 } 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.... }
- 注释断言后出现SQL错误:
SQLite error 1 with statement 'SELECT * FROM sqlite_master LIMIT 1': unsupported file format.
- 添加Swift错误断点后,错误定位到Atomics.swift的throw逻辑:
extension AtomicValue where T: Equatable { // Sets value to "toValue" IFF it currently has "fromValue", // otherwise throws. public func transition(from fromValue: T, to toValue: T) throws { try lock.perform { guard self.value == fromValue else { throw AtomicError.invalidTransition } self.value = toValue } } }
求助问题
- 如何正确读写、复制或访问新旧数据库?
- 如何获取数据库表及列列表以筛选需复制的数据?
- 是否可联系Signal官方人员获取技术支持?
内容的提问来源于stack exchange,提问作者biggreentree
相关产品推荐
相关产品推荐

