阅读从助手应用程序在NSUserDefaults的沙箱(Reading NSUserDefaults

2019-08-04 14:56发布

我发现读一些资源NSUserDefaults另一个应用程序。

Objective-C的高速缓存NSUserDefaults的防止其他应用从准确读取变化

NSUserDefaults的:是否有可能从其他应用程序获得userDefaults?

显然,这是不可能的。 然而,问题首先涉及到iOS,其次的两个应用程序是完全不同的。

我有一个LaunchAtLogin助手应用程序。 但它的一些其他任务了。 因此,助手应用程序应该始终运行,但只有在启动主应用程序BOOLNSUserDefaults设置。

有没有一种方法可以让我做到这一点?

Answer 1:

由于10.7.4您可以在沙箱中使用应用程序组。 该组中的所有应用程序都共享同一个沙箱。 请参见应用程序组如何设置这些。



Answer 2:

这是可以共享使用的安全应用程序组和一个主要的应用程序和助手应用程序之间的偏好-[NSUserDefaults initWithSuiteName:]

安全应用程序组

为了让多个应用程序共享一个共同的容器,你要设定的com.apple.security.application-groups的权利(在你的主助手应用程序),以一个共同的标识,如@"com.company.my-app-suite" 。 见添加应用到组以获取更多信息。

用户默认套房

由于每对OS X 10.9 Foundation版本说明 :

对于那些安全应用集团,NSUserDefaults的“套装”的API的一部分应用程序(-initWithSuiteName :, -addSuiteNamed:和-removeSuiteNamed :)将在该组中的应用程序共享和存储在组容器一套操作,如果套件标识符是该组的标识符。

所以,你会想要做这样的事情在你的应用程序委托(或类似):

- (NSUserDefaults *)sharedUserDefaults {
    static NSUserDefaults *shared = nil;
    if (!shared) {
        shared = [[NSUserDefaults alloc] initWithSuiteName:@"com.company.my-app-suite"];
    }
    return shared;
}

使用的,与其和[NSUserDefaults standardUserDefaults]在整个这两个您的应用程序。



Answer 3:

应用程序可以共享在iCloud上的容器目录。

从苹果的配置您的iCloud权利文档:

icloud的容器字段标识您的应用程序可以在用户的​​iCloud存储访问容器的目录列表。 (此字段对应com.apple.developer.ubiquity容器的标识符的权利。)您添加到这个列表中的字符串必须与捆绑为您的团队创建的应用程序标识符。 Xcode使用当前应用程序的包识别符,以指定所述第一串; 你可以改变这个,如果你想多个应用程序共享一个主容器目录不同的捆绑标识符。 您也可以为你的团队的其他应用程序添加额外的包标识符。



文章来源: Reading NSUserDefaults from helper app in the sandbox