2015-11-04 65 views
0

我有两个应用程序,(AppA和AppB)。我想在APPA数据保存和使用访问它在APPB应用程序组:NSUserDefault是否保护存储应用程序组数据?

代码在应用程序答:

- (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; 

问题:

它足够安全吗?

+0

安全吗? – trojanfoe

+0

从想要窃取数据的人身上获得安全保护? – user1872384

回答

0

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

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

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

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

应用A可以看到sandboxA但不sandboxB 应用B可以看到sandboxB但不sandboxA 两个应用程序A和B可以读取和写入SandboxC

注意,这两个应用程序在不同的进程中运行,所以它可能是可能的对于应用程序A将数据写入沙箱C,同时应用程序B正在从相同的存储数据项中读取数据,因此必须小心以避免可能的冲突。

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