内容简介:Mixin Messenger 早期采用 FMDB 后来切换至 WCDB 沿用至今,一直比较可靠稳定,这里分享一下使用心得和功能扩展。Mixin Messenger 是一个开源的端对端加密聊天软件,并且集成基于 Mixin Network 的多链钱包。官网下载:
Mixin Messenger 早期采用 FMDB 后来切换至 WCDB 沿用至今,一直比较可靠稳定,这里分享一下使用心得和功能扩展。
关于 Mixin Messenger
Mixin Messenger 是一个开源的端对端加密聊天软件,并且集成基于 Mixin Network 的多链钱包。
- 支持 1v1 和 256 人群组端对端加密聊天
- 支持完整的文字、图片、贴纸、视频、音频、文件、联系人消息类型,支持语音呼叫
- 多链钱包目前支持 BTC、ETH、EOS、DASH、XRP、XEM、SC、DOGE、BCH、LTC、ZEC、ETC、ZEN 共计 13 条主链,超过 6.3 万种代币。基于 Mixin Network 的钱包还加强了隐私保护,使得转账交易不可被追踪
官网下载: https://mixin.one/messenger
开源地址: https://github.com/MixinMessenger/ios-app
关于 WCDB Swift
WCDB Swift 是一个易用、高效、完整的移动数据库框架,基于 SQLite 和 SQLCipher 开发。
- 支持 Codable 协议,支持 ORM ,通过对象直接操作数据库
- 写操作性能相比 FMDB 有明显优化
- 线程安全,可以安全地在任意线程进行数据库操作
- 数据库字段升级很方便。由于数据库模型与类定义绑定,使得字段的增加、删除、修改都与类变量的定义保持一致,不需要开发者额外地管理字段的版本。
- 支持 WINQ 语言集成查询,官方宣称 只要是 SQL 支持的语句,都能使用语言集成查询完成
- 支持同步返回执行结果,避免陷入回调地狱(FMDB 使用 FMDatabaseQueue 时只能通过回调来返回数据,又不想用 DispatchSemaphore 来控制)
- 支持全文搜索(暂时还没有使用,不知道效果如何)
- 支持原子操作,比如插入数据后立刻查询(事务可以保证一段操作的原子性)
开源地址: https://github.com/Tencent/wcdb/
扩展新功能
fork 代码开源地址: https://github.com/MixinNetwork/wcdb,注意使用 xcode10.2+swift4.2 分支代码。
支持 SQL 语句
WINQ 语言集成查询适用于简单的增删改查,但是对于非常复杂的 SQL 语句,用 WINQ 拼出来且不说代码非常多 — — 可读性和可移植性非常差,搞不懂官方为什么不支持一下。大体上读了一下源码可知 WINQ 也是拼 SQL 语句,由于库作用域限制,只好 fork 一份改源码:
- 参考 https://github.com/MixinNetwork/wcdb/commit/33869a3195b806cbac4bbe667b4b73d003917139 修改记录即可支持 SQL ,新增了 SelectSQL 和 UpdateSQL 等对象
- 使用 SQL 语句查询和更新:
// 带参数查询 database.prepareSelectSQL(User.Properties.Id, "SELECT id FROM users where id = ?", values: ["1"]) // 带参数 LIKE 查询 database.prepareSelectSQL(User.Properties.Id, "SELECT id FROM users where name like ?", values: ["%candy%"]) // 带参数更新 let updateSQL = try database.prepareUpdateSQL(sql: "UPDATE conversations SET last_message_id = (select id from messages where conversation_id = ? order by created_at DESC limit 1) WHERE conversation_id = ?") try updateSQL.execute(with: [conversationId, conversationId])
需要特别注意的是如果返回 Codable 数据,SELECT 字段的顺序必须要和 CodingKeys 里的顺序一致,否则数据会填充乱,用 WINQ 不会有这个问题。
支持备份功能
与微信、QQ、Telegram 不同,Mixin Messenger 是端对端加密服务器不存消息,使得消息备份功能必须需要依赖客户端来完成,WCDB 没有这个需求所以不支持,可以通过扩展 SQLite 直接支持:
-
参考 https://github.com/MixinNetwork/wcdb/commit/83416a270116fe97fc5f8873d0ad5686a24964db 修改记录即可支持备份功能,还支持进度回调
- 使用备份功能:
try database.backup(withFile: path) { (remaining, pagecount) in // progress = Float(pagecount - remaining) / Float(pagecount) }
参考
整体来说还是比较好用,关键是可靠,而且 Swift 支持的比较好,Codable 支持得也很赞,欢迎交流使用经验,我的 Mixin ID:762532。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Phoenix解读 | Phoenix源码解读之索引
- Phoenix解读 | Phoenix源码解读之SQL
- Redux 源码解读 —— 从源码开始学 Redux
- AQS源码详细解读
- SDWebImage源码解读《一》
- MJExtension源码解读
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
WebWork in Action
Jason Carreira、Patrick Lightbody / Manning / 01 September, 2005 / $44.95
WebWork helps developers build well-designed applications quickly by creating re-usable, modular, web-based applications. "WebWork in Action" is the first book to focus entirely on WebWork. Like a tru......一起来看看 《WebWork in Action》 这本书的介绍吧!