Mac OS X: 偏好Preferences基础(1)

目录:

0. 准备工作

  1. 简介

  2. 偏好文件(plist文件)

  3. 编辑plist文件举例

  4. 应用实例

  5. 深入理解偏好文件

  6. 常用工具

  7. 问题解决

 

准备工作:

  • 知识的准备:
    熟悉Mac OS X系统中目录层次的表达方式,也就是说你可以在Finder窗口中, 轻松找到/Library/Preferences目录.
  • 软件的准备:
    安装Property List Editor程序。如果还没有,你可以从以下几个方式找到。
  1. 随机的光盘中,第一张光盘里面的/Optional Installs/Xcode Tools/就有, 运行XcodeTools.mpkg就可以了, 但是不能保证是最新的程序.
  2. 到download.csdn.net的PropertyListEditor下载, 地址http://download.csdn.net/source/1382942. 这个程序是随10.5.6系统盘的XcodeTools的.
  3. Apple的官方网站下载,参见http://developer.apple.com/mac/, 这里下载的肯定是最新的程序.

 

简介:

   在Mac的OS X系统里,你点击左上角苹果菜单,里面就有一个叫做System Preferences的选项.在其它的程序中,比如Safari, iPhoto等,点击该程序名称菜单,也会看到一个类似的菜单选项:Preferences...。那么什么是Preferences(偏好)呢?

   其实,普遍意义上来说就是一种配置(配置文件,ConfigurationFile)。对于不同的程序和不同的操作系统,它们所支持的配置是以不同方式存储在系统上的,比如说,PC机的BIOS也是一种计算机硬件的配置,它存储在计算机的CMOS里; 对于大家熟悉的Windows系统, 系统本身使用Registry的方式存储系统/用户/应用程序的配置信息,比如说登陆运行程序/桌面背景等等,都是存储在那里,Windows系统的Registry是存储在多个二进制加密的文本文件中的,用于存储不同的系统/用户配置信息;而在Mac OS X系统中,采用的是一种文本或二进制XML格式的文件格式,一般来说文件的后缀名是.plist,所以也叫plist文件,比如浏览器Safari的默认主页就是存储在com.apple.safari.plist文件中的HomePage项中.当然plist文件在Mac OS X中已经不仅仅作为一种配置文件了.

   普通的应用程序也有自己的配置文件,用于存储程序默认的参数和数据以及用户自定义/变更的参数,应用程序可以使用操作系统提供的机制,比如Windows的Registry和Mac OSX的plist,当然应用程序开发商可以根据自己的需要或爱好使用别的任何文件格式存储,比如古老的.ini文本文件等。

   在Mac OSX系统中对plist文件的支持,最开始是使用Text文本格式的,这样用户可以使用任意的文本编辑软件就可以打开编辑。后来为了效率考虑,从10.2开始引入了二进制Binary的格式,这样可以提高系统读取速度,而plutil命令行工具就是从这时开始引入的--后面有相关介绍. 而从10.4Tiger系统之后,系统默认的plist文件都是二进制格式的了.

 

偏好文件(plist文件):

    我们知道了大多数的偏好配置都储存在plist文件中,那么我们就看看plist文件的样子.
    下面的内容就是一个最简单的最基本的plist文本文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>

    它在Property List Editor中是下图的样子:

 

编辑plist文件举例:

    可以通过上面提到的Property List Editor程序编辑一个plist文件。首先我们记住:plist文件内容是由一系列的属性名和对应的值通过一定的顺序组合组成的。
    下面只是举一个简单的例子,通过例子大家可以熟悉plist文件的树状结构和支持的数据类型等特性。

   运行Property List Editor程序后,看到的是下图的内容,在按钮下面是三列的空表,三列分别是:Peroperty List,Class, Value. 其中Peroperty List就是属性名称列表;Class是定义该属性的类型,plist文件支持好多种类型,这一点后面说;Value就是该属性的值。

    首先, 我们需要创建一个根,点击New Root按钮, 系统生成一个属性名叫Root, 类型是Dictionary(字典), Value是一个不可编辑的默认是"0 key/value pairs"的一行.

   我们用鼠标点击这个Root. 上面的New Root按钮变成了New Sibling,但是是灰色禁止的,也就是说plist文件只能由一个Root,它没有兄弟。为了能在Root下面添加它的子属性,在Root左边有一个向右的小三角, 用鼠标点击它,它变成了向下的三角, 也就是告诉程序,这时上面的New Sibling按钮就变成的NewChild了,我要编辑/查看它的子属性。所以对于可以添加子属性的属性,一定要首先打开它才能对它编辑,这是以后要用到的。

    先面先来建立一个简单的属性,点击New Child,在走边列给它一个名称,叫Background, 中间列选String, 也就是一个字符串类型,最右面写入该属性的值,比如~/Pictures/Background.jpg.

   现在Background是选中的,上面的按钮是“New Sibling”, 点击它, 并给它Childs的属性名,点击类型列,会出现上图的所支持的所有类型的列表,选择Array的类型,也就是数组类型,大家知道数组是一个相同属性的值组成的一列,每个值按照0,1, 2...的顺序排列,所以,点击它左面的三角打开它后,每添加一个它的子属性,系统会自动为每个子属性设定一个数字的属性名,我们分别建立两个子属性,每个都是字符串string类型, 值分别是Son, Daughter.
    选定Root, 再建立一个子属性,叫做Country, 属性是Dictionary, 它的子属性有三个, 分别是CA, CN, UN,  数值类型都是数字Number, 值分别是0, 1, 2。
    再在Root下面建立一个子属性,叫做MyData, 属性是Data, 内容可以自己填写.

    再建立一个Root的子属性,叫做Today, 属性是Date, 程序自动填上当天的日期.
    最后建立一个Root的子属性,叫做AmITony, 属性是布尔Boolean,也就是是否, 默认是Yes。

    完成上面的工作后,我们得到的是如下图的一个plist文件.

    有兴趣的可以保存这个plist文件,并用文本编辑器打开,看看里面的结构.

文章导航