在项目中,我有一个应用程序和一个作为代理运行的助手。主应用程序用于设置用户首选项,可以暂时不使用。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/