Morris_2019.06.14

AppGroup是什么

App Groups Entitlement

AppGroup是一个App组,里面可以有若干个App,AppGroup组是个虚无的存在,若干个App通过同一个AppGroup组的标识来连接起来,这个标识就是App Groups Entitlement下key对应的value。

同一个App需要加入多个不同的AppGroup的话,只需要在App Groups Entitlement下的App Groups下添加新的item,填入AppGroup的唯一标识。

关于APP Groups网上资比较多。

AppGroup的作用

App Group主要作用是实现跨进程数据共享,在不同的App之间可以互访问同一块内存区间。

轻量级的数据用NSUserDefaults对AppGroup组里的数据进行访问,比较大的数据使用NSFileManager进行数据访问。

AppGroup相当于建立了一个通道,若干个App都可以通过这个通道来实现数据共享。

AppGroup使用

1、创建AppGroup

在Apple Developer的证书管理目录下,找到Identifiers,有一个App Groups,在这里面创建一个AppGroup。

2、AppID配置AppGroup

在Identifiers下的App IDs选项下,选择需要设置AppGroup的App ID,选择App Group,配置上创建的AppGroup。

3、工程配置App Group

回到项目中,打开项目中的App Group选项。TARGET->Capabilities->App Groups。打开该选项。

打开之后项目中会出现一个xxx.entitlements。打开里面是AppGroup的信息。

在实现录屏直播时候,添加的Broadcast Upload Extension和Broadcast Setup UI Extension也打开这个开关设置,就建立起来了宿主App、Broadcast Upload Extension和Broadcast Setup UI Extension之间数据共享通道。

4、共享数据

4.1 NSUserDefaults

在App之间建立起Group通道后,在任何一个App中写入数据:

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"xxx"];
[userDefaults setValue:@"value" forKey:@"key"];

这里使用initWithSuiteName这个方法,创建一个跨进程读写操作的NSUserDefaults对象,SuiteName即是AppGroup id。

在另外一个App中读取数据:

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"xxx"];
NSString *value = [userDefaults valueForKey:@"key"];

这是在两个有相同AppGroup的App之间,对同一块存储空间进行数据访问的例子。虽然是两个App,但是有相同的AppGroup。

感觉不好的地方放就是这里的key和value毕竟不像在一个App里,要两个App约定好数据类型和key。

在录屏直播过程中,Broadcast Upload Extension和宿主App之间可以进行如上的操作进行数据共享,将宿主App的数据传到Broadcast Upload Extension,也可以将Broadcast Upload Extension的数据传到宿主App中。

4.2 NSFileManager

写入数据

- (BOOL)saveData:(NSData *)data toFile:(NSString *)filename
{NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.xxx.group"];NSURL *fileURL = [groupURL URLByAppendingPathComponent:filename];if ([[NSFileManager defaultManager] fileExistsAtPath:fileURL.path]){if ([data writeToURL:fileURL atomically:NO]) {NSLog(@"write sucess");return YES;}return NO;}else{return [[NSFileManager defaultManager] createFileAtPath:[fileURL path] contents:data attributes:nil];}return NO;
}

读取数据

- (NSData *)dataFromFile:(NSString *)filename
{NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.xxx.group"];NSURL *fileURL = [groupURL URLByAppendingPathComponent:filename];return [[NSFileManager defaultManager] contentsAtPath:[fileURL path]];
}

iOS录屏直播(三)AppGroup相关推荐

  1. iOS录屏直播(二)Broadcast Upload Extension和Broadcast Setup UI Extension

    Morris_2019.06.13 上一篇总结了ReplayKit相关的知识点,实现了应用内的录屏功能,同时涉及到了很少一部分Broadcast Upload Extension和Broadcast ...

  2. iOS录屏直播(一)初识ReplayKit

    Morris_2019.05.08 本篇主要功能: 认识ReplayKit框架 RPScreenRecorder实现在应用内录屏功能 RPPreviewViewController查看录屏内容 RPB ...

  3. iOS录屏直播(四)主App和宿主App数据共享,通信功能实现

    文章目录 CFNotificationCenterGetDarwinNotifyCenter 发送通知 接收通知 注意事项 遗留问题 补充 Morris_ 2019.06.17 上一篇总结了一下App ...

  4. iOS rtmp 摄像头/录屏直播以及观看

    之前讲过如何在centos上使用nginx搭建rtmp服务器(链接),本文介绍一下iOS 端如何通过rtmp录屏直播以及观看,完整的工程代码地址(https://github.com/zxm006/R ...

  5. Android PC投屏简单尝试(录屏直播)2—硬解章(MediaCodec+RMTP)

    代码地址 :https://github.com/deepsadness/MediaProjectionDemo 想法来源 上一边文章的最后说使用录制的Api进行录屏直播.本来这边文章是预计在5月份完 ...

  6. Android实现录屏直播(二)需求才是硬道理之产品功能调研

    请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/54254244 Android实现录 ...

  7. 如何做电脑游戏桌面录屏直播实现手机直接观看

    原创教程 ( 转载请注明出处 ) 2017-6-26,今天来做一下是电脑游戏桌面录屏直播的教程,就是把桌面的游戏直播出去,加上话筒做讲解.最终实现在电脑.手机.微信中都可以观看到游戏的直播和讲解画面. ...

  8. 手游录屏直播技术详解 | 直播 SDK 性能优化实践

    直播无疑是 2016 年的大热话题,七牛云在 6 月底发布了实时流网络 LiveNet 和直播云解决方案后,我们用<直播技术详解>系列文章系统地介绍了直播各个环节的关键技术,帮助视频直播创 ...

  9. android实现录像功能吗,Android实现录屏直播(一)ScreenRecorder的简单分析

    应项目需求瞄准了Bilibili的录屏直播功能,基本就仿着做一个吧.研究后发现Bilibili是使用的MediaProjection 与 VirtualDisplay结合实现的,需要 Android ...

最新文章

  1. JDBC编程专题4之JDBC驱动程序类型
  2. 旋转动画 rotate
  3. Web Service未定义的解决办法
  4. iis配置js支持读取json文件配置
  5. Oracle中Decode()函数使用技巧
  6. Hadoop/Spark相关面试问题总结
  7. 电脑不能开机维修_MacBook维修 苹果笔记本电脑进水不开机
  8. jquery-nodejs-安装与测试
  9. linux如何查看本机名称,Linux查看本机登陆用户信息(w、who、last和lastlog命令)...
  10. position小结
  11. vSphere Client报错:VMRC 控制台的连接已断开。正在尝试重新连接
  12. java中dl列表_Java DLFolder.getFolderId方法代码示例
  13. [推荐系统]互联网推荐系统比较研究
  14. python计算三个点构成的三角形的外切圆圆心坐标及半径
  15. uniapp对接微信公众号H5微信支付、分享、小程序隐藏右上角分享胶囊
  16. 微信小程序--picke选择器(省市区城市)-- 使用taro开发
  17. BNN Pytorch代码阅读笔记
  18. LUA脚本扩展wireshark自定义的协议
  19. Audit login 与 Audit logout
  20. 数字社区数字化技术应用

热门文章

  1. Java房屋租赁系统的设计与实现
  2. 辽宁省营口市谷歌高清卫星地图下载
  3. android模拟器的优缺点,使用模拟器试玩软件的优点和缺点分别有哪些?
  4. 法兰克oitf操作_TALENT系列
  5. DOS命令下的move路径的问题
  6. 谷歌GDELT数据下载代码
  7. MySQL update正在执行中突然断电,数据是否更改成功?
  8. Red Hat9.0 下的五笔输入法
  9. CTEX中无限期试用WinEdt的方法
  10. dnf 运行系统linux,在Linux系统中使用dnf命令安装IceWM,一款非常酷的桌面