Necesito crear un buen instalador para una aplicación de Mac. Quiero que sea una imagen de disco (DMG), con un tamaño, diseño e imagen de fondo predefinidos.
Necesito hacer esto mediante programación en un script, para integrarme en un sistema de compilación existente (más de un sistema de paquetes realmente, ya que solo crea instaladores. Las compilaciones se realizan por separado).
Ya tengo la creación de DMG usando "hdiutil", lo que aún no he descubierto es cómo hacer un diseño de icono y especificar un mapa de bits de fondo.
Respuestas:
Después de mucha investigación, se me ocurrió esta respuesta, y la pongo aquí como respuesta a mi propia pregunta, como referencia:
Asegúrese de que "Habilitar acceso para dispositivos de asistencia" esté marcado en Preferencias del sistema >> Acceso universal. Se requiere que AppleScript funcione. Es posible que deba reiniciar después de este cambio (de lo contrario no funciona en Mac OS X Server 10.4).
Crea un DMG R / W. Debe ser más grande de lo que será el resultado. En este ejemplo, la variable bash "tamaño" contiene el tamaño en Kb y el contenido de la carpeta en la variable bash "fuente" se copiará en el DMG:
Monte la imagen del disco y almacene el nombre del dispositivo (es posible que desee usar la suspensión durante unos segundos después de esta operación):
Almacene la imagen de fondo (en formato PNG) en una carpeta llamada ".background" en el DMG, y almacene su nombre en la variable "backgroundPictureName".
Use AppleScript para establecer los estilos visuales (el nombre de .app debe estar en la variable bash "applicationName", use variables para las otras propiedades según sea necesario):
Finalice el DMG configurando los permisos correctamente, comprimiéndolo y soltándolo:
En Snow Leopard, el applecript anterior no establecerá la posición del icono correctamente; parece ser un error de Snow Leopard. Una solución es simplemente llamar a cerrar / abrir después de configurar los iconos, es decir:
fuente
sleep
después de montar la imagen. ¿Cuánto tiempo? ¿No es posible esperar determinísticamente la finalización del proceso? Lo mismo paradelay 5
en tu AppleScript. Siempre desconfío de tiempos de espera tan arbitrarios, habiendo tenido una muy mala experiencia con ellos. 2. En tu paso 6 llamassync
dos veces, ¿por qué?Hay un pequeño script de Bash llamado create-dmg que crea DMG sofisticados con fondos personalizados, posicionamiento de iconos personalizado y nombre de volumen.
Lo construí hace muchos años para la compañía que dirigía en ese momento; sobrevive de la contribución de otras personas desde entonces y, según los informes, funciona bien.
También hay node-appdmg que parece un esfuerzo más moderno y activo basado en Node.js; échale un vistazo también.
fuente
/Applications
si la aplicación detecta que se está ejecutando~/Downloads
. Vea también este viejo artículo de John Gruber .No vayas ahí. Como desarrollador de Mac a largo plazo, puedo asegurarle que ninguna solución funciona realmente bien. Intenté muchas soluciones, pero no todas son demasiado buenas. Creo que el problema es que Apple realmente no documenta el formato de metadatos para los datos necesarios.
Así es como lo estoy haciendo durante mucho tiempo, con mucho éxito:
Cree un nuevo DMG, que se pueda escribir (!), Lo suficientemente grande como para contener los archivos binarios y adicionales esperados, como el archivo Léame (puede que sea escaso).
Monte el DMG y dele un diseño manualmente en Finder o con las herramientas que le convengan para hacerlo (consulte el enlace FileStorm en la parte inferior para obtener una buena herramienta). La imagen de fondo suele ser una imagen que colocamos en una carpeta oculta (".algo") en el DMG. Ponga una copia de su aplicación allí (cualquier versión, incluso una obsoleta lo hará) Copie otros archivos (alias, léame, etc.) que desee allí, nuevamente, las versiones obsoletas funcionarán bien. Asegúrese de que los íconos tengan los tamaños y las posiciones correctas (IOW, coloque el DMG de la manera que desee).
Desmontar el DMG nuevamente, todas las configuraciones deben estar almacenadas por ahora.
Escriba un script de creación de DMG que funcione de la siguiente manera:
Puede que este método no suene óptimo, pero confía en mí, funciona muy bien en la práctica. Puede poner el DMG original (plantilla DMG) incluso bajo el control de versión (por ejemplo, SVN), por lo que si alguna vez lo cambia / destruye accidentalmente, puede volver a una revisión donde todavía estaba bien. Puede agregar la plantilla DMG a su proyecto Xcode, junto con todos los demás archivos que pertenecen al DMG (archivo Léame, archivo URL, imagen de fondo), todo bajo control de versión y luego crear un objetivo (por ejemplo, un objetivo externo llamado "Crear DMG") y allí ejecuta el script DMG de arriba y agrega tu antiguo objetivo principal como objetivo dependiente. Puede acceder a los archivos en el árbol de Xcode usando $ {SRCROOT} en el script (siempre es la raíz fuente de su producto) y puede acceder a los productos de compilación usando $ {BUILT_PRODUCTS_DIR} (es siempre el directorio donde Xcode crea los resultados de la compilación) .
Resultado: en realidad, Xcode puede producir el DMG al final de la compilación. Un DMG que está listo para lanzar. De este modo, no solo puede crear un DMG relase bastante fácil, sino que también puede hacerlo en un proceso automatizado (en un servidor sin cabeza si lo desea), utilizando xcodebuild desde la línea de comandos (compilaciones nocturnas automatizadas, por ejemplo).
En cuanto al diseño inicial de la plantilla, FileStorm es una buena herramienta para hacerlo. Es comercial, pero muy potente y fácil de usar. La versión normal cuesta menos de $ 20, por lo que es realmente asequible. Tal vez uno pueda automatizar FileStorm para crear un DMG (por ejemplo, a través de AppleScript), nunca lo intentó, pero una vez que haya encontrado el DMG de plantilla perfecto, es realmente fácil actualizarlo para cada versión.
fuente
Actualizando esta pregunta proporcionando esta respuesta.
appdmg
es un programa de línea de comandos simple, fácil de usar y de código abierto que crea archivos dmg a partir de una especificación json simple. Eche un vistazo al archivo Léame en el sitio web oficial:https://github.com/LinusU/node-appdmg
Ejemplo rápido:
Instalar appdmg
Escribir un archivo json (
spec.json
)Ejecute el programa
(descargo de responsabilidad. Soy el creador de appdmg)
fuente
Para aquellos de ustedes que estén interesados en este tema, debo mencionar cómo creo el DMG:
dónde
fuente
Mi aplicación, DropDMG , es una manera fácil de crear imágenes de disco con imágenes de fondo, diseños de iconos, iconos de volumen personalizados y acuerdos de licencia de software. Se puede controlar desde un sistema de compilación a través de la herramienta de línea de comandos "dropdmg" o AppleScript. Si lo desea, los archivos RTF de imagen y licencia se pueden almacenar en su sistema de control de versiones.
fuente
Encontré esta gran aplicación de Mac para automatizar el proceso: http://www.araelium.com/dmgcanvas/ debes echar un vistazo si estás creando un instalador de dmg para tu aplicación de Mac
fuente
Para crear un buen DMG, ahora puede usar algunas fuentes abiertas bien escritas:
fuente
Si desea establecer un icono de volumen personalizado, utilice el siguiente comando
Ahora crea lectura / escritura dmg
fuente
Finalmente conseguí que esto funcionara en mi propio proyecto (que está en Xcode). Agregar estos 3 scripts a su fase de compilación creará automáticamente una imagen de disco para su producto que sea agradable y ordenada. Todo lo que tiene que hacer es crear su proyecto y el DMG lo estará esperando en la carpeta de sus productos.
Script 1 (Crear imagen de disco temporal):
Script 2 (Establecer script de propiedades de ventana):
La medida anterior para la ventana funciona para mi proyecto específicamente debido al tamaño de la imagen de fondo y la resolución del icono; Es posible que deba modificar estos valores para su propio proyecto.
Script 3 (Crear script de imagen de disco final):
¡Asegúrese de que los archivos de imagen que está utilizando estén en el directorio $ PROJECT_DIR / $ PROJECT_NAME /!
fuente
Los archivos .DS_Store almacenan la configuración de Windows en Mac. La configuración de Windows incluye el diseño de los iconos, el fondo de la ventana, el tamaño de la ventana, etc. El archivo .DS_Store es necesario para crear la ventana para las imágenes montadas para preservar la disposición de los archivos y el fondo de las ventanas.
Una vez que haya creado el archivo .DS_Store, puede copiarlo en su instalador creado (DMG).
fuente
También necesito usar el enfoque de línea de comandos para hacer el empaque y la creación de dmg "programáticamente en un script". La mejor respuesta que encontré hasta ahora es el marco de construcción de lanzamiento del proyecto Adium '(Ver R1). Hay un script personalizado (AdiumApplescriptRunner) que le permite evitar la interacción de la GUI de Windows Server con OSX. El enfoque "osascript applescript.scpt" requiere que inicie sesión como generador y ejecute la creación de dmg desde una sesión de línea de comando vt100.
El sistema de gestión de paquetes OSX no es tan avanzado en comparación con otros Unixen que pueden realizar esta tarea de manera fácil y sistemática.
R1: http://hg.adium.im/adium-1.4/file/00d944a3ef16/Release
fuente
Acabo de escribir una nueva (amigable) línea de comando para hacer esto. No se basa en Finder / AppleScript, ni en ninguna de las API de Alias Manager (en desuso), y es fácil de configurar y usar.
De todos modos, cualquiera que esté interesado puede encontrarlo en PyPi ; la documentación está disponible en Read The Docs .
fuente
Estas respuestas son demasiado complicadas y los tiempos han cambiado. Lo siguiente funciona bien en 10.9, los permisos son correctos y se ve bien.
Crear un DMG de solo lectura desde un directorio
Cree DMG de solo lectura con un icono (tipo .icns)
Si algo más tiene que suceder, lo más fácil es hacer una copia temporal de SRC_DIR y aplicar los cambios antes de crear un DMG.
fuente