Tenemos la mejor solución que hallamos en todo internet. Queremos que te sea de mucha utilidad y si puedes comentarnos algo que nos pueda ayudar a crecer hazlo con total libertad.
Solución:
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. Es necesario para 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).
-
Cree un DMG L/E. Debe ser mayor 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:
hdiutil create -srcfolder "$source" -volname "$title" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size $sizek pack.temp.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):
device=$(hdiutil attach -readwrite -noverify -noautoopen "pack.temp.dmg" | egrep '^/dev/' | sed 1q | awk 'print $1')
-
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 configurar los estilos visuales (el nombre de .app debe estar en la variable bash “applicationName”, use variables para las otras propiedades según sea necesario):
echo ' tell application "Finder" tell disk "'$title'" open set current view of container window to icon view set toolbar visible of container window to false set statusbar visible of container window to false set the bounds of container window to 400, 100, 885, 430 set theViewOptions to the icon view options of container window set arrangement of theViewOptions to not arranged set icon size of theViewOptions to 72 set background picture of theViewOptions to file ".background:'$backgroundPictureName'" make new alias file at container window to POSIX file "/Applications" with properties name:"Applications" set position of item "'$applicationName'" of container window to 100, 100 set position of item "Applications" of container window to 375, 100 update without registering applications delay 5 close end tell end tell ' | osascript
-
Finalice el DMG configurando los permisos correctamente, comprimiéndolo y liberándolo:
chmod -Rf go-w /Volumes/"$title" sync sync hdiutil detach $device hdiutil convert "/pack.temp.dmg" -format UDZO -imagekey zlib-level=9 -o "$finalDMGName" rm -f /pack.temp.dmg
En Snow Leopard, el applescript anterior no establecerá la posición del ícono correctamente; parece ser un error de Snow Leopard. Una solución es simplemente llamar a cerrar/abrir después de configurar los íconos, es decir:
..
set position of item "'$applicationName'" of container window to 100, 100
set position of item "Applications" of container window to 375, 100
close
open
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 empresa que dirigía en ese momento; sobrevive gracias a la contribución de otras personas desde entonces y, según se informa, 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.
No vayas allí. Como desarrollador de Mac a largo plazo, puedo asegurarle que ninguna solución funciona realmente bien. Probé tantas 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, escribible (!), Lo suficientemente grande como para contener los archivos binarios y adicionales esperados como Léame (escaso podría funcionar).
-
Monte el DMG y dele un diseño manualmente en Finder o con las herramientas que más 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 desactualizada servirá). 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 posiciones correctos (IOW, diseñe el DMG de la manera que desee).
-
Desmonte el DMG nuevamente, todas las configuraciones deberían estar almacenadas ahora.
-
Escriba un script de creación de DMG, que funcione de la siguiente manera:
- Copia el DMG, por lo que el original nunca se vuelve a tocar.
- Monta la copia.
- Reemplaza todos los archivos con los más actualizados (por ejemplo, la última aplicación después de la compilación). Simplemente puede usar m.v. o ídem para eso en la línea de comando. Tenga en cuenta que cuando reemplaza un archivo como ese, el ícono permanecerá igual, la posición permanecerá igual, todo menos el contenido del archivo (o directorio) permanecerá igual (al menos con ídem, que generalmente usamos para esa tarea) . Por supuesto, también puede reemplazar la imagen de fondo con otra (solo asegúrese de que tenga las mismas dimensiones).
- Después de reemplazar los archivos, haga que el script desmonte la copia DMG nuevamente.
- Finalmente, llame a hdiutil para convertir el DMG de escritura en un DMG comprimido (y no de escritura).
Este método puede no parecer óptimo, pero créeme, funciona muy bien en la práctica. Puede poner el DMG original (plantilla DMG) incluso bajo el control de versiones (por ejemplo, SVN), por lo que si alguna vez lo cambia/destruye accidentalmente, puede volver a una revisión en la que todavía estaba bien. Puede agregar la plantilla DMG a su proyecto Xcode, junto con todos los demás archivos que pertenecen al DMG (léame, archivo URL, imagen de fondo), todo bajo control de versión y luego crear un objetivo (por ejemplo, objetivo externo llamado “Crear DMG”) y ejecute el script DMG de arriba y agregue su antiguo objetivo principal como objetivo dependiente. Puede acceder a los archivos en el árbol de Xcode usando $SRCROOT en el script (siempre es la fuente raíz de su producto) y puede acceder a los productos de compilación usando $BUILT_PRODUCTS_DIR (siempre es 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. No solo puede crear un DMG de liberación bastante fácil de esa manera, sino que también puede hacerlo en un proceso automatizado (en un servidor sin cabeza, si lo desea), usando 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 haya intentado, pero una vez que haya encontrado la plantilla DMG perfecta, es realmente fácil actualizarla para cada versión.