0

我有两个应用程序(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;

问题:

是否足够安全?

4

1 回答 1

0

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

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

当您定义一个应用程序组时,您实际上创建了在您的应用程序之间共享的第三个沙箱,我们称之为沙箱C

只有这两个应用程序可以看到共享数据,因此从这个扩展的意义上说,这两个应用程序作为一对都有一个安全的数据专用区域。

应用 A 可以看到 sandboxA 但看不到 sandboxB 应用 B 可以看到 sandboxB 但看不到 sandboxA 应用 A 和 B 都可以读取和写入 SandboxC

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

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

于 2015-11-15T23:17:26.947 回答