工程用得FMDB做数据库的操作,后期要对数据库做加密,这里有两种方法:
这里我选择了第二种,原因不细说,自己决定。
百度后,决定用sqlCipher,而且FMDB是支持sqlCipher的,官方配置说明地址 http://sqlcipher.net/ios-tutorial/,然后尝试,配置失败,而且使app包加大了很多兆,所以
不推荐。
后来在FMDB官方发现了这个:
<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgvLS/ydLU08Njb2NvYXBvZHPAtLCy17DWp7PWU1FMQ2lwaGVyvNPD3Mr9vt2/4rXERk1EQrD8o6zI57n7xPrDu9PDuf1jb2NvYXBvZHOwstewuf212sj9t72/qtS0v+KjrNXiwO/Nxrz20ru49r3Ms8yjrLrcz+o8L3A+CjxwPs+4o7podHRwOi8vY29kZTRhcHAuY29tL2FydGljbGUvY29jb2Fwb2RzLWluc3RhbGwtdXNhZ2U8L3A+CjxwPiAgICAgILW91eLA787Sw8fL+df2tcS+zcrH0qqw0SBGTURCL1NRTENpcGhlciAg08Njb2NvYXBvZHMgsLLXsLW919S8urXEuaSzzMDvoaM8L3A+CjxwPiAgICAgILzytaXX9reovs3Kx6OovdPPwsC0tcSyvdbotcTHsMzhysfE47XEtefE1MnPsLLXsMHLY29jb2Fwb2Rzo6zH687xsdiwtNXVyc/D5sG0vdO1xL3Ms8zF5NbDusOjrLfx1PLPwsPmsr3W6Lvhyqew3KOpo7o8L3A+CjxwPiAgICAgIDEu1NrE+tfUvLq1xLmks8zEv8K8z8LQwr2o0ru49s7EvP5Qb2RmaWxlo6y08r+q1tW2yyAgIMrkyOvD/MHu0NAgICQgdmkgUG9kZmlsZSAgLCDIu7rz0LTI6yAgIHBvZCChrkZNREIvU1FMQ2lwaGVyIKGvo6wgyLu687GjtObNy7P2PC9wPgo8cD4gICAgICAyLsP8we7Q0NaxvdMgyuTI6yAgJHBvZCB1cGRhdGUgLjwvcD4KPHA+ICAgICAgyLu687XItP3WsbW9s/bP1qO6PC9wPgo8cD4gICAgICA8L3A+CjxwcmUgY2xhc3M9"brush:java;">Analyzing dependencies Downloading dependencies Installing FMDB (2.3) Generating Pods project Integrating client project [!] From now on use `sqliteHasCcode.xcworkspace`.
类似这样的提示出现,标示安装成功,然后目录会变成类似这个样子:
之后进入工程都要点这个 .xcworkspace,进入后会是这个样子:
我是直接在FMDatabase.m里加的,这个看个人代码需要加的地方加就ok,一般是在数据库open之后就用这个 setKey 方法。
然后编译,运行,不出意外是OK得,用第三方数据库管理工具验证是否加密,当导入加了密的数据库的时候,会直接提示 ‘数据是加密的’ 类似的话,如果用命令行的sqlite3 打开的话,是可以打开的,但是当用 .table 查看的时候,是看不见任何表的,入下图:
但事实上,这个数据库是有表有内容的, 这样就防止了我们数据库的数据外泄。
接下来是另一个重点:
用cocoapods安装后,其实是往我们的工程里添加了另外一个工程Pods,个人感觉很不爽,于是决定,把它融合到我的工程里。
先看一下我移成功后的另一个工程的结构(这个工程原来就是有fmdb工程文件的,但是不能加密,我的目的就是要把fmdb搞成支持加密的,应该很多人的工程都是要这个场景吧):
不像是cocoapods 安装的那样,有两个proj,从文件上来说,只多了sqlite3.h 和 sqlite3.m,然后FMDB文件还是你原来用得。这是我们最终要实现的样子,好了,乱入完毕。
开始:
仔细看用cocoapods 安装后的工程结构:
其实和我们平常用得FMDB相比较,只是多了sqlCipher的这块的支持,那么我们只要想办法,把这块单独移到我们之前已经有FMDB得工程里就可以了
sqlCipher目录下,有两个子目录,Support Files是配置文件,common是主代码文件。
common下得两个文件,直接拖入到我们的工程即可,然后关键是这里的配置:
1.pods-sqlCipher.xcconfig:
看到嘛,OTHER_CFLAGS 和 OTHER_LDFLAGS 分别对应工程里build settings的:
Other c Flags :
这个主要是一些编译宏。
和other Linker Flags
-framework 和 Security 是两个,是分开的,别搞成一个了。
按pods-sqlCipher.xcconfig 配置文件里的配置把这两个地方改过来,如上图.
2.pods-sqlCipher-Private.xcconfig
这里的配置其实没什么要改的
GCC_PREPROCESSOR_DEFINITIONS 应该是设置编译器的一些什么,后面设为了COCOAPODS = 1,我们就是为了去掉cocoapod的安装形式的,所以我感觉这个配置我们不用理,所以我也没有管。
HEADER_SEARCH_PATHS,不用配置,因为我们后来只加了sqlite3.h, 和sqlite3.m 在我们的工程目录下,到时候只要包含 #import “sqlite3.h” 就ok
OTHER_CFLAGS 和 OTHER_LDFLAGS 和PODS_ROOT 其实就是用得pods-sqlCipher.xcconfig里的这几个的设置,所以pods-sqlCipher.xcconfig设置好这里也就好了。
因为用cocoapods安装后,这里的这些配置是要使sqlCipher工程和主工程的一些配置统一的,所以在移掉cocoapods安装的形式后,就不用管这些了。
其实简单步骤就是:
1.在你有fmdb的工程里,加入sqlite3.h 和 sqlite3.m
2.在工程的build setting里修改两个配置
一个是other c flags ,如上面图的那个 other c flags
一个是 other link flags , 入上图那个other lilnk flags