深入理解偏好文件:
位置:
系統(tǒng)和應(yīng)用程序的偏好設(shè)置文件的存放,在Mac OS X系統(tǒng)中可以歸為兩個(gè)范疇,一個(gè)是系統(tǒng)范疇,一個(gè)是用戶范疇.
系統(tǒng)范疇內(nèi)儲(chǔ)存的是系統(tǒng)的或者是系統(tǒng)全局的偏好設(shè)置,這一點(diǎn)要和用戶范疇對(duì)比來(lái)說(shuō),用戶范疇是針對(duì)不同用戶的,用戶自己設(shè)置的偏好。
具體來(lái)說(shuō),一般地,系統(tǒng)范疇的儲(chǔ)存在/Library/Preferences/目錄里,而用戶范疇的儲(chǔ)存在~/Library/Preferences/目錄里(注
1
).
注
1
: 在系統(tǒng)里面~符號(hào)代表用戶的home目錄,比如用戶student的home目錄在/Users/student, 這時(shí) ~就等于/Users/student, 而~/Library/Preferences/就是/Users/student/Library/Preferences/.
兩種類型的plist文件
- 硬件特定位置(ByHost Preference)
Mac系統(tǒng)支持一種特定硬件的偏好設(shè)置,這些偏好文件儲(chǔ)存在ByHost目錄中,用戶可以在自己的home目錄的~/Library /Preferences/ByHost/里面,對(duì)于不同的系統(tǒng)(軟件和硬件),Mac OS X系統(tǒng)或應(yīng)用程序可能會(huì)將偏好設(shè)置文件儲(chǔ)存在ByHost里面,這樣這個(gè)文件中涉及的所有設(shè)置都只是相關(guān)于這個(gè)計(jì)算機(jī)本身。
ByHost偏好設(shè)置文件都有一個(gè)特殊的文件名以示和本系統(tǒng)硬件相關(guān),在Mac OS X 10.5之前的版本,系統(tǒng)使用的偏好設(shè)置文件名是在普通文件名中加入網(wǎng)卡的MAC地址來(lái)區(qū)別的,比如:
com.apple.screensaver.001122334455.plist就是用戶設(shè)定屏幕保護(hù)的偏好配置。
而在Mac OS X 10.5之后,為了可以更好地標(biāo)示系統(tǒng)的唯一性,它使用系統(tǒng)的UUID來(lái)替換原來(lái)MAC地址的內(nèi)容,比如,上面同樣的屏幕保護(hù)的偏好配置,我的是: com.apple.screensaver.27074F01-7A93-5859-BAF3-0EB138E001D3.plist
為什么一定要使用ByHost配置呢? 有些程序的偏好設(shè)置的確可以歸結(jié)為與硬件相關(guān),有些是為了程序的特性。除了上面提到的屏幕保護(hù)程序外,還有比如ImageCapture使用那個(gè)程序的設(shè) 置就是ByHost的,無(wú)論打開(kāi)Image Capture.app還是iPhoto.app程序,在它們的Preferences里面都有一個(gè)選項(xiàng)是下載照片使用哪個(gè)程序,見(jiàn)下圖就是Image Capture.app的Preferences的截圖:
里面設(shè)置使用iPhoto,如果沒(méi)有設(shè)定值,就顯示no application,Mac OS X系統(tǒng)就是靠這個(gè)偏好配置文件來(lái)啟動(dòng)對(duì)應(yīng)程序的. 到ByHost中就可以看到叫做: com.apple.ImageCapture.27074F01-7A93-5859-BAF3-0EB138E001D3.plist, 它的內(nèi)容在Property List Editor.app中顯示為下圖:
再例如,控制當(dāng)前顯示所支持的分辨率個(gè)數(shù)的信息,也是存儲(chǔ)在ByHost里面,這一點(diǎn)比較容易理解。下圖是顯示10個(gè)分辨率的選項(xiàng):
它的plist文件顯示如下:
還有一種用處,如果一個(gè)程序的許可證是用戶只能安裝在一臺(tái)機(jī)器上使用,這樣ByHost的偏好配置就是一種可以方便使用的機(jī)制, 比如有版權(quán)保護(hù)的程序,例如iTunes,需要保存本機(jī)本用戶的唯一標(biāo)識(shí),并與版權(quán)信息共同制作一個(gè)簽名,這樣防止盜版。
如何找到這個(gè)UUID呢?在Terminal中執(zhí)行下面的命令:
ioreg -d2 -c IOPlatformExpertDevice
|
在一臺(tái)iMac上可以看到下面的內(nèi)容:
+-o iMac8,1 <class IOPlatformExpertDevice, registered, matched, active, busy 0, retain 23>
{ "IOBusyInterest" = "IOCommand is not serializable" "IOInterruptControllers" = ("io-apic-0") "IOPlatformSerialNumber" = "YMXXXXXXXXX" "clock-frequency" = <005a6b3f> "version" = <"1.0"> "product-name" = <"iMac8,1"> "IOInterruptSpecifiers" = (<0900000005000000>) "board-id" = <"Mac-F226BEC8"> "model" = <"iMac8,1"> "serial-number" = <5xxxx200000000000000000000xxxxxxxxxxx4dxx5axxxx00000000000000000000000000000> "manufacturer" = <"Apple Inc."> "IOPlatformArgs" = <00c0xxx00050exxxxxxeef0000000000> "name" = <"/"> "IOPlatformUUID" = "FXXXXXX5-XXXX-XXXX-XXXX-82XXXXXXXX34" "compatible" = <"iMac8,1"> "IOPolledInterface" = "SMCPolledInterface is not serializable" "system-type" = <01> } |
從上面的內(nèi)容可以找到一行叫"IOPlatformUUID"的,這個(gè)就是了,為了可以一次找到,運(yùn)行下面的命令
ioreg -rd1 -c IOPlatformExpertDevice | grep "IOPlatformUUID" |
這個(gè)UUID只有在Mac OS X 10.5以上版本的系統(tǒng)中猜支持,另外一個(gè)問(wèn)題是,并不是所有的硬件系統(tǒng)都支持,比如下面是一個(gè)較老的版本的iMac系統(tǒng)(2007),它的UUID前面部分是"
00000000-0000-1000-8000
" 后面根著的是網(wǎng)卡MAC地址,在這樣的系統(tǒng)中,就不使用這個(gè)UUID作為標(biāo)示了,而是沿用舊的方法,直接使用MAC地址.
"IOPlatformUUID" = "00000000-0000-1000-8000-00XXXXXXXX20" |
在Mac OS X 10.5以前的系統(tǒng)中,同樣支持這個(gè)命令ioreg,但是不支持-rd1或者-d2的選項(xiàng)。
- 全局偏好位置(Global Preference)
全局偏好文件是一個(gè)特殊的plist文件,存在于系統(tǒng)和用戶范疇內(nèi),但是在Finder出口中一般看不到,到Terminal中,可以找到 /Library/Preferences/.GlobalPreferences.plist或者~/Library/Preferences /.GlobalPreferences.plist兩個(gè)文件. 它們定義系統(tǒng)或者用戶全局的系統(tǒng)參數(shù),比如時(shí)區(qū)等.
常用工具
常用圖形工具:
Property List Editor:首選當(dāng)然是蘋果開(kāi)發(fā)工具中的這個(gè)應(yīng)用程序,免費(fèi)而且是主要工具.
PlistEdit
:可以打開(kāi)處理文本和二進(jìn)制文件,并以原來(lái)的格式保存,
PlistEdit Pro
:收費(fèi)軟件,特點(diǎn)是XML明碼和樹(shù)狀結(jié)構(gòu)同時(shí)顯示.
PrefEdit
:方便查找plist文件,2.0版本開(kāi)始收費(fèi), 1.2的還是免費(fèi)
命令行工具:
plutil:主要用來(lái)檢查plist文件的語(yǔ)法,并將plist文件在Text和Binary之間轉(zhuǎn)換.
defaults: 用于操作plist文件, 但是操作多層屬性時(shí)有局限;10.5之后都默認(rèn)將文本格式轉(zhuǎn)化為Binary格式, 這樣可以提高系統(tǒng)讀取速度.
PlistBuddy: 是一個(gè)比defaults更加靈活的工具,可以任意編輯多層的屬性,但是不是OS X自帶的.
Tony Liu
June 26, 2009 Calgary
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
