我可以在任意应用程序上使用CFPreferencesAppSynchronize吗?

时间:2014-06-17 22:53:29

标签: objective-c macos cfpreferences

我有一个小工具,我正在处理它将一个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;
}

}

1 个答案:

答案 0 :(得分:1)

变化是10.8,实际上,不是10.9(虽然它在10.9中进一步变化)。没有可靠的方法来操作或与磁盘上的plist交互,它们纯粹是首选项系统的实现细节。

如果你想同步它们,我的建议是阅读首选项并使用NSPropertyListSerialization将它们自己写入dropbox-synced位置。然后在连接的另一端,自己阅读它们并在CFPreferences中设置它们。