删除plist文件不会重置macOS 10.9+上的应用程序

Bry*_*yan 42 macos cocoa objective-c plist

在10.9上开发Cocoa应用程序时,我注意到如果我去~/Library/Preferences删除我的应用程序的plist文件(重置它),在下一次构建和运行时,该应用程序的行为就好像plist文件从未删除了.

我花了很长时间来追踪这种情况发生的原因,我没有在SO上看到关于它的问题/答案,所以我正在写这个问题并自己回答它来帮助别人.

Bry*_*yan 59

在10.9,系统正在做一些更强大的"缓存"偏好.删除plist文件后,我启动了Activity Monitor并强制终止了"cfprefsd"进程.注意:有多个进程运行此名称,您只想杀死在您自己的用户下运行的进程; 不要杀死以root身份运行的那个.

这样做似乎刷新了首选项缓存,并且在我的应用程序的下一次运行中,我得到了一个原始的从头开始的启动.

编辑:如下所述,defaults delete [your bundle identifier]在命令行使用也似乎消除了缓存问题.我在这方面取得了不一样的成功.

  • 您可以使用"defaults delete"以缓存友好的方式删除首选项. (6认同)
  • 麻烦的是,互联网上大约有4,549,312个网页向用户解释如何修复"行为不端"的应用程序.步骤#1总是:"转到〜/ Library/Preferences"并删除应用程序的首选项文件.显然,这不再适用于小牛队; 您现在必须告诉用户通过终端并使用"默认删除".就我而言,这是一个错误.cfprefsd应该在盲目使用其缓存副本之前检查磁盘上的plist是否更新或删除. (3认同)
  • Shon - 你和Apple在一起吗?我可以向你保证,我没有"捣乱"这个过程.我使用Finder删除我的应用程序的plist文件,然后浪费了一生的时间试图弄清楚为什么OS X没有表现.删除Finder中的plist应该清除缓存版本.这不是对苹果公司的监督.当用户删除该文件时,它的意图是绝对清楚:为应用程序X核实prefs. (2认同)

Pen*_*eck 14

我发现杀死用户进程cfprefsd将重新刷新缓存,因此您的更改将被保留

killall -u $USER cfprefsd


Tom*_*sen 12

在终端:

defaults delete com.somecompany.someapp


Tho*_*ann 10

顺便说一句,我刚刚发布了一个GUI应用程序,可能比使用defaults命令更方便:

http://www.tempel.org/PrefsEditor

它与Xcode的plist编辑器几乎相同,但直接影响用户的应用程序首选项.

要删除所有的首选项,您可以在我的首选编辑器中打开您的首选项,选择全部,然后使用退格键或删除键删除它们,它们立即全部消失.

但是,对于此特定任务,使用defaults delete可能仍然更快,特别是如果您将命令放入以".command"结尾的文本文件中,并使其可执行(with chmod +x).然后,您可以从Finder中双击它以执行它.