美文网首页
iOS应用间通信

iOS应用间通信

作者: 涛昇依旧 | 来源:发表于2018-04-11 17:59 被阅读117次

    上一篇文章中我们已经详细的介绍了通知扩展怎么使用,无奈我们产品的设计又有了其他 奇(辣) 思(鸡) 妙(到) 想(死)的想法.

    产品设计图

    类似于这种就必须需要在通知扩展中拿到拿到主工程的配置

    在iOS 8系统之前,每一个app在物理上都是彼此独立的,app之间不能互访彼此的私有数据。而在引入扩展之后,其他app可以与扩展进行数据交换。基于安全和性能的考虑,每一个扩展运行在一个单独的进程中,它拥有自己的bundlebundle后缀名是.appex。扩展bundle必须包含在一个普通应用的bundle的内部。

    通知扩展

    但是可能是本人太笨的原因,还是无法在通知扩展中调用主工程的配置,于是我在网上废了很长一段时间去搜资料(其实是自己太懒,没有认真搜),终于被我找到了一个神奇的东西App Groups

    App Groups

    iOS8之后苹果加入了App Groups功能,应用程序之间可以通过同一个group来共享资源,app group可以通过NSUserDefaults进行小量数据的共享,或者使用 NSFileCoordinatorNSFilePresenter 甚至是 CoreDataSQLite 来进行更大的文件或者是更复杂的数据交互。

    首先我们需要开启 App Groups。得益于 Xcode 5 开始引入的Capabilities,这变得非常简单(至少不再需要去 developer portal 了)。选择主ZYBaseTest,打开它的 Capabilities 选项卡,找到 App Groups 并打开开关,然后添加一个你能记得的 group名字,比如 group.ZYNotificationServiceGr。接下来你还需要为 ZYBaseTestPushExtend 这个 target 进行同样的配置,只不过不再需要新建 group,而是勾选刚才创建的 group 就行。

    主工程
    屏幕快照 2018-04-11 上午9.00.59.png 通知扩展
    以上两个操作在ZYBaseTestZYBaseTestPushExtend两个target中都需要设置好,设置好了之后,数据就可以共享了。

    注意 ,坑点要来了

    一般我们都是使用NSUserDefault来存储一些小的配置,比如我就是存的用户是否开启了语音播报、是否选择了简易的语音播报。我相信大家一般都是用[NSUserDefaults standardUserDefaults]来创建NSUserDefaults对象,但是如果通过这种方式创建的话,你是无法在通知扩展中拿到你在主工程中设置的NSUserDefaults信息!!

    在这里,存储数据时,一定要通过[[NSUserDefaults alloc] initWithSuiteName:@"groupName"]这个格式去创建NSUserDefaults对象,groupName填写当前设置AppGroups勾选的名字(比如我的就是group.ZYNotificationServiceGr)

    创建方法区别

    • initWithSuiteName会在Library/Preference下新建一个以name为名字的plist文件 (两个访问的是同一个plist)
    • [NSUserDefaults standardUserDefaults]是以bundle id为名字的一个plist文件 (两个访问的是不同的plist)

    AA:利用这个我们可以给每一个用户新建一个偏好设置的文件,保存皮肤,字体等,不同的用户登录就会有不同的效果。

    另外可能是我个人的原因吧,即使设置了APP group我还是无法在通知扩展中访问pch内的东西,所以我只有祭出杀器 大杀器-手动导入

    然后就是很顺利的访问了


    通知扩展中的代码
    最后为了你们看的方便,我把我宏的字段也给你们看
    宏的字段

    吼吼~结束了,本人文采太差了,见谅见谅哈 。希望对你们有点点帮助。

    相关文章

      网友评论

          本文标题:iOS应用间通信

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