Ich muss ein nettes Installationsprogramm für eine Mac-Anwendung erstellen. Ich möchte, dass es sich um ein Disk Image (DMG) mit einer vordefinierten Größe, einem vordefinierten Layout und einem Hintergrundbild handelt.
Ich muss dies programmgesteuert in einem Skript tun, um in ein vorhandenes Build-System integriert zu werden (eher ein Pack-System, da nur Installer erstellt werden. Die Builds werden separat ausgeführt).
Ich habe die DMG-Erstellung bereits mit "hdiutil" durchgeführt. Was ich noch nicht herausgefunden habe, ist, wie man ein Symbollayout erstellt und eine Hintergrund-Bitmap angibt.
Antworten:
Nach vielen Recherchen habe ich diese Antwort gefunden und füge sie hiermit als Antwort auf meine eigene Frage als Referenz ein:
Stellen Sie sicher, dass unter "Systemeinstellungen >> Universeller Zugriff" die Option "Zugriff für unterstützende Geräte aktivieren" aktiviert ist. Damit AppleScript funktioniert, muss es funktionieren. Möglicherweise müssen Sie nach dieser Änderung neu starten (ansonsten funktioniert es unter Mac OS X Server 10.4 nicht).
Erstellen Sie eine R / W-DMG. Es muss größer sein als das Ergebnis. In diesem Beispiel enthält die Bash-Variable "size" die Größe in KB und der Inhalt des Ordners in der Bash-Variablen "source" wird in die DMG kopiert:
Hängen Sie das Disk-Image ein und speichern Sie den Gerätenamen (nach diesem Vorgang möchten Sie möglicherweise einige Sekunden lang den Ruhezustand verwenden):
Speichern Sie das Hintergrundbild (im PNG-Format) in einem Ordner mit dem Namen ".background" in der DMG und speichern Sie seinen Namen in der Variablen "backgroundPictureName".
Verwenden Sie AppleScript, um die visuellen Stile festzulegen (der Name von .app muss in der Bash-Variablen "applicationName" enthalten sein, verwenden Sie nach Bedarf Variablen für die anderen Eigenschaften):
Schließen Sie die DMG ab, indem Sie die Berechtigungen richtig einstellen, komprimieren und freigeben:
Bei Snow Leopard setzt das obige Applescript die Symbolposition nicht richtig - es scheint sich um einen Snow Leopard-Fehler zu handeln. Eine Problemumgehung besteht darin, nach dem Festlegen der Symbole einfach close / open aufzurufen, dh:
quelle
sleep
nachdem Sie das Bild aufgeschüttet haben. Wie lange? Ist es nicht möglich, deterministisch auf den Abschluss des Prozesses zu warten? Gleiches gilt fürdelay 5
Ihr AppleScript. Ich bin immer vorsichtig mit solchen willkürlichen Wartezeiten, da ich einige sehr schlechte Erfahrungen mit ihnen gemacht habe. 2. In Schritt 6 rufen Siesync
zweimal an - warum?Es gibt ein kleines Bash-Skript namens create-dmg , das ausgefallene DMGs mit benutzerdefinierten Hintergründen, benutzerdefinierter Symbolpositionierung und Datenträgernamen erstellt.
Ich habe es vor vielen Jahren für die Firma gebaut, die ich damals geführt habe. es überlebt seitdem den Beitrag anderer Menschen und funktioniert Berichten zufolge gut.
Es gibt auch Node-Appdmg, das wie eine modernere und aktivere Anstrengung aussieht, die auf Node.js basiert. Probieren Sie es auch aus.
quelle
/Applications
wenn die App erkennt, dass sie ausgeführt wird~/Downloads
. Siehe auch diesen alten Artikel von John Gruber .Geh nicht dorthin. Als langjähriger Mac-Entwickler kann ich Ihnen versichern, dass keine Lösung wirklich gut funktioniert. Ich habe so viele Lösungen ausprobiert, aber sie sind alle nicht so gut. Ich denke, das Problem ist, dass Apple das Metadatenformat für die erforderlichen Daten nicht wirklich dokumentiert.
So mache ich das schon lange, sehr erfolgreich:
Erstellen Sie eine neue DMG, beschreibbar (!), Die groß genug ist, um die erwarteten Binär- und Zusatzdateien wie Readme zu speichern (spärlich könnte funktionieren).
Hängen Sie die DMG ein und geben Sie ihr manuell ein Layout im Finder oder mit den für Sie geeigneten Tools (siehe FileStorm-Link unten für ein gutes Tool). Das Hintergrundbild ist normalerweise ein Bild, das wir in einem versteckten Ordner (".something") in der DMG ablegen. Legen Sie dort eine Kopie Ihrer App ab (jede Version, auch eine veraltete, reicht aus). Kopieren Sie andere Dateien (Aliase, Readme-Dateien usw.), die Sie möchten. Auch hier sind veraltete Versionen ausreichend. Stellen Sie sicher, dass die Symbole die richtigen Größen und Positionen haben (IOW, gestalten Sie das DMG so, wie Sie es möchten).
Hängen Sie die DMG wieder aus, alle Einstellungen sollten jetzt gespeichert sein.
Schreiben Sie ein DMG-Erstellungsskript, das wie folgt funktioniert:
Diese Methode klingt vielleicht nicht optimal, aber glauben Sie mir, sie funktioniert in der Praxis sehr gut. Sie können die ursprüngliche DMG (DMG-Vorlage) sogar unter Versionskontrolle (z. B. SVN) stellen. Wenn Sie sie also versehentlich ändern / zerstören, können Sie einfach zu einer Revision zurückkehren, in der sie noch in Ordnung war. Sie können die DMG-Vorlage zusammen mit allen anderen Dateien, die zur DMG gehören (Readme, URL-Datei, Hintergrundbild), unter Versionskontrolle zu Ihrem Xcode-Projekt hinzufügen und dann ein Ziel erstellen (z. B. ein externes Ziel mit dem Namen "DMG erstellen"). Führen Sie dort das oben genannte DMG-Skript aus und fügen Sie Ihr altes Hauptziel als abhängiges Ziel hinzu. Sie können mit $ {SRCROOT} im Skript auf Dateien im Xcode-Baum zugreifen (ist immer das Quellstammverzeichnis Ihres Produkts) und Sie können mit $ {BUILT_PRODUCTS_DIR} auf Build-Produkte zugreifen (dies ist immer das Verzeichnis, in dem Xcode die Build-Ergebnisse erstellt). .
Ergebnis: Tatsächlich kann Xcode die DMG am Ende des Builds erzeugen. Eine DMG, die zur Veröffentlichung bereit ist. Auf diese Weise können Sie nicht nur ganz einfach ein Relase-DMG erstellen, sondern dies auch in einem automatisierten Prozess (auf einem Headless-Server, wenn Sie möchten) mithilfe von xcodebuild über die Befehlszeile (z. B. automatisierte nächtliche Builds).
In Bezug auf das ursprüngliche Layout der Vorlage ist FileStorm ein gutes Werkzeug dafür. Es ist kommerziell, aber sehr leistungsfähig und einfach zu bedienen. Die normale Version kostet weniger als 20 US-Dollar und ist daher sehr erschwinglich. Vielleicht kann man FileStorm automatisieren, um eine DMG zu erstellen (z. B. über AppleScript), das hat man nie versucht, aber wenn man die perfekte Vorlagen-DMG gefunden hat, ist es wirklich einfach, sie für jede Version zu aktualisieren.
quelle
Bringen Sie diese Frage auf den neuesten Stand, indem Sie diese Antwort geben.
appdmg
ist ein einfaches, benutzerfreundliches Open-Source-Befehlszeilenprogramm, das dmg-Dateien aus einer einfachen json-Spezifikation erstellt. Schauen Sie sich die Readme-Datei auf der offiziellen Website an:https://github.com/LinusU/node-appdmg
Kurzes Beispiel:
Installieren Sie appdmg
Schreiben Sie eine JSON-Datei (
spec.json
)Programm ausführen
(Haftungsausschluss. Ich bin der Schöpfer von appdmg)
quelle
Für diejenigen unter Ihnen, die sich für dieses Thema interessieren, sollte ich erwähnen, wie ich die DMG erstelle:
wo
quelle
Meine App DropDMG ist eine einfache Möglichkeit, Disk-Images mit Hintergrundbildern , Symbollayouts , benutzerdefinierten Volumensymbolen und Softwarelizenzvereinbarungen zu erstellen. Es kann von einem Build-System über das Befehlszeilentool "dropdmg" oder AppleScript gesteuert werden. Auf Wunsch können die Bild- und Lizenz-RTF-Dateien unter Ihrem Versionskontrollsystem gespeichert werden.
quelle
Ich habe diese großartige Mac-App gefunden, um den Prozess zu automatisieren - http://www.araelium.com/dmgcanvas/ Sie müssen einen Blick darauf werfen, ob Sie ein dmg-Installationsprogramm für Ihre Mac-App erstellen
quelle
Um eine gut aussehende DMG zu erstellen, können Sie jetzt nur einige gut geschriebene Open Source verwenden:
quelle
Wenn Sie ein benutzerdefiniertes Volume-Symbol festlegen möchten, verwenden Sie den folgenden Befehl
Erstellen Sie nun Lese- / Schreib-DMG
quelle
Ich habe das endlich in meinem eigenen Projekt zum Laufen gebracht (das zufällig in Xcode ist). Durch Hinzufügen dieser 3 Skripte zu Ihrer Erstellungsphase wird automatisch ein Disk Image für Ihr Produkt erstellt, das schön und ordentlich ist. Alles was Sie tun müssen, ist Ihr Projekt zu erstellen und die DMG wartet in Ihrem Produktordner.
Skript 1 (temporäres Disk-Image erstellen):
Skript 2 (Skript zum Festlegen von Fenstereigenschaften):
Die obige Messung für das Fenster funktioniert für mein Projekt speziell aufgrund der Größe meines Hintergrundbilds und der Symbolauflösung. Möglicherweise müssen Sie diese Werte für Ihr eigenes Projekt ändern.
Skript 3 (Make Final Disk Image Script erstellen):
Stellen Sie sicher, dass sich die von Ihnen verwendeten Bilddateien im Verzeichnis $ PROJECT_DIR / $ PROJECT_NAME / befinden!
quelle
.DS_Store-Dateien speichern Windows-Einstellungen auf dem Mac. Zu den Windows-Einstellungen gehören das Symbollayout, der Fensterhintergrund, die Größe des Fensters usw. Die Datei .DS_Store wird zum Erstellen des Fensters für bereitgestellte Bilder benötigt, um die Anordnung der Dateien und den Windows-Hintergrund beizubehalten.
Sobald Sie die .DS_Store-Datei erstellt haben, können Sie sie einfach in Ihr erstelltes Installationsprogramm (DMG) kopieren.
quelle
Ich brauche auch einen Befehlszeilenansatz, um das Packen und die Erstellung von dmg "programmgesteuert in einem Skript" durchzuführen. Die beste Antwort, die ich bisher gefunden habe, stammt aus dem Release Building Framework des Adium-Projekts (siehe R1). Es gibt ein benutzerdefiniertes Skript (AdiumApplescriptRunner), mit dem Sie die Interaktion mit der OSX WindowsServer-Benutzeroberfläche vermeiden können. Für den Ansatz "osascript applescript.scpt" müssen Sie sich als Builder anmelden und die dmg-Erstellung über eine Befehlszeilen-vt100-Sitzung ausführen.
Das OSX-Paketverwaltungssystem ist im Vergleich zu anderen Unixen, die diese Aufgabe einfach und systematisch ausführen können, nicht so fortschrittlich.
R1: http://hg.adium.im/adium-1.4/file/00d944a3ef16/Release
quelle
Ich habe gerade ein neues (freundliches) Befehlszeilenprogramm geschrieben, um dies zu tun. Es basiert nicht auf Finder / AppleScript oder einer der (veralteten) Alias Manager-APIs und ist einfach zu konfigurieren und zu verwenden.
Jeder, der interessiert ist, kann es auf PyPi finden ; Die Dokumentation finden Sie unter Read The Docs .
quelle
Diese Antworten sind viel zu kompliziert und die Zeiten haben sich geändert. Das Folgende funktioniert gut mit 10.9, die Berechtigungen sind korrekt und es sieht gut aus.
Erstellen Sie eine schreibgeschützte DMG aus einem Verzeichnis
Erstellen Sie eine schreibgeschützte DMG mit einem Symbol (Typ .icns).
Wenn etwas anderes passieren muss, ist es am einfachsten, eine temporäre Kopie des SRC_DIR zu erstellen und Änderungen daran vorzunehmen, bevor Sie eine DMG erstellen.
quelle