如果我的应用具有访问权限(例如,以root
的身份运行),它如何访问特定用户的首选项?
例如,假设用户从普通(管理员)帐户以root用户身份重新启动我的常规应用程序(捆绑),例如使用sudo,就像这样:
sudo /Applications/MyApp.app/Contents/MacOS/MyApp
甚至从带有
的应用中AuthorizationExecuteWithPrivileges()
如果我的应用程序现在调用NSUserDefaults.standardUserDefaults
,它将访问存储在根用户主目录中的首选项。
我希望我的这个应用程序可以代替访问已登录用户的偏好设置。
答案 0 :(得分:0)
我意识到必须有一种方法,因为我可以使用defaults
命令来做同样的事情:我可以指定plist文件的路径,如下所示:
sudo -s
defaults read /Users/username/Library/Preferences/some.plist.name
这将读取该用户的偏好,即使whoami
返回root
。
因此,解决方案是这样做:
NSString *domain = @"/Users/username/Library/Preferences/some.plist.name";
NSUserDefaults myDefaults = [[NSUserDefaults alloc] initWithSuiteName:domain];
然后在我的整个应用程序中使用myDefaults
。
更新
实际上,这无效有效。我一开始会坚强,但是看来这只会访问root用户的首选项。
因此,虽然必须有一种方法可以做到这一点(如果defaults命令可以做到这一点,那么我们也应该这样做),但这不是通过NSUserDefaults实现的。也许它可以与CFPreferences
API一起使用。将不得不继续调查。