如何停止OS X编译/转换.plist文件

我目前正在设置一些OS X客户端和服务器,并经常需要打开/编辑.plist文件。 令人恼火的是OS X将这些plist文件编译成二进制格式,大概是为了加速读取它们,因为性能方面的原因,这是非常好的,除了我需要将它们转换回xml,每次我需要打开它们,这对我来说比对一个微不足道的性能提升。

所以我必须要么:

  1. 使用Plist编辑器 – 我不喜欢它,它需要安装Xcode – 在客户机上并不总是可行的。
  2. 使用plutil转换它们: plutil -convert xml1 file.plist – 这是一个PITA。

有没有办法阻止OS X转换良好的XML plists到恶魔的二进制格式?

我认为属性列表文件的格式完全由创build/更新文件的程序决定。 Cocoa属性列表序列化方法和Core Foundation的所有方法都采用格式选项,让程序指定“XML”或“binary”; 没有像“使用一些外部指定的默认值”的值。 程序可以设想自己根据一些集中的设置做出自己的默认设置,但是我不知道有这样的设置(当然,它可能是没有文档的;关键在于,它仍然仅限于只有采用这种“手册”的应用程序违约“惯例)。


PlistBuddy是一个灵活的,大多数可脚本化的属性列表编辑器(例如, 默认只能访问/修改属性列表的“顶层”值,但PlistBuddy可以在任意深度访问/修改值)。 它在10.5和更高版本的/usr/libexec/PlistBuddy上可用。 它并没有捆绑在10.4系统上,但通常可以将其作为/Library/Receipts/*/Contents/Resources/PlistBuddy (例如/Library/Receipts/iTunesX.pkg/Contents/Resources/PlistBuddy )中的一个。

例如

  • 检查一个属性列表文件

     PlistBuddy -c print /path/to/some/plist/file 
  • 清除(或创build)plist文件并将CFBundleIdentifier设置为com.apple.plistbuddy

     PlistBuddy -c 'clear dict' \ -c 'add :CFBundleIdentifier string' \ -c 'set :CFBundleIdentifier com.apple.plistbuddy' \ /path/to/some/plist/file 

你也可以使用osascript系统事件 “Property List Suite”运行命令。 从shell命令行运行肯定不是那么方便,但是对于更多的自动化检查和修改(例如,通过脚本来完成)可以。 来自该套件的命令在10.5和更高版本上提供了写访问权限(10.4是只读的)。