4

我发现了一些有关阅读NSUserDefaults另一个应用程序的资源。

Objective-C NSUserDefaults 缓存阻止另一个应用程序准确读取更改

NSUserDefaults:是否可以从另一个应用程序获取 userDefaults?

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

我有一个LaunchAtLogin帮助应用程序。但它也执行其他一些任务。BOOL因此,帮助应用程序应始终运行,但仅在设置了 时才启动主应用程序NSUserDefaults

有没有办法我可以做到这一点?

4

3 回答 3

4

可以使用安全应用程序组在主应用程序和辅助应用程序之间共享首选项,并且-[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]在您的两个应用程序中使用。

于 2014-04-24T07:34:37.353 回答
4

从 10.7.4 开始,您可以在沙箱中使用应用程序组。组内的所有应用程序共享同一个沙箱。请参阅应用程序组以了解如何设置它们。

于 2012-12-23T20:39:20.867 回答
1

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

来自 Apple 关于配置 iCloud 权利的文档:

iCloud Containers 字段标识您的应用程序可以在用户的​​ iCloud 存储中访问的容器目录列表。(此字段对应于 com.apple.developer.ubiquity-container-identifiers 权利。)您添加到此列表的字符串必须对应于您的团队创建的应用程序的捆绑标识符。Xcode 使用当前应用的包标识符来指定第一个字符串;如果您希望多个应用程序共享一个主容器目录,您可以将其更改为不同的包标识符。您还可以为团队的其他应用程序添加额外的捆绑标识符。

于 2012-12-23T20:42:02.647 回答