iOS开发实践

PlistBuddy基本使用方法

2018-11-19  本文已影响205人  杭研融合通信iOS

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 {
    WEBRTC_POSIX
    WEBRTC_MAC
}

所以判断个数,可以通过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
# 添加key:value对,如果已经存在字典,不需要经过上一步
/usr/libexec/PlistBuddy -c 'Add :$dictkey:key string value' info.plist

【】注意【】:
PlistBuddy对xcode的工程文件进行处理之后,虽然工程文件中未修改的内容没有变化,但将导致工程文件的内容排列位置形式变化很大,对应于我们的版本管理软件,svn或git,通常显示整个文件都变化了。但是对工程的使用不产生影响。

上一篇下一篇

猜你喜欢

热点阅读