iOS 8 之 App Group

尽管App Group在OS X上早已经支持(Enabling App Sandbox),但明确写明不支持iOS。iOS 8又一重大好消息是其宣布即将支持App Group,尽管写这篇文章时,还没有见到苹果官方的iOS App Group文档,但已经成功在程序中测试通过。

说明:本文基于当前XCode最新版本:XCode 6 Beta3

1. App Group简介

App Group用于同一个开发团队开发的App之间,包括App和Extension之间共享同一份读写空间,进行数据共享。同一个团队开发的多个应用之间如果能直接数据共享,将会大大提高用户体验。

此外,iOS 8提供Extension功能之后,App Group就显得尤为必要:当Containning app没有运行,Extension运行的情况下,Extension和Containning app共享信息将是常见需求。

2. 基于App Group进行App/Extension间数据共享

2.1 创建App Group

创建App Group有两种方式:一种是使用Apple Develper portal,另一种是使用XCode,这两种方式的步骤如下:

通过Apple Develper portal创建App Group

image

填写App Group ID和描述,点继续按钮直到成功创建App Group

Screen_Shot_2014_07_08_at_3_57_33_PM

通过XCode创建App Group

在XCode中登录,打开App Group开关,选择自己的Development Team
Screen_Shot_2014_07_08_at_3_52_02_PM

点击“+”按钮,新建一个App Groups
image

和Portal不一样,在XCode中创建App Group不需要输入描述
Screen_Shot_2014_07_08_at_4_23_38_PM

2.2 关联App Group

App Group创建成功之后,在App或者Extension中关联App Group。需要注意的是:需要共享数据的App或者Extension必须与同一个App Group关联。关联时,只需要勾选App Group对应的check box即可,XCode会自动执行后续操作,这些操作包括:

Screen_Shot_2014_07_08_at_4_24_57_PM

2.3 使用App Group读写数据

iOS 8提供两种方式来读写数据,一种是NSUserDefaults,另一种是NSFileManager

通过NSUserDefaults读写数据

- (NSString *)readDataByNSUserDefaults
{
    NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.liuli.test"];
    NSString *value = [shared valueForKey:@"Sample1"];
    return value;
}

- (void)saveTextByNSUserDefaults : (NSString *)value
{
    NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.liuli.test"];
    [shared setObject:value forKey:@"Sample1"];
    [shared synchronize];
}

通过NSFileManager读写数据

- (NSString *)readTextByNSFileManager
{
    NSError *err = nil;
    NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.liuli.test"];
    containerURL = [containerURL URLByAppendingPathComponent:@"LiuLiSharedData"];
    NSString *value = [NSString stringWithContentsOfURL:containerURL encoding:NSUTF8StringEncoding error:&err];

    return value;
}


- (BOOL)saveTextByNSFileManager
{
    NSError *err = nil;
    NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.liuli.test"];
    containerURL = [containerURL URLByAppendingPathComponent:@"LiuLiSharedData"];

    BOOL result = [@"SharedData" writeToURL:containerURL atomically:YES encoding:NSUTF8StringEncoding error:&err];
    if (!result) {
        NSLog(@"%@",err);
    } else {
        NSLog(@"Save value success.");
    }

    return result;
}

为了保证数据读写的一致性,我们可以使用Core Data或者SQLite来存储数据。

写到这里,大家可能会问,共享的数据到底存在哪里,看看下面两张截图大家就明白了:

这是NSUserDefaults方式读写数据的plist文件所在目录
Screen_Shot_2014_07_08_at_4_45_36_PM

这是NSFileManager方式读写数据的文件所在目录,如果是SQLite,那么数据库文件将会放在这个目录
Screen_Shot_2014_07_08_at_4_45_27_PM

3. 参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值