FMDB默认是不支持加密的,而且行业里也有提供加密的sqlite开发库,但大多数是需要收费的,并且支持加密的数据库管理应用也是收费。今天在这里我给大家集成一个免费的加密库,还支持跟FMDB对接的:SQLCipher,同时提供一个自己研发一个简单支持加密的数据库管理应用(mac版本)源码下载:
https://github.com/wuyoujian0313/SQLiteManager
要集成FMDB支持加密,就需要把SQLCipler集成进来,一般有两种方式(我个人采用第二种)
第一种,采用pod方式来集成:
platform :ios, '6.0'
target "FMDB-encrypt"do
pod 'FMDB'
pod 'FMDB/SQLCipher'
end
对于这种方式,大家可以百度一下;
第二种,采用源码的方式集成:
1、我们需要创建一个.xcconfig文件,里面输入:
SQLCIPHER_OTHER_CFLAGS = $(inherited) -DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2 -DSQLITE_THREADSAFE -DSQLCIPHER_CRYPTO_CC
OTHER_CFLAGS = $(inherited) ${SQLCIPHER_OTHER_CFLAGS}
上面的意思就是在工程的Build Settings里增一个配置同时修改一个配置;要试他生效就需要把这个xcconfig文件导入到工程里,然后在工程的project配置里的:如图配置:
只有导入工程里的xcconfig文件这里才能够看到到。编译一下工程,你可以去target的Building Settings里找到刚刚配置的那两项;这两项本质上就是给工程增加一个编译宏,因为SQLCipher的sqlite3.h和sqlite3.m以及FMDB里需要通过这些宏打开支持加密;
这里讲到了xcconfig文件,我们可以用于其他的一些配置,这些配置怎么找到,可以用文本的方式打开工程文件:xcodeproj里的配置文件,可以找到对应的Building Settings里的配置宏。
最后把SQLCipher的sqlite3.h和sqlite3.m导入到工程里,后面的使用,可以参考下面代码:
BOOL bSuc = [selfopenDB:dbFile];
if (!bSuc) {
returnnil;
}
if(key !=nil && [key length] >0){
[_dbsetKey:key];
}
[_dbsetShouldCacheStatements:YES];
FMResultSet *rs = [_dbexecuteQuery:sql];