J'ai besoin de créer un bon programme d'installation pour une application Mac. Je veux que ce soit une image disque (DMG), avec une taille, une disposition et une image d'arrière-plan prédéfinies.
J'ai besoin de le faire par programmation dans un script, pour être intégré dans un système de build existant (plus un système de pack vraiment, car il ne crée que des installateurs. Les builds se font séparément).
J'ai déjà fait la création DMG en utilisant "hdiutil", ce que je n'ai pas encore découvert, c'est comment faire une disposition d'icônes et spécifier un bitmap d'arrière-plan.
Réponses:
Après beaucoup de recherches, j'ai trouvé cette réponse, et je la mets ici comme réponse à ma propre question, pour référence:
Assurez-vous que «Activer l'accès pour les appareils et accessoires fonctionnels» est coché dans Préférences Système >> Accès universel. Il est nécessaire au fonctionnement d'AppleScript. Vous devrez peut-être redémarrer après cette modification (cela ne fonctionne pas autrement sur Mac OS X Server 10.4).
Créez un DMG R / W. Il doit être plus grand que le résultat. Dans cet exemple, la variable bash "taille" contient la taille en Ko et le contenu du dossier dans la variable bash "source" sera copié dans le DMG:
Montez l'image disque et stockez le nom du périphérique (vous voudrez peut-être utiliser la veille pendant quelques secondes après cette opération):
Stockez l'image d'arrière-plan (au format PNG) dans un dossier appelé ".background" dans le DMG, et stockez son nom dans la variable "backgroundPictureName".
Utilisez AppleScript pour définir les styles visuels (le nom de .app doit être dans la variable bash "applicationName", utilisez des variables pour les autres propriétés si nécessaire):
Finalisez le DMG en définissant les autorisations correctement, en le compressant et en le libérant:
Sur Snow Leopard, l'applescript ci-dessus ne définira pas correctement la position de l'icône - il semble que ce soit un bug de Snow Leopard. Une solution de contournement consiste à simplement appeler close / open après avoir défini les icônes, à savoir:
la source
sleep
après avoir monté l'image. Combien de temps? N'est-il pas possible d'attendre de manière déterministe la fin du processus? Pareil pourdelay 5
votre AppleScript. Je me méfie toujours de ces temps d'attente arbitraires, ayant eu une très mauvaise expérience avec eux. 2. Dans votre étape 6, vous appelezsync
deux fois - pourquoi?Il y a un petit script Bash appelé create-dmg qui construit des DMG de fantaisie avec des arrière-plans personnalisés, un positionnement d'icône personnalisé et un nom de volume.
Je l'ai construit il y a de nombreuses années pour l'entreprise que je dirigeais à l'époque; il survit grâce à la contribution des autres depuis lors, et aurait bien fonctionné.
Il y a aussi node-appdmg qui ressemble à un effort plus moderne et actif basé sur Node.js; vérifiez-le aussi.
la source
/Applications
si l'application détecte son exécution~/Downloads
. Voir aussi cet ancien article de John Gruber .N'y allez pas. En tant que développeur Mac à long terme, je peux vous assurer qu'aucune solution ne fonctionne vraiment bien. J'ai essayé tant de solutions, mais elles ne sont pas toutes trop bonnes. Je pense que le problème est qu'Apple ne documente pas vraiment le format des métadonnées pour les données nécessaires.
Voici comment je le fais depuis longtemps, avec beaucoup de succès:
Créez un nouveau DMG, inscriptible (!), Assez grand pour contenir les fichiers binaires et supplémentaires attendus comme le fichier lisez-moi (le peu peut fonctionner).
Montez le DMG et donnez-lui une mise en page manuellement dans le Finder ou avec les outils qui vous conviennent pour cela (voir le lien FileStorm en bas pour un bon outil). L'image d'arrière-plan est généralement une image que nous mettons dans un dossier caché (".quelque chose") sur le DMG. Mettez-y une copie de votre application (n'importe quelle version, même obsolète, fera l'affaire). Copiez les autres fichiers (alias, readme, etc.) que vous voulez là-bas, encore une fois, les versions obsolètes feront très bien l'affaire. Assurez-vous que les icônes ont les bonnes tailles et positions (IOW, disposez le DMG comme vous le souhaitez).
Démontez à nouveau le DMG, tous les paramètres doivent être stockés maintenant.
Écrivez un script de création DMG, qui fonctionne comme suit:
Cette méthode peut ne pas sembler optimale, mais croyez-moi, elle fonctionne très bien en pratique. Vous pouvez placer le DMG d'origine (modèle DMG) même sous contrôle de version (par exemple SVN), donc si vous le changez / détruisez accidentellement, vous pouvez simplement revenir à une révision où il était toujours correct. Vous pouvez ajouter le modèle DMG à votre projet Xcode, ainsi que tous les autres fichiers appartenant au DMG (fichier Lisezmoi, fichier URL, image d'arrière-plan), le tout sous contrôle de version, puis créer une cible (par exemple, une cible externe nommée "Créer DMG") et là, exécutez le script DMG ci-dessus et ajoutez votre ancienne cible principale comme cible dépendante. Vous pouvez accéder aux fichiers dans l'arborescence Xcode en utilisant $ {SRCROOT} dans le script (est toujours la racine source de votre produit) et vous pouvez accéder aux produits de construction en utilisant $ {BUILT_PRODUCTS_DIR} (est toujours le répertoire où Xcode crée les résultats de la construction) .
Résultat: en fait, Xcode peut produire le DMG à la fin de la construction. Un DMG prêt à sortir. Non seulement vous pouvez créer un DMG de relocalisation assez facilement de cette façon, vous pouvez également le faire dans un processus automatisé (sur un serveur sans tête si vous le souhaitez), en utilisant xcodebuild à partir de la ligne de commande (constructions nocturnes automatisées par exemple).
En ce qui concerne la disposition initiale du modèle, FileStorm est un bon outil pour le faire. Il est commercial, mais très puissant et facile à utiliser. La version normale coûte moins de 20 $, elle est donc vraiment abordable. Peut-être que l'on peut automatiser FileStorm pour créer un DMG (par exemple via AppleScript), jamais essayé, mais une fois que vous avez trouvé le modèle DMG parfait, il est vraiment facile de le mettre à jour pour chaque version.
la source
Mettre cette question à jour en fournissant cette réponse.
appdmg
est un programme de ligne de commande open source simple, facile à utiliser qui crée des fichiers dmg à partir d'une simple spécification json. Jetez un œil au fichier Lisez-moi sur le site officiel:https://github.com/LinusU/node-appdmg
Exemple rapide:
Installer appdmg
Écrire un fichier json (
spec.json
)Exécuter de programme
(Avertissement. Je suis le créateur de appdmg)
la source
Pour ceux d'entre vous qui sont intéressés par ce sujet, je dois mentionner comment je crée le DMG:
où
la source
Mon application, DropDMG , est un moyen facile de créer des images de disque avec des images d'arrière-plan, des dispositions d'icônes, des icônes de volume personnalisées et des accords de licence logicielle. Il peut être contrôlé à partir d'un système de génération via l'outil de ligne de commande "dropdmg" ou AppleScript. Si vous le souhaitez, les fichiers image et licence RTF peuvent être stockés sous votre système de contrôle de version.
la source
J'ai trouvé cette excellente application mac pour automatiser le processus - http://www.araelium.com/dmgcanvas/ vous devez jeter un œil si vous créez le programme d'installation de dmg pour votre application mac
la source
Pour créer un joli DMG, vous pouvez maintenant simplement utiliser des sources ouvertes bien écrites:
la source
Si vous souhaitez définir une icône de volume personnalisée, utilisez la commande ci-dessous
Maintenant, créez lecture / écriture dmg
la source
J'ai finalement obtenu ce travail dans mon propre projet (qui se trouve être dans Xcode). L'ajout de ces 3 scripts à votre phase de construction créera automatiquement une image disque pour votre produit qui est agréable et soignée. Tout ce que vous avez à faire est de construire votre projet et le DMG attendra dans votre dossier produits.
Script 1 (Créer une image disque temporaire):
Script 2 (Définir le script des propriétés de la fenêtre):
La mesure ci-dessus pour le travail de la fenêtre pour mon projet en particulier en raison de la taille de ma résolution d'arrière-plan et de l'icône; vous devrez peut-être modifier ces valeurs pour votre propre projet.
Script 3 (Créer un script d'image disque final):
Assurez-vous que les fichiers image que vous utilisez se trouvent dans le répertoire $ PROJECT_DIR / $ PROJECT_NAME /!
la source
Les fichiers .DS_Store stockent les paramètres de Windows dans Mac. Les paramètres de Windows incluent la disposition des icônes, l'arrière-plan de la fenêtre, la taille de la fenêtre, etc. Le fichier .DS_Store est nécessaire pour créer la fenêtre des images montées afin de conserver la disposition des fichiers et l'arrière-plan des fenêtres.
Une fois le fichier .DS_Store créé, vous pouvez simplement le copier dans votre programme d'installation créé (DMG).
la source
J'ai également besoin d'utiliser l'approche en ligne de commande pour faire le packaging et la création de dmg "par programmation dans un script". La meilleure réponse que j'ai trouvée jusqu'à présent provient du cadre de création de versions du projet Adium (voir R1). Il existe un script personnalisé (AdiumApplescriptRunner) pour vous permettre d'éviter l'interaction avec l'interface graphique OSX WindowsServer. L'approche "osascript applescript.scpt" nécessite que vous vous connectiez en tant que générateur et exécutez la création dmg à partir d'une session vt100 en ligne de commande.
Le système de gestion des packages OSX n'est pas si avancé par rapport aux autres Unixen qui peuvent effectuer cette tâche facilement et systématiquement.
R1: http://hg.adium.im/adium-1.4/file/00d944a3ef16/Release
la source
Je viens d'écrire un nouvel utilitaire de ligne de commande (convivial) pour ce faire. Il ne repose pas sur Finder / AppleScript, ni sur aucune des API (obsolètes) d'Alias Manager, et il est facile à configurer et à utiliser.
Quoi qu'il en soit, toute personne intéressée peut le trouver sur PyPi ; la documentation est disponible sur Read The Docs .
la source
Ces réponses sont beaucoup trop compliquées et les temps ont changé. Ce qui suit fonctionne très bien sur 10.9, les autorisations sont correctes et cela a l'air bien.
Créer un DMG en lecture seule à partir d'un répertoire
Créer un DMG en lecture seule avec une icône (type .icns)
Si autre chose doit se produire, la chose la plus simple consiste à faire une copie temporaire du SRC_DIR et à y apporter des modifications avant de créer un DMG.
la source