objective-c - guia - qgis manual
Convirtiendo plist a plist binario (8)
Apple recomienda encarecidamente utilizar el formato binario al leer grandes conjuntos de datos basados en XML en aplicaciones de iPhone. Entre su razonamiento está el hecho de que el análisis XML es muy agotador en el iPhone. Sin embargo, esto requiere que los archivos que residen en el servidor web remoto se conviertan primero.
Para contenido que cambia frecuentemente, no es aceptable hacerlo manualmente. Si es posible, me gustaría evitar tener una aplicación basada en la web para llamar a la línea de comandos para realizar la conversión (es decir, plutil).
¿Hay algoritmos disponibles públicamente para realizar esta conversión?
Sí. Todo el código plist es parte de CoreFoundation, que es de código abierto. CoreFoundation se puede construir y ejecutar directamente en Linux y Windows, por lo que puede escribir una herramienta CF utilizando las API normales que usaría en Mac OS X, pero compilarla y ejecutarla en otras plataformas.
La API particular que desea ver es CFPropertyListWriteToStream () . El código para CoreFoundation está disponible en Apple ( tarball ), entre otros lugares.
Finalmente, dependiendo de la frecuencia con la que actualice el archivo, la cantidad de procesador que tenga disponible en el servidor y la cantidad de repetición de sus datos, puede que le quede una mejora significativa. Por defecto, ciertos elementos en las listas binarias son únicas (como cadenas). Otros elementos no son (como matrices y dictionarts). El formato binario plist permite que sean únicos, el problema es que es realmente costoso caminar y arreglos y diccionarios únicos. Si tiene muchas matrices o dictados idénticos en su contenido, es posible que observe una reducción de tamaño significativa al eliminarlos. Puede habilitarlo pirateando hasta _flattenPlist () en CFBinaryPlist.c .
Si lo hace, asegúrese de probarlo a fondo, y no lo haga en ningún archivo que no pueda actualizar a través de la red, por si acaso una versión futura realiza alguna optimización que lo rompa. Además, asegúrese de estar listo para apagarlo en cualquier momento.
No está claro si quieres hacer la conversión en el iPhone o en el servidor. Si está en el servidor y puede usar los marcos Cocoa, NSPropertyListSerialization
proporciona servicios para convertir entre los tipos plist admitidos (cadena, XML y binario) en OS X (desde 10.2). También hay métodos análogos en la biblioteca de Core Foundation si prefiere usar eso en su lugar.
Para convertir un plist XML a uno binario:
NSString *xmlPlistPath; // already set
NSString *outPath; // already set
NSData *plistData;
NSString *error;
NSPropertyListFormat format;
id plist;
plistData = [NSData dataWithContentsOfFile:xmlPlistPath];
plist = [NSPropertyListSerialization propertyListFromData:plistData
mutabilityOption:NSPropertyListImmutable
format:&format
errorDescription:&error];
if(plist == nil) { // unable to parse plist
//deal with failure -- error gives description of the error
} else {
binaryPlistData = [NSPropertyListSerialization dataFromPropertyList:plist
format:NSPropertyListBinaryFormat_v1_0
errorDescription:&error];
if(binaryPlistData == nil) {//unable to create serialized plist
// deal with failure -- error gives description of the error
}
if(![binaryPlistData writeToFile:outPath atomically:YES]) {
// unable to write file
}
}
Consulte la página de la Guía de planificación de propiedades en developer.apple.com para obtener más información.
Hay una implementación de PHP y Ruby para eso:
La implementación de Ruby vinculada es Ruby 1.9 solamente. Cogí un serializador binario rápido que funciona en Ruby 1.8.
La gema binary_plist para agregar el plist como un formato de respuesta válido para los controladores de Rails parece prometedor.
Hay una implementación Perl también llamada Data :: Plist
Herramienta de línea de comandos plutil - utilidad de lista de propiedades
Apple tiene dos herramientas de línea de comandos muy buenas para manipular archivos de listas de propiedades.
-
/usr/libexec/Plistbuddy
- para editar listas -
/usr/bin/plutil
- comprobación de sintaxis y conversión de tipos
De la página de plutil man:
plutil se puede usar para verificar la sintaxis de los archivos de la lista de propiedades o convertir un archivo plist de un formato a otro. Especificando - como un archivo de entrada se lee desde stdin.
Conversión de un plist existente a formato XML, Binario o JSON
plutil -convert xml1 stops2.plist
plutil -convert binary1 stops2.plist
plutil -convert json stops2.plist