Property list

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by Atomic Bird (talk | contribs) at 22:18, 3 April 2013 (Clarify JSON/property list compatibility details.). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Property List
Filename extension
.plist
Internet media typeapplication/x-plist
Developed byApple Computer and GNUstep,
formerly NeXT
Type of formatSerialization of dictionary objects.

In the Mac 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:

< [hexadecimal codes in ASCII] >

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 (number, boolean, etc.) object.

GNUstep

GNUstep adopts the NeXTSTEP format, with a few additions. First, it now supports NSValue objects (which are represented as plain ASCII), and second, it supports NSDate objects (which are serialized as <*DYYYY-MM-DD HH:MM:SS timezone>)

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 (which, unlike GNUstep's ASCII property list format, Apple's ASCII property list format does not support).

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 (introduced in Mac OS X 10.2) 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 (introduced in NeXTSTEP) can be used to manipulate plist files used for storage of preferences (also known before OS X as defaults, hence the name) on the command line via their preferences domain, and this utility can be used to edit arbitrary plist files.

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.[1]

For the XML format, the tags, related Foundation classes and CoreFoundation types, and data storage formats are as follows:

Foundation class CoreFoundation type XML Tag Storage format
NSString CFString <string> UTF-8 encoded string
NSNumber CFNumber <real>, <integer> Decimal string
NSNumber CFBoolean <true/> or <false/> No data (tag only)
NSDate CFDate <date> ISO 8601 formatted string
NSData CFData <data> Base64 encoded data
NSArray CFArray <array> Can contain any number of child elements
An empty array may be represented as <array/>
NSDictionary CFDictionary <dict> Alternating <key> tags and plist element tags

See also

References

External links