plist檔案並非直接的**,不能通過shell指令碼直接對其操作,需要使用macos的plistbuddy,本文主要描述plistbuddy在plist檔案中具體物件的增刪改查四種操作:
而macos並未在環境變數中預設配置plistbuddy,所以需要通過絕對路徑來引用:
/usr/libexec/plistbuddy
前文已經說過乙個重點:【plist檔案並非直接的**,不能通過shell指令碼直接對其操作】,所以我們對plist中讀取出來的物件,是無法按照shell中的容器型別的語法進行操作的,例如我們對乙個dict進行操作,不能通過dict[key]的形式取出value,而是需要通過plistbuddy的語法來操作。
所以此處我先對plist中兩種容器dict和array的操作,進行描述,然後在後面的各種操作中才便於說明:
輸出或列印語法如下:
/usr/libexec/plistbuddy -c 'print :'$key'' info.plist
所以查詢語句如下:
value=/usr/libexec/plistbuddy -c 'print :'$key'' info.plist
但這種形式只能查詢到到基本資料型別,對於dict和array中的元素的查詢,需要注意:上面查詢到結果value如果是dict和array,是無法對容器內具體元素處理的,因為plistbuddy沒有語句對dict和array進行進一步處理,當然也無法通過shell語法對輸出的value通過plistbuddy的語法來操作。
所以對於容器中元素需要特殊處理:
對於dict中的元素,只需要在key中將dict中想要元素的key1也拼接在key後面即可,如下所示:
key="key:key1"
value=/usr/libexec/plistbuddy -c 'print :'$key'' info.plist
對於array中的元素,只需要在key中將array中想要元素的索引也拼接在key後面即可,如下所示:
key="key:0" #取array中第乙個元素,索引為0
value=/usr/libexec/plistbuddy -c 'print :'$key'' info.plist
刪除語法如下:
/usr/libexec/plistbuddy -c 'delete :$key' info.plist
對於dict和array中的元素的刪除,參照「查」中對key的拼接來刪除容器內具體元素。
修改元素語法如下:
/usr/libexec/plistbuddy -c 'set :$key string "value" ' info.plist
對於dict和array中的元素的修改,參照「查」中對key的拼接來修改容器內具體元素。
增加普通元素語法如下:
/usr/libexec/plistbuddy -c 'add :$key string "value"' info.plist
對於array中元素,需要首先考慮已經存在此陣列,
key="key:2"
/usr/libexec/plistbuddy -c 'add :$key string "value"' info.plist
但注意:如果直接使用上面的操作,會將元素插入索引為2這個位置,如果此位置已經有元素,將會替換掉。如果不想替換,就需要首先確定陣列元素的索引,如果我們需要將元素新增到陣列最後,就需要判斷當前陣列中已經存在元素的個數。plistbuddy沒有支援獲取陣列元素個數的語法,我們自己探索一下:我們可以看到array的形式如下:
array
所以判斷個數,可以通過plistbuddy+shell完成,首先通過plistbuddy的查詢獲取到陣列,輸出字串到乙個變數,然後判斷字串中 中間元素的個數,因為元素是通過換行來間隔的,所以通過判斷換行來確定個數。
# 新增陣列的key,arraykey
/usr/libexec/plistbuddy -c 'add :$arraykey array' info.plist
# 依次新增兩個value值
/usr/libexec/plistbuddy -c 'add :$arraykey: string value1' info.plist
/usr/libexec/plistbuddy -c 'add :$arraykey: string value2' info.plist
# 如果還不存在字典,則先新增字典容器:新增dict的key值 dictkey
/usr/libexec/plistbuddy -c 'add :$dictkey dict' info.plist
/usr/libexec/plistbuddy -c 'add :$dictkey:key string value' info.plist
【】注意【】:
plistbuddy對xcode的工程檔案進行處理之後,雖然工程檔案中未修改的內容沒有變化,但將導致工程檔案的內容排列位置形式變化很大,對應於我們的版本管理軟體,svn或git,通常顯示整個檔案都變化了。但是對工程的使用不產生影響。
CAGradientLayer基本使用方法
gradient 本身就是梯度的意思,所以在這裡就是作為漸變色來理解 1,cagradientlayer用於處理漸變色的層結構 2,cagradientlayer的漸變色可以做隱式動畫 3,大部分情況下,cagradientlayer時和cashapelayer配合使用的。4,cagradientl...
UGUI Scroll View的基本使用方法
1.效果圖 2.目標功能 1 在左側有限空間內放置一系列的toggle,滑動可以選擇不同toggle。2 滑動文字頁面 滑動條,可以看到所有文字 3.實現工具 scroll view 滾動檢視,可在gameobject ui scroll view處建立 4.scroll view解析 1 在scr...
windows下boost庫的基本使用方法
因為boost都是使用模板的技術,所以所有 都是寫在乙個.hpp標頭檔案中。這樣boost中的大部分內容是不需要編譯生成相應的鏈結庫,只需要設定下面的包含目錄 或者設定一下環境變數 在原始檔中包含相應的標頭檔案就可以使用了。少部分庫需要生成鏈結庫來使用。下面介紹完整安裝boost庫的方法 2 解壓檔...