Skip to content
AZ Tools

Plist Viewer (binary & XML)

Property lists are how macOS and iOS store almost everything: app preferences, Info.plist, configuration profiles, backup manifests. Half of them are XML you can read in an editor, and half are Apple's binary format, which opens as a wall of bytes starting with the letters bplist. This reads both. The binary form is decoded properly rather than scanned for strings: the 32-byte trailer at the end of the file says how wide the offset and reference integers are and where the object table lives, and every value is reached through that table, so nothing can be read by walking forwards from the header. Integers of one, two, four and eight bytes, floats, dates on Apple's own epoch, raw data, UIDs, arrays, sets and dictionaries all come back with their types intact. The result is shown as a tree and offered as JSON and as an XML plist, so a binary file you cannot edit becomes one you can. When the file turns out to be an NSKeyedArchiver archive — a flat table of objects joined by UID references, which is what iOS writes for anything non-trivial — it says so, because that explains why the contents look nothing like the structure the app appears to store. Nothing is uploaded.

How to use

  1. Drop a .plist or .mobileconfig file, or paste XML plist text.
  2. The format is detected — binary files say how many objects they hold.
  3. Read the tree: each row shows the key, the type and the value.
  4. Copy the JSON if you want to process it, or the XML plist if you want to edit it.
  5. Data and dates are labelled rather than flattened into strings.

Frequently asked questions

What is the difference between a binary and an XML plist?
Only the encoding. They hold the same values, and macOS treats them interchangeably. The binary form is smaller and faster to load, which is why most files on a device are binary even though the same data is often documented as XML.
Why does my file look like meaningless numbers and $-prefixed keys?
It is probably an NSKeyedArchiver archive. Those store a flat list of objects in $objects and join them with UID references rather than nesting, so the shape you see is the archive's, not the app's. The viewer flags this when it sees the $archiver key.
Why are dates off by 31 years elsewhere?
Apple counts seconds from 2001-01-01 rather than 1970-01-01, a difference of 978307200 seconds. Reading a plist date as a Unix timestamp lands it in 1970-something; the offset is applied here so the dates come out right.
What happens to binary data?
It is kept as data and reported with its length. In the JSON output it becomes base64 under a __data_base64 key, since JSON has no byte string, and in the XML output it goes back to a <data> element.
Can it edit or write a binary plist?
It converts a binary plist to XML, which you can edit and convert back with plutil or any plist library. Writing the binary form is not something this tool does.
Is my file uploaded?
No. It is parsed in your browser and nothing is sent to a server — which matters for preference files, since they often contain account names and paths.

Related tools