美文网首页IOS特技ios框架ios大神之路
持久化KeyVaule封装系列---KeyChain

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

作者: ColeX | 来源:发表于2016-03-10 17:27 被阅读578次
    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有一点区别就行,注意:证书相同才可以数据共享

    相关文章

      网友评论

        本文标题:持久化KeyVaule封装系列---KeyChain

        本文链接:https://www.haomeiwen.com/subject/abptlttx.html