Eine Property List (dt. Liste von Eigenschaften), umgangssprachlich auch plist(-Datei, „P-List“ ausgesprochen) oder Property-Liste, dient dazu, Daten strukturiert abzulegen. Technisch geschieht dies durch die Serialisierung von assoziativen Datenfeldern (englisch auch dictionaries). In der Regel tragen solche Dateien die Endung .plist im Dateinamen.

Property List
Dateiendung: .plist
MIME-Type: application/x-plist
Entwickelt von: NeXT und Apple
Art: Dateiformat zur Serialisierung assoziativer Arrays („Dictionaries“)


Das Property-List-Format wurde seinerzeit für NeXTStep entwickelt und in macOS, iOS und Co. übernommen; auch in GNUstep, dem freien OpenStep- bzw. Cocoa-Nachbau, kommen sie zum Einsatz.

Funktionen

Bearbeiten

Sie eignen sich besonders dafür, serialisierte Objekte bzw. Eigenschaften (properties) einer Klasse aufzunehmen.

Das Format unterscheidet die Datentypen Data, String, Date, Integer und Float sowie Arrays und Dictionaries.[1]

Die beiden heute gültigen plist-Formate sind auf XML-Basis beziehungsweise binär. Sie werden vom System gleichermaßen unterstützt, sind zueinander kompatibel und können ineinander konvertiert werden.

Die Dateien werden häufig genutzt, um Einstellungen des Benutzers zu speichern. Weiterhin besitzt jedes Application Bundle mindestens eine Datei namens Info.plist, in der Informationen über das Bundle enthalten sind.

Geschichte

Bearbeiten

In NeXTStep wurde ein Dateiformat zur Serialisierung assoziativer Arrays (im Grunde verschachtelte Werte, die einen Namen für die Zuweisung oder eine ID haben) eingeführt. Entwickler konnten so einfach z. B. Einstellungen oder Informationen abspeichern und auslesen. Da macOS ein Nachfahre von NeXTStep ist, übernahm es auch das plist-Datenformat. Apple erklärte damals das bisherige plist-Format von NeXTStep als ungültig und führte ein neues auf der Basis von XML ein, das den Funktionsumfang seines Vorgängers übernahm und gleichzeitig neue Datentypen hinzufügte. GNUstep, eine freie Implementierung von OpenStep bzw. Cocoa, übernahm das alte Format aus Gründen der Kompatibilität und erweiterte es um zwei Datentypen.

Darstellung

Bearbeiten

Da die Daten, die in diesen Dateien gespeichert werden können, sehr abstrakt sind, lassen sie sich auf vielfältige Art und Weise speichern. Im Lauf der Zeit hat sich das Format der Dateien verändert; so nutzte NeXTStep ein anderes Format, als macOS und GNUstep dies tun.

NeXTStep

Bearbeiten

Die plist-Dateien unter NeXTStep waren darauf ausgelegt, von Menschen lesbar und von Hand veränderbar zu sein; deswegen wurden sie als ASCII serialisiert.

Die Datentypen wurden so dargestellt:

Datentyp Darstellung
Strings
"Ein Beispiel-String"
Binärdaten
< [Hexadezimal-Code in ASCII] >
Arrays
("1", "2", "3")
Dictionaries / assoziative Arrays
{
    "key" = "value";
    ...
}

Ein Nachteil dieses Formates war, dass keine NSValue (Zahl, Boolean usw.) gespeichert werden konnten.

GNUstep übernahm das plist-Format von NeXTStep, nahm aber einige Änderungen vor. Zum einen wurden NSValues unterstützt (dargestellt als ASCII), zum anderen wurde der neue Datentyp NSDate hinzugefügt (Darstellung: <*DYYYY-MM-DD HH:MM:SS timezone>). Damit war es nun möglich, auch das Datum in einer Property List zu speichern.

Weiterhin kann GNUstep das plist-Format von macOS lesen und schreiben.[2]

Zwar kann macOS das alte NeXTStep-Format noch immer lesen, aber bei seiner Einführung (damals Mac OS X 10.0) wurde das NeXTStep-Format als veraltet deklariert und ein neues, auf XML basierendes plist-Format eingeführt. Apple veröffentlichte dafür eine Dokumenttypdefinition.[3]

Da XML-Dateien zwar von Menschen lesbar, aber dadurch sehr speicherineffizient sind, wurde mit Mac OS X 10.2 ein neues binäres plist-Format eingeführt. Die beiden Formate sind kompatibel und können mit plutil[4] umgewandelt werden.

XML-plist-Dateien können grundsätzlich per Hand bearbeitet werden. Da dies aber ab einer gewissen Komplexität ein mühevolles Unterfangen ist, lieferte Apple mit dem Xcode-Paket bis Version 3.2 den Property List Editor mit aus. Ab Xcode 4.0 ist der Editor in die Xcode-IDE (Integrierte Entwicklungsumgebung) integriert. Des Weiteren ist es möglich, mittels AppleScript durch Aufrufen von defaults ebenfalls plist-Dateien zu lesen und zu schreiben.

Ab Mac OS X Lion bietet plutil auch die Möglichkeit, plist-Dateien in JSON umzuwandeln und umgekehrt.

Das Kommandozeilen-Tool defaults[5] war ursprünglich dafür gedacht, Einstellungen von Programmen über die Shell ändern zu können. Da diese Dateien jedoch in aller Regel plist-Dateien sind, lassen sich mit dem Tool auch beliebige plist-Dateien verändern.

Im Laufe der Zeit haben Entwickler für die verschiedensten Programmiersprachen plist-Editoren und Bibliotheken entwickelt, die plist-Dateien serialisieren und in Datentypen der jeweiligen Sprache konvertieren können.

In plist-Dateien im XML-Format sind für die folgenden Datentypen (und die zugehörigen Cocoa- und Core-Foundation-Typen) die folgenden Tags gültig:

Datentyp XML-Tag Cocoa-Typ[6] CoreFoundation-Typ[7]
UTF-8-kodierte Zeichenkette <string> NSString CFString
Dezimalzahlen (als String) <real> oder <integer> NSNumber CFNumber
Boolean (wahr/falsch) <true /> oder <false /> NSNumber CFBoolean
String (ISO-8601-formatiert) <date> NSDate CFDate
Base64-kodierte Daten <data> NSData CFData
Array
(kann beliebig viele Unterelemente aufnehmen)
<array> NSArray CFArray
Assoziatives Array/dictionary
(abwechselnd <key>-Tags und plist-Elemente)
<dict> NSDictionary CFDictionary
Bearbeiten

Bibliotheken die XML- und binäre plist-Dateien lesen und schreiben können:

Einzelnachweise

Bearbeiten
  1. Hauser, Dominik, Rodewig, Klaus M. 1971-, Galileo Press: Apps programmieren mit Swift. 2., aktualisierte Auflage. Bonn, ISBN 978-3-8362-6068-8.
  2. NSPropertyListSerialization class documentation
  3. plist-DTD. Abgerufen am 13. November 2011.
  4. The plist(5) manual page auf developer.apple.com. Abgerufen am 13. November 2011.
  5. The defaults(1) manual page auf developer.apple.com. Abgerufen am 13. November 2011.
  6. Property List Programming Guide for Cocoa. Abgerufen am 13. November 2011.
  7. Property List Programming Topics for Core Foundation. Abgerufen am 11. November 2011.