如何使用PlistBuddy管理Plist文件

介紹

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ù)制的條目entrySrcentryDst鲁猩。不能覆蓋現(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項目:

image

每個目標(biāo)都有其信息plist文件(AppFree.plistAppFull.plist)。這兩個文件具有許多常用信息画株,例如支持的方向辆飘,啟動屏幕名稱等。這些plist文件的維護(hù)可能會很痛苦谓传。如果必須添加一個新的公共值蜈项,應(yīng)該將其添加到兩個文件中。

有了PlistBuddy续挟,就可以解決這個問題紧卒。開發(fā)者可以在一個新的plist文件中移動所有常見的值Base.plist

image

然后,在Build Phases诗祸,可以添加一個新的Run Script Phase并將其移動到下面Target Dependencies

image

這樣跑芳,腳本將在編譯應(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ā)者帶來不一樣的驚喜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末养葵,一起剝皮案震驚了整個濱河市征堪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌关拒,老刑警劉巖佃蚜,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異着绊,居然都是意外死亡谐算,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門归露,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洲脂,“玉大人,你說我怎么就攤上這事剧包】纸酰” “怎么了往果?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長一铅。 經(jīng)常有香客問我陕贮,道長,這世上最難降的妖魔是什么潘飘? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任肮之,我火速辦了婚禮,結(jié)果婚禮上卜录,老公的妹妹穿的比我還像新娘戈擒。我一直安慰自己,他們只是感情好暴凑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布峦甩。 她就那樣靜靜地躺著,像睡著了一般现喳。 火紅的嫁衣襯著肌膚如雪凯傲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天嗦篱,我揣著相機(jī)與錄音冰单,去河邊找鬼。 笑死灸促,一個胖子當(dāng)著我的面吹牛诫欠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浴栽,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荒叼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了典鸡?” 一聲冷哼從身側(cè)響起被廓,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萝玷,沒想到半個月后嫁乘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡球碉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年蜓斧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睁冬。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡挎春,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搂蜓,我是刑警寧澤狼荞,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站帮碰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拾积。R本人自食惡果不足惜殉挽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拓巧。 院中可真熱鬧斯碌,春花似錦、人聲如沸肛度。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽承耿。三九已至冠骄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間加袋,已是汗流浹背凛辣。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留职烧,地道東北人扁誓。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像蚀之,于是被迫代替她去往敵國和親蝗敢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容