NSUserDefault是否对商店应用程序组数据安全?

时间:2015-11-04 08:58:19

标签: nsuserdefaults ios-app-group

我有两个应用程序,(AppA和AppB)。我想在AppA中保存数据并使用App Group在AppB中访问它:

应用A中的代码:

- (IBAction)btnSetValuePressed:(id)sender {

    NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.tcompany.testName"];

    [myDefaults setObject:@"foo" forKey:@"bar"];
    [myDefaults synchronize];
}

应用B中的代码:

NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.tcompany.testName"];
NSString *myString = [myDefaults objectForKey:@"bar"];
self.lblResult.text = myString;

问题:

  

它足够安全吗?

1 个答案:

答案 0 :(得分:0)

从某种意义上说,只有能够访问该应用组的应用才能看到该数据,这是安全的。

每个应用都有一个沙箱,只有该应用可以访问其内容。我们称这些应用为“app A”和“app B”,因此有两个沙箱,sandboxA和sandboxB

当您定义应用程序组时,您有效地创建了在您的应用程序之间共享的第三个沙箱,我们称之为sandboxC

只有这两个应用才能看到共享数据,因此在这种扩展意义上,两个应用程序都有一个安全的数据私有区域。

App A可以看到sandboxA而不是sandboxB 应用B可以看到sandboxB而不是sandboxA app A和B都可以读写SandboxC

请注意,这两个应用程序都在不同的进程中运行,因此App A可以在应用程序B从同一存储数据项读取的同时将数据写入沙箱C,因此必须小心谨慎避免可能的冲突。

如果您使用NSUserDefaults作为存储介质,那么您将是安全的,因为Apple确保NSUserDefaults在这些并发情况下正常运行。