PlistBuddy 对plist文件的操作

plist(property list)是一种文件组织形式,通常用于储存用户设置,或者用于存储捆绑的信息,在iOS开发中是一种很常用的数据存储格式。除了可以手动操作之外,mac还提供了使用指令操作plist文件的工具—PlistBuddy,在使用脚本修改plist文件时非常有用.

PlistBuddy是Mac OS操作系统自带的操作工具,不过Mac OS并没有在环境变量中默认配置该工具,所以不能在全局使用,只能通过路径引用.

/usr/libexec/PlistBuddy

当然如果你对该工具的使用特别频繁,你可以将其拷贝到

/usr/local/bin

目录下,就可以在全局使用.使用PlistBuddy -h查看一下支持的基本操作:

Command Format:
    Help - Prints this information
    Exit - Exits the program, changes are not saved to the file
    Save - Saves the current changes to the file
    Revert - Reloads the last saved version of the file
    Clear [<Type>] - Clears out all existing entries, and creates root of Type
    Print [<Entry>] - Prints value of Entry.  Otherwise, prints file
    Set <Entry> <Value> - Sets the value at Entry to Value
    Add <Entry> <Type> [<Value>] - Adds Entry to the plist, with value Value
    Copy <EntrySrc> <EntryDst> - Copies the EntrySrc property to EntryDst
    Delete <Entry> - Deletes Entry from the plist
    Merge <file.plist> [<Entry>] - Adds the contents of file.plist to Entry
    Import <Entry> <file> - Creates or sets Entry the contents of file
 
Entry Format:
    Entries consist of property key names delimited by colons.  Array items
    are specified by a zero-based integer index.  Examples:
        :CFBundleShortVersionString
        :CFBundleDocumentTypes:2:CFBundleTypeExtensions
 
Types:
    string
    array
    dict
    bool
    real
    integer
    date
    data
 
Examples:
    Set :CFBundleIdentifier com.apple.plistbuddy
        Sets the CFBundleIdentifier property to com.apple.plistbuddy
    Add :CFBundleGetInfoString string "App version 1.0.1"
        Adds the CFBundleGetInfoString property to the plist
    Add :CFBundleDocumentTypes: dict
        Adds a new item of type dict to the CFBundleDocumentTypes array
    Add :CFBundleDocumentTypes:0 dict
        Adds the new item to the beginning of the array
    Delete :CFBundleDocumentTypes:0 dict
        Deletes the FIRST item in the array
    Delete :CFBundleDocumentTypes
        Deletes the ENTIRE CFBundleDocumentTypes array

初始化
Plist中并没有提供专门的初始化命令,不过可以借助shell自带的命令来完成初始化创建.

#1.初始化一个test.plist文件
touch test.plist 
#2.指定文件格式和编码格式
echo "<?xml version="1.0" encoding="UTF-8"?><plist version="1.0"><dict></dict></plist>" > test.plist

添加
添加一个非集合的key

# -c 表示直接执行后边的指令,否则会进入人机交互模式
# Add 指令后有一个空格,然后跟上需要添加的key
# string 表示要添加的value的数据类型,然后跟上value的值
PlistBuddy -c "Add :CFBundleIdentifier string Ericydong.WeChatCodesign" test.plist
 

添加一个集合

#添加集合需要两步走
#1. 添加集合
#2. 添加元素
 
#数组
PlistBuddy -c "Add :UISupportedInterfaceOrientations array" test.plist
PlistBuddy -c "Add : UISupportedInterfaceOrientations:0 string UISupportedInterfaceOrientations" tst.plist
 
#字典
PlistBuddy -c "Add :UIApplicationSceneManifest dict" test.plist
PlistBuddy -c "Add :UIApplicationSceneManifest:UIApplicationSupportsMultipleScenes bool false" test.plist

删除

#要删除某个key对应的全部内容
PlistBuddy -c "Delete :CFBundleIdentifier" test.plist
 
#删除数组中的指定下标元素
PlistBuddy -c "Delete :UISupportedInterfaceOrientations:0" test.plist
 
 
#删除字典中的指定的key
PlistBuddy -c "Delete :UIApplicationSceneManifest:UIApplicationSupportsMultipleScenes" test.plist
 
 

修改

#要修改的value在最外层
PlistBuddy -c "Set :CFBundleIdentifier Ericydong.WeChatCodesignNew" test.plist
 
#要修改的value在字典中
PlistBuddy -c "Set :UIApplicationSceneManifest:UIApplicationSupportsMultipleScenes true" test.plist
 
#要修改的value在数组中
PlistBuddy -c "Set :UISupportedInterfaceOrientations:0 UIInterfaceOrientationLandscapeLeft" test.plist
 
 
 

查询

#查询整个plist
PlistBuddy -c "Print" test.plist
 
#查询最外层的key
PlistBuddy -c "Print :CFBundleIdentifier" test.plist
 
#查询数组中的元素
PlistBuddy -c "Print :UISupportedInterfaceOrientations:0" test.plist 
 
#查询字典中的元素
PlistBuddy -c "Print :UIApplicationSceneManifest:UIApplicationSupportsMultipleScenes" test.plist 

合并

#重新创建一个test2.plist,然后将test.plist合并到test2.plist中
PlistBuddy -c "Merge test.plist" test2.plist

清空

#清空test.plist中的所有value,保留根字典
PlistBuddy -c "Clear" test.plist
 
 
#清空以后是这个样子
Dict {
}

复制

#使用Copy命令
#注意:Copy命令只能新增属性,不会覆盖已有属性.例如以下指令如果CFTargetName已经存在,则会抛出异常并不会覆盖原来的值(Copy: ":CFBundleIdentifiernew" Entry Already Exists)
PlistBuddy -c "Copy :CFBundleIdentifier : CFTargetName" test.plist

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值