Tworzenie ładnego „instalatora” dmg dla Mac OS X

83

Zrobiłem moją pierwszą aplikację Qt dla Mac OS X. Teraz chcę stworzyć ładny plik .dmg, który pozwoli użytkownikowi łatwo ją zainstalować. Myślę o czymś takim jak Firefox ma (patrz zdjęcie): wprowadź opis obrazu tutaj

Jestem w tym zupełnie nowy, więc nawet nie wiem, od czego zacząć.

xx77aBs
źródło
2
Może to pomoże ci stackoverflow.com/questions/96882/ ...
Roger Lindsjö
Naprawdę nie potrzebuję automatyzacji, wolałbym coś łatwiejszego do rozpoczęcia;)
xx77aBs
3
może się przydać
Mike K,
@MikeK: Powinieneś zamieścić to jako odpowiedź, przyjmuję to, właśnie tego szukałem;)
xx77aBs
Możesz sprawdzić ten samouczek . Pokazuje krok po kroku, jak tworzyć piękne DMG tylko za pomocą iDMG (który jest darmowym oprogramowaniem), Findera i terminala. To całkiem proste.
Igor Augusto

Odpowiedzi:

90

Zaktualizuj to pytanie, udzielając tej odpowiedzi.

appdmgto prosty, łatwy w użyciu program wiersza poleceń typu open source, który tworzy pliki dmg na podstawie prostej specyfikacji json. Spójrz na plik readme na oficjalnej stronie internetowej:

https://github.com/LinusU/node-appdmg

Szybki przykład:

  1. Zainstaluj appdmg

    npm install -g appdmg
    
  2. Napisz plik json ( spec.json)

    {
      "title": "Test Title",
      "background": "background.png",
      "icon-size": 80,
      "contents": [
        { "x": 192, "y": 344, "type": "file", "path": "TestApp.app" },
        { "x": 448, "y": 344, "type": "link", "path": "/Applications" }
      ]
    }
    
  3. Uruchom program

    appdmg spec.json test.dmg
    

(wyłączenie odpowiedzialności. Jestem twórcą appdmg)

Linus Unnebäck
źródło
W porównaniu z innymi rozwiązaniami jest to zadziwiająco proste.
Aeolun
1
Yay, Linus tak droga. Uppskattar det.
Prof. Falken,
Jakaś szansa na skompilowany plik binarny dla OSX 10.6.8? Nie wiem, jak skompilować twoje źródła ... (nie ma tu zbytniego faceta od jabłek ...)
Mark Miles,
4
@MarkMiles większość kodu jest napisana w Javascript i dlatego nie jest przestrzegana. Npm zajmie się kompilacją wszystkich niezbędnych plików źródłowych (C, Objective-C). Najłatwiejszym sposobem na uruchomienie wszystkiego jest 1) Zainstaluj brew ( brew.sh ) 2) Zainstaluj Node.js ( brew install node), który również zawiera pakiety npm. 3) Podążaj za „
krótkim
@Lothar Myślę, że byłoby wspaniale zapakować appdmg jako plik binarny do łatwej dystrybucji, ale przypadek użycia, który już załączyłem, zawiera środowisko nodejs. Ale jeśli myślisz, że można to zrobić w „prostym skrypcie powłoki”, ośmielam się spróbować. Spójrz na kod, nie jest zbyt trywialny. Jest powód, dla którego oprócz skryptów powłoki mamy inne języki programowania.
Linus Unnebäck
20

To dość proste - podstawową ideą jest utworzenie pustego obrazu za pomocą Narzędzia dyskowego (spraw, aby był wystarczająco duży, aby przynajmniej pomieścić twoje rzeczy - dokładny rozmiar nie ma znaczenia), otwórz ten obraz za pomocą Findera , umieść swoje rzeczy i uporządkuj tak, jak chcesz (kliknij prawym przyciskiem myszy i Pokaż opcje widoku, aby ustawić takie rzeczy, jak rozmiar ikony lub obraz tła). To prawie wszystko - pozostaje tylko przekonwertować ten obraz r / w na skompresowany obraz: wysuń go i użyj Konwertuj w Narzędziu dyskowym, aby przekonwertować go na skompresowany obraz.

Simon Urbanek
źródło
9

Żadna z istniejących odpowiedzi tak naprawdę nie zrobiła tego za mnie; jedna odpowiedź jest ręczna, a dwie inne opcje - iDMG i node-appdmg - obie wymagają skryptu wyszukiwarki, co nie jest idealne.

Najlepszym sposobem na zrobienie tego w ramach automatycznego etapu kompilacji jest utworzenie pliku template.dmg, który wygląda dokładnie tak, jak chcesz (postępując zgodnie z normalnymi instrukcjami, np. Odpowiedzią Simona Urbanka, ale nie wykonując ostatniego kroku kompresji), a następnie w kompilacji scenariusz:

  1. Użyj hdiutil, aby dołączyć obraz
  2. Użyj cp etc, aby skopiować aplikację do zamontowanego obrazu
  3. odłącz hdiutil
  4. skompresuj obraz: hdiutil konwertuj "in.dmg" -quiet -format UDZO -imagekey zlib-level = 9 -o "MyApp-0.3.dmg"

Na https://github.com/remko/fancy-dmg/ znajduje się plik makefile zawierający te kroki.

JosephH
źródło
2
Pracujemy nad usunięciem AppleScript i udostępnieniem rozwiązania node-appdmg na wiele platform. Jeśli chcesz śledzić pracę, zajrzyj tutaj: github.com/LinusU/node-appdmg/issues?milestone=1&state=open
Linus Unnebäck
1
@ LinusUnnebäck To niesamowite; dzięki za udostępnienie tego! Nawet samo usunięcie zależności „applecript” byłoby doskonałe.
JosephH
Żaden problem :) naprawdę potrzebujemy tylko móc napisać własny .DS_Store i wszystko jest już załatwione, muszę tylko znaleźć czas na jego wdrożenie. ( github.com/LinusU/node-appdmg/issues/14 )
Linus Unnebäck
.DS_Store nie jest udokumentowane i jestem pewien, że nigdy nie będzie, więc nie jest to wyjście. Szablon wydaje się być jedynym niezawodnym rozwiązaniem.
Lothar
1

Możesz to zrobić za pomocą Findera:

  1. Pobierz i rozpakuj ten pusty plik DMG (to ja go utworzyłem i przesłałem)
  2. Zmień rozmiar pliku DMG do odpowiedniego rozmiaru (odpowiedni rozmiar to zwykle jego bieżący rozmiar plus rozmiar pliku .app). Aby to zrobić, otwórz narzędzie dyskowe (jeśli nie wiesz, jak to zrobić, wyszukaj disk utilityw Launchpad). Następnie kliknij „Obrazy” na pasku menu i wybierz „Zmień rozmiar ...”. Pojawi się okno do otwarcia pliku, otwórz pusty plik DMG.
  3. Kliknij dwukrotnie plik DMG, aby go zamontować. Na pulpicie Untitledpowinno pojawić się urządzenie o nazwie . Zmień nazwę na żądaną (prawdopodobnie chcesz nadać mu taką samą nazwę, jak Twój program).
  4. Otwórz to urządzenie. Powinieneś zobaczyć coś takiego:

    wprowadź opis obrazu tutaj

    Jeśli wszystko jest białe z wyjątkiem skrótu do folderu Aplikacje, naciśnij Cmd+ Ji zostanie otwarte okno. W dolnej części tego okna znajduje się kwadrat z etykietą „Przeciągnij tutaj obrazek”. Kliknij ten kwadrat, a otworzy się okno dialogowe Otwórz. W tym oknie dialogowym naciśnij Cmd+ Shift+ Gi wpisz i wybierz obraz.png./Volumes/(whatever you called the device in step 3)/.image

    Wszystko tutaj oprócz skrótu do folderu Aplikacje jest tylko obrazem tła. Możesz chcieć zmienić obraz tła (który zawiera kolor tła i strzałkę). Aby to zrobić, otwórz plik w edytorze obrazów i edytuj go w dowolny sposób. Po wykonaniu tej czynności może być konieczne odmontowanie urządzenia i ponowne zamontowanie go, otwierając plik DMG, aby zobaczyć zmiany. W zależności od tego, co umieścisz na obrazie, może być również konieczne przeniesienie skrótu do folderu Aplikacje, aby dopasować nowy obraz tła./Volumes/(whatever you called the device in step 3)/.image/image.png

  5. Przeciągnij plik .app na początek strzałki w oknie, w którym otwierane jest urządzenie z pliku DMG, tak aby wyglądało tak:

    wprowadź opis obrazu tutaj

    Może pojawić się błąd informujący, że jest za mało wolnego miejsca. W takim przypadku wróć do kroku 2 i zmień rozmiar pliku DMG na większy.

  6. Odłącz urządzenie, klikając strzałkę obok nazwy urządzenia w Finderze:

    wprowadź opis obrazu tutaj

  7. Przekonwertuj plik DMG na tylko do odczytu. Aby to zrobić, otwórz terminal i wpisz to (zastąp /path/to/dmg/fileścieżką do pliku DMG i nameOfDmgFile.dmgnazwą pliku DMG):

    cd /path/to/dmg/file
    hdiutil convert -format UDZO -o newNameOfDmgFile.dmg nameOfDmgFile.dmg
    

    Spowoduje to utworzenie nowego pliku DMG o nazwie newNameOfDmgFile.dmg(lub dowolnej innej nazwy, której użyłeś powyżej), który jest plikiem, który chcesz.

Kaczor Donald
źródło
Dlaczego musimy zmienić rozmiar DMG (jak wspomniałeś w punkcie 2)
Krishna Maru,
@KrishnaMaru Minęło dużo czasu, odkąd napisałem tę odpowiedź, ale jeśli dobrze pamiętam, przy próbie skopiowania dużego pliku do zbyt małego pliku DMG wystąpiłby błąd.
Kaczor Donald
0

Możesz do tego użyć Narzędzia dyskowego, ale jeśli chcesz mieć obraz w tle, potrzebujesz zaawansowanych wskazówek.

Najpierw otwórz Narzędzie dyskowe, a
następnie kliknij opcję Plik> Nowy obraz> Pusty obraz.
Zapyta Cię o jego rozmiar i nazwę.
Następnie możesz umieścić w nim pliki i gotowe!

UWAGA: zostało to przetestowane w systemie Mac OS Mojave. Nie wiem o poprzednich wersjach.

Ivan
źródło