题外话
我一般把存储方式(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中保存一个数据
在2中取值,完美!
后续
keychain可以保存任意obj,obj需要自己实现NSCoding。
Demo点我
demo中放了两个基本一模一样的程序
大家可以尝试下,修改让bundle id有一点区别就行,注意:证书相同才可以数据共享