在Mac下直接打开和修改Plist文件

晴和君 · 2018年12月5日 · 2.3K次阅读 · 预计需要8分钟

plist 是 Mac 种非常普遍的一种文件格式,类似 xml,通过键值对的方式来进行一些配置。而 PlistBuddy 则是 Mac 自带的专门解析 plist 的小工具,Buddy 为好朋友,伙伴的意思。从名字不难看出 PlistBuddy 对 plist 文件的友好支持。

最早接触到 plist 文件还是我刚上高中的时候,那时候 iOS 设备的越狱还很盛行,可以让你直接接触到 iOS App 的内容,也就给了你修改软件的机会。当时和表弟一起在完全不同代码的情况下瞎改,根据英文意思猜功能。但效果也很不错,把当时刚刚开始臃肿起来的 QQ 删掉了很多功能(其实只是屏蔽掉了,眼不见为净的那种)。然后发现很多单机游戏的数据也都储存在 plist 文件中,还没有加密。所以也获取了很多本来要花时间下去才能获得的游戏资源。什么,你说 IAP?当时没有几个游戏有 IAP。。。

当时使用的在 iOS 上的编辑器,早就想不起名字了,说不定是自带的。但是昨天,我因为想修改一下字典库的信息,再次接触到了 plist 文件。发现用预览可以直接看到里面的内容,但是用文本编辑器或者 sublime text 却无法打开。在晚上搜了一下,可能是二进制文件的关系。

那就看看有什么软件可以打开它。在网上搜了一圈,找到了几个软件,例如 Plist Editor,这个确实可以直接可视化编辑 plist 文件,但是要 25 元。本来想买了,后来一想,我就改这么一两个文件,以后也用不到了,却要我花 25 元来买它,还要空出 25MB 的硬盘来装他,实在不合算(才不是我有软件的洁癖呢。。。)。

所以想能不能有其他的方法。于是就在 Google 上找到了这个 PlistBuddy 。貌似可能听说这个 Plist Buddy 并不是系统自带的,但是 Apple 的很多软件都会带有 Plist Buddy。由于 PlistBuddy 并不在 Mac 默认的 Path 里,所以我们得通过绝对路径来引用这个工具。我们先来看一下帮助:

/usr/libexec/PlistBuddy --help

如果没问题的话,下面给几个实际应用:

新建:

新建一个 plist 文件:

/usr/libexec/PlistBuddy Info.plist
$ Command: save
$ Command: exit

你可以在你的用户文件夹下找到创建的 Info.plist
这个 plist 文件可以被 sublime text 打开,但是其他应用的 plist 不一定可以。所以我们假设这个 plist 无法用 sublime text 打开,继续用 PlistBuddy 操作。
新建的 plist 内容如下:

图 1——新建 plist 文件

添加:

添加普通字段:

/usr/libexec/PlistBuddy -c 'Add :Version string 1.0' Info.plist

此时内容如下:

图 2——添加普通字段

添加数组字段,分两步:

注意:key 之间用 : 隔开,且不能有空格:

# 先添加 key 值
/usr/libexec/PlistBuddy -c 'Add :Application array' Info.plist
# 添加 value 值
$ /usr/libexec/PlistBuddy -c 'Add :Application: string app1' Info.plist
$ /usr/libexec/PlistBuddy -c 'Add :Application: string app2' Info.plist
$ /usr/libexec/PlistBuddy -c 'Add :Application: string app3' Info.plist

此时内容如下:

图 3——添加数组字段

添加字典字段,分两步:

# 先添加 key 值
/usr/libexec/PlistBuddy -c 'Add :Person dict' Info.plist
# 添加 value 值,
$ /usr/libexec/PlistBuddy -c 'Add :Person:Age string secret' Info.plist
$ /usr/libexec/PlistBuddy -c 'Add :Person:Name string Xuan' Info.plist
$ /usr/libexec/PlistBuddy -c 'Add :Person:sex string boy' Info.plist
$ /usr/libexec/PlistBuddy -c 'Add :Person:weight string 65' Info.plist

此时内容如下:

图 4——添加字典字段

查看:

查看 plist 内容:

/usr/libexec/PlistBuddy -c "print" Info.plist

效果如下:

图 5——查看 plist 文件

查看字段内容:

/usr/libexec/PlistBuddy -c 'Print :Person' Info.plist

效果如下:

图 6——查看特定字段值

查看特定下标的值:

/usr/libexec/PlistBuddy -c 'Print :Application:2' Info.plist

效果如下:

图 7——用下标查看特定字段值

删除:

删除特定字段值:

/usr/libexec/PlistBuddy -c 'Delete :Version' Info.plist

结果如下:

图 8——删除了一个 plist 字段

修改:

修改特定字段值:

/usr/libexec/PlistBuddy -c 'Set :Application:1 "this is app1"' Info.plist

结果如下:

图 9——修改了一个 plist 字段

合并:

合并命令:

# 将 A.plist 合并到 B.plist 中
/usr/libexec/PlistBuddy -c 'Merge A.plist'  B.plist

若两个 plist 文件中与相同的键值,终端中会提示 B.plist 中有重复的键值,默认跳过该键值的合并。

合并前的两个文件:

图 10——plist 合并前

合并后:

图 11——plist 合并后

全文完。
哦,你说字典库嘛?这可真是个好东西,具体下次说。

5分
  • 新建:
  • 添加:
  • 添加普通字段:
  • 添加数组字段,分两步:
  • 添加字典字段,分两步:
  • 查看:
  • 查看plist内容:
  • 查看字段内容:
  • 查看特定下标的值:
  • 删除:
  • 修改:
  • 合并: