介紹
PlistBuddy
是Apple提供的一個工具唐责,用于使用bash命令在plist文件上執(zhí)行操作益兄。開發(fā)者可以在plist中添加晨炕,編輯和刪除任何值蒸播。路徑為/usr/libexec/PlistBuddy
。
在本文中场航,將看到如何PlistBuddy
使用缠导,并提供了一個Xcode項目的例子。
本文譯自:https://marcosantadev.com/manage-plist-files-plistbuddy/
目錄
命令
PlistBuddy
提供了幾個命令在plist文件上執(zhí)行操作:
幫助
它列出了可用的命令列表旗闽,支持的值類型以及常見用法的一些示例酬核。
退出
開發(fā)者可以使用它從Interactive Shell中退出。這些更改不會保存在plist文件中适室。
保存
它保存plist文件中的當(dāng)前更改嫡意。
還原
它放棄當(dāng)前未保存的更改并重新加載上次保存的plist文件版本。
清除[type]
它刪除文件的內(nèi)容捣辆,并用參數(shù)中指定的類型創(chuàng)建一個新的根蔬螟。
打印[條目]
它打印的值entry
。如果開發(fā)者不指定條目汽畴,它會打印整個文件旧巾。
設(shè)置[條目] [值]
它更新entry
設(shè)置參數(shù)中指定的值。
添加[條目] [類型] [值]
它添加了具有指定類型和值的新條目忍些。
復(fù)制[entrySrc] [entryDst]
它復(fù)制的條目entrySrc
在entryDst
鲁猩。不能覆蓋現(xiàn)有的entryDst
值。
刪除條目]
它從plist文件中刪除條目罢坝。
合并[文件] [條目]
它將plist文件的內(nèi)容添加到條目中廓握。如果開發(fā)者省略參數(shù)entry
,內(nèi)容將被添加到文件的根目錄嘁酿。
導(dǎo)入[條目] [文件]
它設(shè)置或創(chuàng)建分配內(nèi)容的條目file
隙券。例如,開發(fā)者可以將一個txt文件的內(nèi)容復(fù)制到一個類型的條目中string
闹司。
關(guān)于類型的說明
由上我們看到一些命令有一個參數(shù)type
娱仔。PlistBuddy
支持以下類型:
- 字符串
- 數(shù)組
- 字典
- 布爾
- 雙精度浮點(diǎn)型
- 整形
- 日期
- 數(shù)據(jù)
例子
-
向字典中添加
mydict
一個test
值為整數(shù)的元素1
:Add :mydict:test integer 1
-
在
0
數(shù)組的索引處添加myarray
一個值為字符串的值Hello
:Add :myarray:0 string Hello
-
刪除整個數(shù)組:
Delete :myarray
-
導(dǎo)入文件的內(nèi)容并將其設(shè)置為條目
myfile
:Import :myfile test.txt
選項
當(dāng)運(yùn)行該命令時/usr/libexec/PlistBuddy
,可以使用以下選項:
-c [command]
可以使用它來運(yùn)行內(nèi)聯(lián)命令游桩,如:
/usr/libexec/PlistBuddy -c "Add :test integer 20" ~/Desktop/test.plist
該命令執(zhí)行后將自動保存該文件牲迫。
-X
可以使用它以xml plist的形式打印plist內(nèi)容:
/usr/libexec/PlistBuddy -x -c "Print" ~/Desktop/test.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>
<key>test</key>
<integer>20</integer>
</dict>
</plist>
-H
它打印完整的幫助信息。
交互式Shell
開發(fā)者可以開始學(xué)習(xí)PlistBuddy
使用它的交互式shell來測試命令借卧。
可以像這樣打開交互式shell:
/usr/libexec/PlistBuddy ~/Desktop/test.plist
使用上面的命令恩溅,我們要求在桌面PlistBuddy
上打開文件test.plist
。如果文件不存在谓娃,則PlistBuddy
創(chuàng)建它打印以下輸出消息:
File Doesn't Exist, Will Create: /Users/MyUser/Desktop/test.plist
在這個例子中,~/Desktop/
只是為了解釋而使用路徑蜒滩。開發(fā)者可以使用任何有寫權(quán)限的路徑滨达。
一旦打開交互式shell奶稠,應(yīng)該有這樣的輸出:
Command:
此時,開發(fā)者可以編寫一個命令PlistBuddy
并按回車來執(zhí)行它捡遍。
可以用命令從交互式shell中退出exit
锌订。
與Xcode一起使用
如果有一個包含兩個target的Xcode項目:
每個目標(biāo)都有其信息plist文件(AppFree.plist
和AppFull.plist
)。這兩個文件具有許多常用信息画株,例如支持的方向辆飘,啟動屏幕名稱等。這些plist文件的維護(hù)可能會很痛苦谓传。如果必須添加一個新的公共值蜈项,應(yīng)該將其添加到兩個文件中。
有了PlistBuddy
续挟,就可以解決這個問題紧卒。開發(fā)者可以在一個新的plist文件中移動所有常見的值Base.plist
:
然后,在Build Phases
诗祸,可以添加一個新的Run Script Phase
并將其移動到下面Target Dependencies
:
這樣跑芳,腳本將在編譯應(yīng)用程序之前執(zhí)行。
在新的腳本階段直颅,可以將Base.plist
與目標(biāo)plist 合并:
INFO_PLIST="${SRCROOT}/Plist/AppFull.plist"
BASE_PLIST="${SRCROOT}/Plist/Base.plist"
/usr/libexec/PlistBuddy -c "Merge $BASE_PLIST" "$INFO_PLIST"
上面的例子是針對的目標(biāo)plist文件是AppFull
博个。對于AppFree
,我們可以使用相同的腳本并重命名plist文件INFO_PLIST
功偿。
結(jié)論
有幾個目標(biāo)的項目的維護(hù)有時比較痛苦的盆佣。擁有了PlistBuddy
,開發(fā)者可以減少工作量脖含。
PlistBuddy
是一個非常強(qiáng)大的工具罪塔,使用了這個工具也許會給開發(fā)者帶來不一樣的驚喜。