我有一个小工具,我正在处理它将一个plist文件复制到Dropbox,以便我可以将该plist文件同步到两台计算机上。在10.9中,对首选项的更改将被缓存并仅写入磁盘when requested by an application or by cfprefsd。
我是否可以使用CFPreferencesAppSynchronize告诉系统将任意应用程序的新状态写入磁盘?例如,如果我想同步我的finder首选项,我可以让我的小应用程序调用CFPreferencesAppSynchronize相对于finder(com.apple.finder)吗?下面的代码似乎不起作用,但没有抛出错误:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here..
NSString *stringApplicationID = @"com.apple.finder";
CFStringRef applicationIDfinder = (__bridge CFStringRef)stringApplicationID;
Boolean CFPreferencesSynchronize (
CFStringRef applicationIDfinder,
CFStringRef kCFPreferencesAnyUser,
CFStringRef kCFPreferencesAnyHost
);
return 0;
}
}
答案 0 :(得分:1)
变化是10.8,实际上,不是10.9(虽然它在10.9中进一步变化)。没有可靠的方法来操作或与磁盘上的plist交互,它们纯粹是首选项系统的实现细节。
如果你想同步它们,我的建议是阅读首选项并使用NSPropertyListSerialization将它们自己写入dropbox-synced位置。然后在连接的另一端,自己阅读它们并在CFPreferences中设置它们。