我有两个应用程序,(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;
问题:
它足够安全吗?
答案 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在这些并发情况下正常运行。