OC网络学习13:数据共享App Groups探索

张建 lol

前言

  • App Groups数据共享空间,这是 iOS8 新开放的功能,在 OS X 上早已存在。

  • App Groups 主要用于同一 App Groups 下的 不同App 共享同一份 读写空间,以实现数据共享

  • App Groups 也可以用于 Containing AppExtension 共同读写一份数据,比如:系统的股市应用等

注:只能使用于同一个开发者账号,如果不同开发者账号请考虑剪切板 UIPasteboard

创建 App Groups

  1. 登录开发者账号创建 App Groups

  • 填写 Identifier

  • 最后 确认
  1. Xcode 中配置

请确保你的开发者账号在Xcode上处于登录状态,以便下面的操作,Xcode 中配置 App Group(注意:要用到数据共享的工程都要配置 ExtensionContaining App 都需要配置)

  • Extension 中开启

TARGET -> App Extension Demo -> Capabilities -> App Groups -> 双击添加,添加之后,会根据配置的自动证书去生成 groups,命名规则:group.Bundle Identifier

  • 在 Containing App 中开启

同理:TARGET -> Host App -> App Groups

  • 创建 App Groups 成功后,会生成 Extitlements File 文件,Containing AppExtension 相同

Containing App 与 Extension 数据共享

配置工作完成,接下来,就是实现数据共享代码

  1. 通过 NSUserDefaults 共享数据
1
2
// NSUserDefaults
self.userDefaultes = [[NSUserDefaults alloc] initWithSuiteName:group];
  • 存数据
1
2
3
4
5
6
7
8
// 保存数据到共享空间
- (BOOL)setObject:(nullable id)value forKey:(NSString *_Nullable)key{
if (!value || !key) return false;
[self.userDefaultes setObject:value forKey:key];
[self.userDefaultes synchronize];

return true;
}
  • 取数据
1
2
3
4
5
6
// 从共享空间取值
- (nullable id)objectForKey:(NSString *_Nullable)key{
if (!key) return nil;

return [self.userDefaultes objectForKey:key];
}

注:
1、保存数据的时候必须指明 group identifier
2、而且要注意 NSUserDefaults 能够处理的数据只能是可 plist 化的对象,详情见 Property List Programming Guide 。
3、为了防止出现数据同步问题,不要忘记调用 synchronize;

  1. 通过 NSFileManager 共享数据
1
2
// 通过 containerURLForSecurityApplicationGroupIdentifier 方法和 共享域标识符 我们可以获取到该共享域的路径
self.url = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:group];

利用 NSFileManager 我们可以存取各种文件,数据库文件(.db),json文件,framework等等;
我们可以复制各种文件到 App Groups 的存取区域,在 另一个App/Extension 中拿出来

  • 写入文件
1
2
3
4
5
6
7
8
#pragma mark - 写入 jsonStr dic data array
// 写入 jsonStr
- (BOOL)writeToFile:(NSString *)filename withJsonStr:(NSString *)jsonStr{
// 拼接文件名
NSURL * fileURL = [self.url URLByAppendingPathComponent:filename];
// jsonStr
return [jsonStr writeToURL:fileURL atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
  • 读取文件
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma mark - 读取 jsonStr dic data array
// 读取jsonStr
- (NSString*)readJsonStrFromFile:(NSString *)filename{
NSURL * fileURL = [self.url URLByAppendingPathComponent:filename];
BOOL isExist = [self isExistFile:filename];
if (isExist) {
NSString * str = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil];
return str;
}else{
NSLog(@"文件不存在");
return nil;
}
}
  • Post title:OC网络学习13:数据共享App Groups探索
  • Post author:张建
  • Create time:2023-06-27 13:51:15
  • Post link:https://redefine.ohevan.com/2023/06/27/OC网络/OC网络学习13:数据共享App Groups探索/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
On this page
OC网络学习13:数据共享App Groups探索