Nei framework NeXTSTEP, GNUstep e Cocoa in macOS, i file plist (abbreviazione di Property List) sono file che memorizzano degli oggetti serializzati.

I file plist usano l'estensione .plist, e sono codificati e decodificati dalla classe NSPropertyListSerialization. Un file plist può contenere solo oggetti Core Foundation o Foundation Kit: la libreria non sa come serializzare altri tipi di oggetti.

Spesso sono usati per memorizzare le preferenze impostate dall'utente (un po' come i Registri Windows su Microsoft Windows). Sono usati anche per memorizzare informazioni sui bundle e sulle applicazioni, con un sistema simile alle resource fork del vecchi Mac OS.

Le Representations

Siccome i dati memorizzati nei file plist sono piuttosto astratti, i formati di file possono essere diversi. Cioè, NeXTSTEP usava un formato per rappresentare i file plist, e i successivi framework GNUstep e macOS hanno introdotto altri formati.

NeXTSTEP

Sotto NeXTSTEP, i file plist erano progettati per essere comprensibili da una persona ed essere modificabili a mano. Essi erano serializzati in ASCII, in un modo che ricorda un linguaggio di programmazione.

Le stringhe erano rappresentate così:

"Questa è la mia stringa."

I dati binari invece in quest'altro modo:

< [codici esadecimali in ASCII] >

Gli array erano rappresentati così:

( "1", "2", "3" )

E i dizionari (coppie chiave-valore) così:

{
"chiave" = "valore";
...
}

Una limitazione del formato plist di NeXT è l'impossibilità di rappresentare un oggetto NSValue (numero, booleano...).

GNUstep

GNUstep usa il formato NeXTSTEP con alcune aggiunte. Primo, supporta gli oggetti NSValue (rappresentati in ASCII), secondo, supporta gli oggetti NSDate (che sono serializzati così: <AAAA-MM-GG OO:MM:SS fuso_orario>)

GNUstep può anche leggere e scrivere i file plist nel formato usato da macOS.

Mac OS X

Mac OS può leggere anche il formato NeXTSTEP. Esso però introduce due propri formati.

In Mac OS X Cheetah, il formato NeXTSTEP venne deprecato, e fu introdotto un nuovo formato XML, con una DTD della Apple.

Mac OS X Jaguar ha introdotto un nuovo formato, dove i file plist sono memorizzati come binari. A partire da Mac OS X Tiger, questo è il formato di default.

L'utilità plutil (introdotta con Mac OS X Jaguar) può essere usata per controllare la sintassi dei file plist, o convertirli da un formato all'altro.

Per il formato XML, i tag e le relative classi Foundation sono le seguenti:

Tipo CF Tag XML
NSString <string>
NSNumber <real> o <integer>
NSDate <date>
NSBoolean <true /> o <false />
NSData <data>
NSArray <array>
NSDictionary <dict>

L'utility defaults può modificare i file plist identificandoli attraverso il loro dominio. Property List Editor (che fa parte di SDK) è un programma grafico che può editare file plist uno per volta.