Libzip corrompiendo archivos PNG cuando se comprimen en el dispositivo iPhone, pero no en simulador

StackOverflow https://stackoverflow.com/questions/1866885

  •  18-09-2019
  •  | 
  •  

Pregunta

He heredado un proyecto que en algún momento crea un archivo zip, agrega un archivo XML al zip y luego agrega una serie de archivos PNG al mismo archivo. Todo funciona bien en el simulador, pero cada vez que ejecuto el mismo código en el dispositivo en sí mismo, los archivos PNG resultantes están alterados e innecesarios cuando se abren en mi Mac.

Todavía parecen ser archivos PNG, pero los 'corruptos' de exportación son ligeramente más grandes que los archivos verdaderos, y los volcados hexadecimales muestran que los contenidos difieren drásticamente. Sin embargo, los encabezados se conservan ...

Original:

00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|
00000010  00 00 00 6d 00 00 00 75  08 06 00 00 00 44 7d 6f  |...m...u.....D}o|
00000020  a0 00 00 00 19 74 45 58  74 53 6f 66 74 77 61 72  |?....tEXtSoftwar|
00000030  65 00 41 64 6f 62 65 20  49 6d 61 67 65 52 65 61  |e.Adobe ImageRea|
00000040  64 79 71 c9 65 3c 00 00  38 32 49 44 41 54 78 da  |dyq?e<..82IDATx?|

Corrupto:

00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 04 43 67 42 49  |.PNG........CgBI|
00000010  30 00 20 02 10 f3 44 7c  00 00 00 0d 49 48 44 52  |0. ..?D|....IHDR|
00000020  00 00 00 6d 00 00 00 75  08 06 00 00 00 44 7d 6f  |...m...u.....D}o|
00000030  a0 00 00 00 19 74 45 58  74 53 6f 66 74 77 61 72  |?....tEXtSoftwar|
00000040  65 00 41 64 6f 62 65 20  49 6d 61 67 65 52 65 61  |e.Adobe ImageRea|
00000050  64 79 71 c9 65 3c 00 00  38 65 49 44 41 54 ed bd  |dyq?e<..8eIDAT??|

(Aprecio que una pequeña porción del encabezado del archivo no sea muy útil, pero la intención es mostrar que la corrupción ocurre dentro del PNG y no en la zip en sí).

Entonces, ¿supongo que lo que pregunto es si alguien ha experimentado algo como esto antes? Acabo de intentar usar el siguiente envoltorio http://www.flyblog.info/catprogramming/202.html Y experimentó el mismo problema, ¿adivinando que su Libzip en sí mismo causa el problema?

¿Alguien tiene un método simple, probado y probado para agregar archivos a un archivo zip en el iPod en el que puedo intentar intercambiar?

Si ayuda, aquí está el código que crea el zip:

ZipArchive* zip = [[ZipArchive alloc] init];

BOOL ret = [zip CreateZipFile2: zipPath];
NSMutableSet *imageNames = [NSMutableSet set];
[curAlbum collectImageNames:imageNames];

for (NSString *imageName in imageNames) {
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageName ofType:@""];
    NSLog(imagePath);
    ret = [zip addFileToZip:imagePath newname:@"test.png"];
}



[zip release];

Cualquier consejo apreciado :-)

¿Fue útil?

Solución

Además de la respuesta de Noah, Xcode también comprime los archivos PNG:

Xcode Build Settings

Puede que valga la pena establecer COMPRESS_PNG_FILES = NO En la ventana de información de destino.

Otros consejos

Cuando XCode construye una aplicación para el dispositivo, altera cualquier recurso PNG, convirtiéndolos en BGRA (en oposición a la RGBA habitual) y premultizando el canal alfa. No hay una manera de evitar esto utilizando la configuración del proyecto que conozca; Puede intentar dar los recursos que incluye con la aplicación una extensión que no sea ".png" para ver si Xcode los copia sin alteración.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top