持久化KeyVaule封装系列---KeyChain

Keychain.png

题外话

我一般把存储方式(app中)分为三种

  • in memory
    • 一般对象持有,对象销毁,数据跟着消失 (肯定有人要跟我扯单例了……)
  • in disk
    • 这也比较好理解,数据库,归档,文件存储等,应用只要不被删掉,就一直持有
  • in keychain
    • 今天的主人公,可以理解为存储在钥匙串中,而钥匙串是集成在证书中的,所以就算干掉程序,下次只要用相同证书安装,数据依然在

作用?

  • 保存私密信息
    iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储。相对于NSUserDefaults、文件保存等一般方式,keychain保存更为安全,而且keychain里保存的信息不会因App被删除而丢失,所以在重装App后,keychain里的数据还能使用。

    • 说一个很简单的需求:某app需要一周之内免登陆,一般我们会将用户信息存储到文件中,但是中间第三天时不小心删掉了app,那么上述就行不通了,但是keychain依然坚挺。
  • app之间数据共享
    通俗来说,使用相同证书的app之间可以数据共享,可以满足一些公司app之间的特殊需求

API

优秀代码git上都有,我简单封装了一下,api设计成了大家比较习惯的key value的方式

那么两个app之间如何实现数据共享?

步骤

1.打开keychain sharing
2.将两个(多个)app 的bundle id 添加到keychain groups中(每个app都需要这么做)


xcode会自动生成

3.启动程序……

运行效果

我在程序1中保存一个数据

1

在2中取值,完美!


2

后续

keychain可以保存任意obj,obj需要自己实现NSCoding。

Demo点我

demo中放了两个基本一模一样的程序
大家可以尝试下,修改让bundle id有一点区别就行,注意:证书相同才可以数据共享

推荐阅读更多精彩内容