Lista de propiedades

En los framework Mac OS X, iOS, NeXTSTEP y GNUstep, los archivos de lista de propiedades son archivos que almacenan objetos serializados. Estos archivos usan la extensión .plist, por lo que son conocidos como archivos plist (extensión cuyo nombre deriva de su abreviatura en inglés: Property List).

Lista de propiedades
Desarrollador
Apple Computer y GNUstep, anteriormente NeXT
Información general
Extensión de archivo .plist
Tipo de MIME application/xml
Formato abierto Sí 

Los archivos de lista de propiedades se utilizan frecuentemente para almacenar configuraciones del usuario. También se utilizan para almacenar información sobre bundles y aplicaciones, lo que en el antiguo Mac OS se conseguía mediante el flujo de recursos de un archivo (resource fork).

Estos ficheros se operan con la clase NSPropertyListSerialization. Una lista de propiedades no puede contener más que objetos de tipo Core Foundation o Foundation Kit porque la biblioteca no permite serializar otros tipos de objetos. [1]


Formato

editar

Debido a que la información representada en las listas de propiedades es en cierto sentido abstracta, el formato de archivo subyacente se puede implementar de múltiples formas. A partir del formato que NeXTSTEP usaba para representar estas listas, los subsecuentes GNUstep and Mac OS X introdujeron diferentes formatos.

NeXTSTEP

editar

En NeXTSTEP, los archivos plist se diseñaron para ser legibles por humanos y editables manualmente, serializados a ASCII en una sintaxis similar a un lenguaje de programación.[2]

Las cadenas se representaban:

"Esto es una cadena plist"

Los datos binarios se presentaban como:

< [códigos hexadecimales en ASCII] >

Los arrays se representaban así:

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

Y los diccionarios:

{
    "clave" = "valor";
    ...
}

Una limitación de las listas de propiedades originales de NeXT es que no podían representar objetos NSValue (número, booleano, etc.).

GNUstep

editar

GNUstep adopta el formato de NeXTSTEP con unos pocos añadidos: soporta objetos NSValue (que se representan como ASCII plano) y también objetos NSDate (que se representan como <*DYYYY-MM-DD HH:MM:SS timezone>).[1]

GNUstep puede también leer y escribir archivos de propiedades en el formato usado por Mac OS X.

Mac OS X

editar

A pesar de que Mac OS X puede leer el formato de NeXTSTEP, Apple lo aparta en favor de sus dos nuevos formatos propios.

En Mac OS X 10.0, el formato de NeXTSTEP fue declarado obsoleto y se introdujo un nuevo formato XML, con una DTD pública definida por Apple. El formato XML soporta caracteres no-ASCII y objetos NSValue (que, al contrario que el formato ASCII de GNUstep, no es soportado por el formato ASCII de Apple).

Puesto que los archivos XML, sin embargo, no son el método más eficiente en espacio de almacenamiento, Mac OS X 10.2 introdujo un nuevo formato donde los archivos de lista de propiedades eran almacenados como archivos binarios. A partir de Mac OS X 10.4, este es el formato por defecto para los archivos de preferencias. En Mac OS X 10.7, se introdujo soporte para lectura y escritura de archivos en formato JSON. Sin embargo, JSON y plist no son completamente compatibles. Por ejemplo, los archivos de propiedades soportan un tipo de fecha nativo, mientras que los JSON no. En el otro sentido, JSON permite valores null para las claves, mientras que las listas de propiedades no lo soportan de forma explícita.

La utilidad plutil (introducida en Mac OS X 10.2) se puede utilizar para comprobar la sintaxis de los archivos plist o convertirlos de un formato a otro.[3]​ Además, el comando defaults (introducido en NeXTSTEP) se puede emplear para manipular archivos plist utilizados para almacenaje de preferencias (conocidos antes de OS X como defaults, de ahí el nombre) desde la línea de comandos vía su dominio de preferencias, y también puede utilizarse para editar archivos plist arbitrarios.[4]

Las listas de propiedades XML y JSON son manualmente editables con cualquier editor de texto. Adicionalmente, Apple proporciona soporte en Xcode para editar listas de propiedades en un visor/editor jerárquico que puede manejar plists en formato binario o XML, pero no en JSON. Desde Mac OS X 10.4, Apple proporciona una interfaz de AppleScript para leer archivos de lista de propiedades. A partir de Mac OS X 10.5, se introdujo una interfaz de AppleScript para además editar, crear y escribir archivos plist.[5]

Para el formato XML, las etiquetas, las clases de Foundation y los tipos de CoreFoundation, y los formatos de almacenamiento de los datos son los siguientes:

Clases de Foundation Tipos de CoreFoundation Etiquetas XML Formato de almacenamiento
NSString CFString <string> Cadena de texto UTF-8
NSNumber CFNumber <real>, <integer> Cadena en decimal
NSNumber CFBoolean <true/> or <false/> Sin contenido (sólo etiqueta)
NSDate CFDate <date> Cadena con formato ISO 8601
NSData CFData <data> Datos codificados en Base64
NSArray CFArray <array> Puede contener cualquier número de elementos hijos
Un array vacío se puede representar como <array/>
NSDictionary CFDictionary <dict> Alternando etiquetas <key> y etiquetas de elementos plist

Referencias

editar
  1. a b «NSPropertyListSerialization class documentation» (en inglés). Archivado desde el original el 19 de mayo de 2011. Consultado el 8 de julio de 2013. 
  2. «Property List Programming Guide: Old-Style ASCII Property Lists» (en inglés). Consultado el 8 de julio de 2013.  En referencia a OpenStep, no exactamente a NeXTSTEP.
  3. «plutil(1) Mac OS X Manual Page» (en inglés). Consultado el 8 de julio de 2013. 
  4. «defaults(1) Mac OS X Manual Page» (en inglés). Consultado el 8 de julio de 2013. 
  5. «AppleScript: Property List» (en inglés). Archivado desde el original el 24 de abril de 2009. 

Enlaces externos

editar