In the OS X, iOS, NeXTSTEP, and GNUstep programming frameworks, property list
files are files that store serialized objects. Property list files use the
filename extension .plist, and thus are often referred to as p-list files.
Property list files are often used to store a user's settings. They are also
used to store information about bundles and applications, a task served by the
resource fork in the old Mac OS. Representations
Since the data represented by property lists is somewhat abstract, the
underlying file format can be implemented many ways. Namely, NeXTSTEP
used one format to represent a property list, and the subsequent GNUstep and Mac
OS X frameworks introduced differing formats.
= NeXTSTEP = Under NeXTSTEP, property lists were
designed to be human-readable and edited by hand, serialized to ASCII in a syntax
somewhat like a programming language. Strings were represented as:
"This is a plist string" Binary data was represented as:
Arrays were represented as: ( "1", "2", "3" )
And dictionaries were represented as: "key" = "value";
... One limitation of the original NeXT
property list format is that it could not represent an NSValue object.
= GNUstep = GNUstep adopts the NeXTSTEP format, with
a few additions. First, it now supports NSValue objects, and second, it supports
NSDate objects GNUstep can also read and write property
lists in the formats used by Mac OS X. = Mac OS X =
While Mac OS X can also read the NeXTSTEP format, Apple sets it aside in
favor of two new formats of its own. In Mac OS X 10.0, the NeXTSTEP format
was deprecated, and a new XML format was introduced, with a public DTD defined by
Apple. The XML format supports non-ASCII characters and storing NSValue objects.
Since XML files, however, are not the most space-efficient means of storage,
Mac OS X 10.2 introduced a new format where property list files are stored as
binary files. Starting with Mac OS X 10.4, this is the default format for
preference files. In Mac OS X 10.7, support for reading and writing files in
JSON format was introduced. JSON and property lists are not fully compatible
with each other, though. For example, property lists support a native date
type, while JSON does not. Conversely, JSON permits null values for keys, while
property lists do not support explicit nulls.
The plutil utility can be used to check the syntax of property lists, or convert
a property list file from one format to another. Also, the defaults utility can
be used to manipulate plist files used for storage of preferences on the
command line via their preferences domain, and this utility can be used to
edit arbitrary plist files. Another tool is the PlistBuddy command line utility
which resides at libexec/PlistBuddy and is useful for merging plist files and
altering entries related to software development.
XML and JSON property lists are hand-editable in any text editor.
Additionally, Apple provides support in Xcode for editing property lists in a
hierarchical viewer/editor that can handle plists formatted in binary or
XML, but not JSON. As of Mac OS X 10.4, Apple provides an AppleScript interface
for reading property list files through the System Events application. As of Mac
OS X 10.5, Apple provides an AppleScript interface for editing, creating and
writing property list files as well. For the XML format, the tags, related
Foundation classes and CoreFoundation types, and data storage formats are as
follows: The Binary file format is documented in
a comment block in the C code source file for Apple's open sourced
implementation of binary plists in its the Foundation library . Apple describes
the implementation as opaque in its plist man page documentation; which
means that reliance on the format is discouraged. In the binary file format
the magic number is the text bplist. The binary file can store information
that cannot be captured in the XML or JSON file formats. The array, set and
dictionary binary types are made up of pointers - the objref and keyref entries
- that index into an object table in the file. This means that binary plists can
capture the fact that - for example - a separate array and dictionary serialized
into a file both have the same data element stored in them. This cannot be
captured in an XML file. Converting such a binary file will result in a copy of
the data element being placed into the XML file. Additionally the binary file
has a UID type that is used to identify data items when serialized. In practice
this UID type is simply expanded into a 64 bit integer. The complete list of
data that can be stored taken from the C code source file is as follows:
= Windows = Although best known on Apple or Darwin
systems, including iOS and Mac OSX, plist files are also present on Windows
computers when Apple Software, such as iTunes or Safari are installed. On
Windows the files are typically binary files, although some applications may
generate PLIST files in the other formats.
On Windows the plist files are stored in the users home directory under the
following path: %HOMEPATH%\AppData\Roaming\Apple
Computer These plist files on Windows typically
store preferences and other information, rather than using the Windows registry.
Options for editing PLIST files on Windows are not as extensive as on Mac
OS X. If the file is in the XML or JSON format with care a text editor such as
NotePad++ can be used. Its also possible to use plutil.exe which ships with
Safari for Windows to convert binary plist files into XML, then edit with a
text or XML editor, such as PlistEditorPro and then afterwards
convert back to binary, again using plutil.exe. Note that although Apple
stopped shipping Safari for Windows in 2012 it is still available for download
on some sites. This provides a zero cost solution for Plist editing on Windows.
The commercial tool Plistinator is a plist editor that handles both XML and
binary plist files on Windows. See also
Comparison of data serialization formats References
External links The plist(5) manual page at
developer.apple.com Excel add-in for creating plist file
from Excel table Java API for reading/writing various
plist formats - compatible with Android