Property List
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
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
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
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
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
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]
macOS
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 |
Weblinks
Editoren
Die folgenden Bibliotheken können alle XML- und Binär-plist-Dateien lesen und schreiben:
- PlistCpp Cross-platform-Bibliothek in C++, MIT-Lizenz.
- PlistCS C#-Bibliothek, MIT-Lizenz.
- cfpropertylist for Ruby Ruby-Bibliothek, Ruby-Lizenz.
- CFPropertyList for PHP PHP-Bibliothek, MIT-Lizenz.
- Property List Library Java-Bibliothek, LGPL-Lizenz.
- com.dd.plist Java-Bibliothek, MIT-Lizenz
Einzelnachweise
- Hauser, Dominik, Rodewig, Klaus M. 1971-, Galileo Press: Apps programmieren mit Swift. 2., aktualisierte Auflage. Bonn, ISBN 978-3-8362-6068-8.
- NSPropertyListSerialization class documentation
- plist-DTD. Abgerufen am 13. November 2011.
- The plist(5) manual page auf developer.apple.com. Abgerufen am 13. November 2011.
- The defaults(1) manual page auf developer.apple.com. Abgerufen am 13. November 2011.
- Property List Programming Guide for Cocoa. Abgerufen am 13. November 2011.
- Property List Programming Topics for Core Foundation. Abgerufen am 11. November 2011.