2009-12-09 24 views
6

Quiero distribuir una aplicación multiplataforma para la cual el archivo ejecutable es ligeramente diferente, dependiendo del usuario que lo descargó. Esto se hace teniendo una cadena de marcador de posición en algún lugar del ejecutable que se reemplaza con algo específico del usuario al momento de la descarga.Creación de archivos .dmg personalizados al descargar

El servidor web que tiene que hacer estos reemplazos de cadena es una máquina Linux. Para Windows, el ejecutable no está comprimido en el instalador .exe, por lo que el reemplazo de cadenas es fácil.

Para archivos .dmg Mac OS X sin comprimir, esto también es fácil. Sin embargo, los archivos .dmg comprimidos con gzip o bzip2 no son tan fáciles. Por ejemplo, en el último caso, la .dmg comprimida no es una gran imagen de disco comprimido bzip2, sino que consiste en unas pocas partes comprimidas bzip2 diferentes (con diferentes tamaños de bloque) y un sufijo plist. Además, descomprimir y recomprimir las diferentes partes con bzip2 no da como resultado los datos originales, así que supongo que Apple usa algunos parámetros diferentes para bzip2 que la herramienta de línea de comandos.

¿Hay alguna manera de generar un .dmg comprimido desde uno sin comprimir en Linux (que no tiene hdiutil)? ¿O tal vez otra sugerencia para crear aplicaciones personalizadas sin pregenerarlas? Debería funcionar sin ninguna entrada por parte del usuario.

+0

¿Estás preguntando cómo cambiar el nombre de un archivo que vive dentro de un archivo .dmg en Linux? – Seth

+0

No, reemplazando una cadena terminada en nulo en algún lugar dentro de uno de los archivos en .dmg. – Marten

+0

¿Por qué necesita estar en un archivo .dmg en absoluto? –

Respuesta

0

Si su servidor web y su cliente son compatibles con la codificación gzip, entonces puede tratar con archivos no comprimidos en el servidor, pero hacer que el servidor web/cliente web los comprima/descomprima sobre la marcha, respectivamente.

p. Ej. mod_gzip de apache

De lo contrario tal vez usted puede dividir su dmg en 3 partes:

  • las cosas antes de lo que se desea reemplazar
  • la cadena que desea reemplazar
  • la materia después de lo que se desea reemplazar

    Si la secuencia gzip se puede dividir en esos puntos, puede concatenar el frente y la parte posterior en la cadena con gzip que desea reemplazar. Eso te permitiría generarlo sobre la marcha.

+1

Decidí usar hdiutil para crear una imagen de solo lectura (UDRO), que minimizaba el tamaño pero no se comprimía. Para la mayoría de los usuarios, se transmitirá gzip a través de HTTP y creo que tendré que tomar la pena de espacio en el disco pequeño. – Marten

+1

Hmm, resulta que esto no funciona porque las imágenes de solo lectura tienen suma de comprobación. Y no puedo usar una imagen de lectura/escritura porque entonces OS X no mostrará los contenidos de .dmg automáticamente cuando está montado. – Marten

0

Libere un dmg normal, de solo lectura, comprimido. Luego, agrupe su aplicación en un instalador de paquetes con un script previo al vuelo que establezca las variables que necesita.

5

Me doy cuenta de que estoy un poco tarde aquí, pero queríamos hacer exactamente lo mismo y hacerlo funcionar con libdmg. https://github.com/planetbeing/libdmg-hfsplus

Básicamente, puede usar libdmg para descomprimir un archivo dmg en un archivo descomprimido que contenga un sistema de archivos hfs +, jugar con los archivos dentro del sistema de archivos hfs +, y volver a armarlo como un archivo dmg con el sumas de comprobación correctas.

Si utiliza alguna característica elegante de dmg, como mostrar un EULA antes de montar la imagen, esto no sobrevivirá al proceso. Sin embargo, las imágenes de fondo, etc.

Cuestiones relacionadas