我正在开发一个应用程序,为所有用户全局存储一些首选项。它是通过将kCFPreferencesAnyUser
作为userName
的{{1}}参数传递来实现的。
在OS X版本10.7(Lion)之前,这很好用。但是,当此代码在Lion上运行时,即使从管理员帐户运行应用程序,调用也会失败。 CFPreferencesSetValue
州的文档:
请注意,如果您具有管理员权限,则只能保存“任何用户”的首选项。
...我从搜索周围看到Snow Leopard和Lion之间所需的权限发生了变化(从 admin 到 root )。似乎我可以通过Apple的 SMJobBless 示例代码继续使用类似的代码......
...安全地安装执行特权操作的帮助工具......
但我注意到CFPreferencesSetValue
本身的文档声明:
目前不支持此域名。
使用帮助工具是否正确创建所有用户首选项?或者我应该使用其他一些支持的方法吗?
答案 0 :(得分:1)
这实际上是一个非常好的问题,似乎没有一个特别好的答案。
SMJobBless的问题是您需要使用与父应用程序相同的签名对该工具进行代码签名。不幸的是,这是系统偏好设置,因此只有Apple现在可以为帮助工具生成必要的代码签名。
鉴于此,我认为有三种选择:
所有这一切的最糟糕的事情是CFPreference API似乎完全无声地失败 - 只是在设置全局首选项值时实际上没有发生任何事情。
修改强>
对不起。我想我有点跳过了。是的,如果您从自己的添加中执行此操作,则SMJobBless代码将执行此操作。但是,编写帮助应用程序和某种形式的IPC只是为了读取和写入共享首选项值是一件痛苦的事情 - 如果您的需求很简单,使用共享文件滚动您自己的首选项系统可能会更容易。