跳到主要内容
AZ Tools

Plist 查看器(二进制与 XML)

属性列表是 macOS 和 iOS 保存几乎一切内容的方式:应用偏好设置、Info.plist、配置描述文件、备份清单。其中一半是编辑器里就能读的 XML,另一半是苹果的二进制格式——打开后只是一堵以 bplist 开头的字节墙。 这个工具两种都能读。二进制不是靠翻找字符串,而是真正解码:文件末尾 32 字节的尾部记录了偏移量和引用整数的宽度以及对象表的位置,所有值都要经由这张表才能取到——也就是说,从文件头一路向前扫是读不出任何东西的。一、二、四、八字节整数,浮点数,基于苹果自有纪元的日期,原始数据,UID,数组,集合和字典,全都保留类型返回。 结果以树形展示,同时提供 JSON 和 XML plist,于是原本无法编辑的二进制文件变得可以编辑。如果发现它其实是 NSKeyedArchiver 归档——一张由 UID 引用连接的扁平对象表,iOS 保存任何稍复杂的东西时都会这么写——工具会明确指出,因为这正解释了为什么内容看起来与应用所存的结构毫不相似。不会上传任何内容。

使用方法

  1. 拖入 .plist 或 .mobileconfig 文件,或粘贴 XML plist 文本。
  2. 格式会自动识别,二进制文件还会显示其中的对象数量。
  3. 阅读树形结构:每一行显示键、类型和取值。
  4. 要加工就复制 JSON,要编辑就复制 XML plist。
  5. 数据和日期会标明类型,而不是压成字符串。

常见问题

二进制 plist 和 XML plist 有什么区别?
只有编码不同。它们保存相同的值,macOS 也把两者视为等价。二进制更小、加载更快,所以即便文档里以 XML 举例,设备上的文件大多仍是二进制。
为什么我的文件全是没意义的数字和以 $ 开头的键?
多半是 NSKeyedArchiver 归档。它把对象平铺存放在 $objects 中,用 UID 引用而不是嵌套来连接,所以你看到的是归档的形状而非应用的。查看器发现 $archiver 键时会提示这一点。
为什么在别的工具里日期差了 31 年?
苹果从 2001-01-01 而不是 1970-01-01 开始计秒,相差 978307200 秒。把 plist 日期当作 Unix 时间戳来读就会落到 1970 年代;这里已应用该偏移,日期是正确的。
二进制数据会怎样处理?
保留为数据类型并给出长度。JSON 没有字节串,因此在 JSON 输出中放在 __data_base64 键下以 base64 表示;在 XML 输出中则还原为 <data> 元素。
能编辑或写出二进制 plist 吗?
它会把二进制 plist 转成 XML,你可以编辑后用 plutil 或任意 plist 库转换回去。写出二进制格式不是本工具的职责。
我的文件会被上传吗?
不会。文件在浏览器中解析,不发送到任何服务器——这对偏好设置文件尤其重要,它们常含有账号名和路径。

相关工具