在项目中,我有一个应用程序和一个作为代理运行的助手。主应用程序用于设置用户首选项,可以暂时不使用。launchd在启动时启动的helper应用程序使用这些首选项来执行一些日常任务。它读取并更新首选项文件。助手位于“/Applications/Main.app/Contents/Library/LoginItems”中。当这些应用程序没有沙盒时,很容易读取和写入位于/Users/username/Library/Preferences/中的共享首选项文件。
我已尝试在帮助程序应用程序中添加授权密钥com.apple.security.temporary-exception.shared-preference.read-write,其中包含主应用程序首选项文件的路径:“/Library/Containers/com.mycompany.MainApp/Data/Library/Preferences/”。但这根本不起作用。对于辅助应用程序,首选项文件不存在。

最佳答案

为了支持主应用程序和辅助应用程序之间的共享容器和首选项,您需要使用两种方法:
安全应用程序组
为了让多个应用程序共享一个公共容器,您需要将com.apple.security.application-groups权限(在主应用程序和辅助应用程序中)设置为公共标识符,例如@"com.company.my-app-suite"。有关更多信息,请参见Adding an App to a Group
用户默认套件
根据Foundation Release Notes for OS X 10.9
对于属于安全应用程序组的应用程序,如果组标识符是组的标识符,则NSUserDefaults“suite”api(-initWithSuiteName:、-addsuitename:和-removesuitename:)将在组中的应用程序共享并存储在组容器中的组上操作。
因此,您需要在应用程序委托(或类似委托)中执行以下操作:

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

并在两个应用程序中使用它而不是[NSUserDefaults standardUserDefaults]

关于objective-c - 如何在两个沙盒应用程序之间共享首选项文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20030058/

10-11 22:43
查看更多