在 10.9 上开发 Cocoa 应用程序时,我注意到如果我去~/Library/Preferences
并删除我的应用程序的 plist 文件(以重置它),在下一次构建和运行时,应用程序的行为就像 plist 文件从未被完全删除。
我花了很长时间才弄清楚为什么会发生这种情况,并且我没有在 SO 上看到有关它的问题/答案,所以我正在写这个问题并自己回答以帮助他人。
在 10.9 上开发 Cocoa 应用程序时,我注意到如果我去~/Library/Preferences
并删除我的应用程序的 plist 文件(以重置它),在下一次构建和运行时,应用程序的行为就像 plist 文件从未被完全删除。
我花了很长时间才弄清楚为什么会发生这种情况,并且我没有在 SO 上看到有关它的问题/答案,所以我正在写这个问题并自己回答以帮助他人。
在 10.9 上,系统正在对首选项进行一些更强大的“缓存”。删除 plist 文件后,我启动了 Activity Monitor 并强制终止了“cfprefsd”进程。注意:有多个同名的进程正在运行,你只想杀死在你自己的用户下运行的一个;不要杀死以root身份运行的那个。
这样做似乎会刷新首选项缓存,并且在下一次运行我的应用程序时,我会从头开始启动。
编辑:如下所述,defaults delete [your bundle identifier]
在命令行使用似乎也可以消除缓存问题。我在这方面取得了喜忧参半的成功。
我发现杀死用户进程 cfprefsd 会重新刷新缓存,所以你的更改将被保留
killall -u $USER cfprefsd
在终端:
defaults delete com.somecompany.someapp
顺便说一句,我刚刚发布了一个 GUI 应用程序,它可能比使用默认命令更方便:
http://www.tempel.org/PrefsEditor
它的工作原理与 Xcode 的 plist 编辑器几乎相同,但直接影响用户的应用偏好。
要删除所有首选项,您可以在我的首选项编辑器中打开您的首选项,全选,然后使用 Backspace 或 Delete 键删除它们,它们会立即全部消失。
但是,对于这个特定任务,使用defaults delete
可能仍然更快,特别是如果您将命令放入以“.command”结尾的文本文件中,并使其可执行(使用chmod +x
)。然后您可以从 Finder 中双击它来执行它。