Jason的技术博客

Jason的技术博客

Thoughts, stories and ideas.

包大小优化

On-Demand Resources调研

On-Demand Resources 是苹果提供给开发者的一个优化手段,开发者可以将app安装包和app依赖的资源在AppStore上分开存储,并按需下载,这样做的好处有: * 减小了app安装包的大小 * app资源按需加载 * 把不常使用的资源保存在远端 Tag On-Demand Resources的资源通过Tag来标记管理,Tag是由开发者创建的字符串,比如一个游戏app中,所有和第一关level 1有关的资源都归属于level_1这个Tag下。 Tag类型 * Initial install tags 和app一同从AppStore上下载,因此也会影响安装包的大小。 * Prefetch tag order 属于这类tag的资源会在app安装完毕后再被下载,并且会按照他们在Xcode中的排列顺序进行。不过这些的资源在下载完成后有可能还没来得及使用就被清理了,比如安装好app之后很长时间没打开。 * Dowloaded only on demand 属于这类tag的资源会在使用时才被下载。 Tag生命周期 大小限制 对于一个tag而言,sl
8 min read
Database

FMDB的一次加密实践

在iOS开发领域,FMDB是一款经典的SQLite数据库操作工具,最近在开发过程中涉及到一个给数据库中数据进行加密的需求,经过一系列调研之后我选择了FMDB+SQLCipher的方案,实践表明这个方案可以对已有的或新建的SQLite数据库进行加解密。 对于使用Cocoapods的开发者来说,在项目中引入FMDB和SQLCipher很简单,只要在podfile文件中加入下面这一行 $ pod 'FMDB/SQLCipher' 然后执行 pod install 命令即可。 从FMDabase.h中可以看到它已经提供了加密接口: ///------------------------- /// @name Encryption methods ///------------------------- /** Set encryption key. @param key The key to be used. @return `YES` if success, `NO` on error. @see https://www.zetetic.net/sqlcipher/
4 min read
RxSwift

RxSwift中的flatMap和flatMapLatest

flatMap和flatMapLatest是RxSwift中最常用的两种信号源变换函数,它们都可以把一个Observable转换成另一个Observable,并且把新得到的Observable给“拍平”之后再发送出来,这里的“拍平”可以理解成无论后续有多少新的Observable生成,它们的元素在订阅者看来都像是一个信号源发出的一样。 那么这两个变换操作不同之处可以通过它们的大理石图看出来: 可以看出经过flatMap转换得到的信号流具有“记忆”现象,对于那些曾经转换得到的信号源,它们再次发出的信号仍然可以被订阅者接收到,而经由flatMapLatest转换得到的信号流则没有这样现象。 二者的这种差别在实际使用中需要特别注意,在某些场景下flatMap的“记忆”现象可能会带来意料之外的事情,比如考虑如下场景,对于一个搜索功能,每当搜索框的输入内容发生变化,就发起一次搜索请求,将请求得到的结果渲染在列表上,下面的两段代码都可以完成这个功能,唯一的区别是在flatMap和flatMapLatest的选择上。 /// flatMap textField.rx.text .comp
12 min read