美文网首页iOS开发实践
PlistBuddy基本使用方法

PlistBuddy基本使用方法

作者: 杭研融合通信iOS | 来源:发表于2018-11-19 11:21 被阅读205次

    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中元素,需要首先考虑已经存在此数组,

    • 对于已经存在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的查询获取到数组,输出字符串到一个变量,然后判断字符串中 { } 中间元素的个数,因为元素是通过换行来间隔的,所以通过判断换行来确定个数。

    • 对于还没有array的情况:需要首先添加array,然后再向其中添加元素。
    # 添加数组的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,通常显示整个文件都变化了。但是对工程的使用不产生影响。

    相关文章

      网友评论

        本文标题:PlistBuddy基本使用方法

        本文链接:https://www.haomeiwen.com/subject/zglofqtx.html