Muszę stworzyć fajny instalator dla aplikacji Mac. Chcę, aby był to obraz dysku (DMG) o zdefiniowanym rozmiarze, układzie i obrazie tła.
Muszę to zrobić programowo w skrypcie, aby zintegrować go z istniejącym systemem kompilacji (tak naprawdę to system paczek, ponieważ tworzy tylko instalatory. Kompilacje są wykonywane osobno).
Mam już tworzenie DMG przy użyciu „hdiutil”, czego jeszcze nie dowiedziałem się, jak utworzyć układ ikon i określić bitmapę w tle.
Odpowiedzi:
Po wielu badaniach wymyśliłem tę odpowiedź i niniejszym umieszczam ją tutaj jako odpowiedź na moje własne pytanie w celach informacyjnych:
Upewnij się, że „Włącz dostęp dla urządzeń pomocniczych” jest zaznaczone w Preferencjach systemowych >> Universal Access. Wymagany jest do działania AppleScript. Po tej zmianie może być konieczne ponowne uruchomienie komputera (nie działa inaczej w systemie Mac OS X Server 10.4).
Utwórz R / W DMG. Musi być większy niż wynik. W tym przykładzie zmienna bash „size” zawiera rozmiar w Kb, a zawartość folderu w zmiennej bash „source” zostanie skopiowana do DMG:
Zamontuj obraz dysku i zapisz nazwę urządzenia (możesz chcieć użyć trybu uśpienia przez kilka sekund po tej operacji):
Zapisz obraz tła (w formacie PNG) w folderze o nazwie „.background” w DMG i zapisz jego nazwę w zmiennej „backgroundPictureName”.
Użyj AppleScript, aby ustawić style wizualne (nazwa .app musi być w zmiennej bash „applicationName”, w razie potrzeby użyj zmiennych dla innych właściwości):
Sfinalizuj DMG, odpowiednio ustawiając uprawnienia, kompresując je i zwalniając:
W systemie Snow Leopard powyższy skrypt jabłkowy nie ustawi poprawnie pozycji ikony - wydaje się, że jest to błąd w systemie Snow Leopard. Jednym z obejść jest po prostu wywołanie opcji zamknij / otwórz po ustawieniu ikon, tj .:
źródło
sleep
Polecasz po przekreśleniu obrazu. Jak długo? Czy nie można deterministycznie czekać na zakończenie procesu? To samo dotyczydelay 5
w twoim AppleScript. Zawsze uważam na takie arbitralne czasy oczekiwania, ponieważ miałem z nimi bardzo złe doświadczenia. 2. W kroku 6 dzwoniszsync
dwukrotnie - dlaczego?Istnieje mały skrypt Bash o nazwie create-dmg, który tworzy fantazyjne DMG z niestandardowym tłem, niestandardowym pozycjonowaniem ikon i nazwą woluminu.
Zbudowałem go wiele lat temu dla firmy, którą wtedy prowadziłem; od tego czasu przetrwał dzięki wkładowi innych ludzi i podobno działa dobrze.
Istnieje również node-appdmg, który wygląda na bardziej nowoczesny i aktywny wysiłek oparty na Node.js; sprawdź to również.
źródło
/Applications
jeśli aplikacja wykryje, że działa~/Downloads
. Zobacz także ten stary artykuł Johna Grubera .Nie idź tam. Jako długoterminowy programista Mac, zapewniam cię, że żadne rozwiązanie naprawdę nie działa dobrze. Próbowałem tak wielu rozwiązań, ale nie wszystkie są zbyt dobre. Myślę, że problem polega na tym, że Apple tak naprawdę nie dokumentuje formatu metadanych niezbędnych danych.
Oto jak robię to od dłuższego czasu, bardzo skutecznie:
Utwórz nowy plik DMG, zapisywalny (!), Wystarczająco duży, aby pomieścić oczekiwane pliki binarne i dodatkowe, takie jak readme (rzadkie mogą działać).
Zamontuj DMG i nadaj mu układ ręcznie w Finderze lub dowolnymi narzędziami, które Ci odpowiadają (dobre narzędzie znajduje się na dole pliku FileStorm). Obraz w tle to zwykle obraz, który umieszczamy w ukrytym folderze („.something”) na DMG. Umieść tam kopię swojej aplikacji (wystarczy dowolna wersja, nawet ta nieaktualna). Skopiuj inne pliki (aliasy, pliki readme itp.), Które chcesz tam, ponownie, przestarzałe wersje będą w porządku. Upewnij się, że ikony mają odpowiednie rozmiary i pozycje (IOW, ustaw DMG tak, jak chcesz).
Ponownie odmontuj DMG, wszystkie ustawienia powinny być już zapisane.
Napisz skrypt tworzenia DMG, który działa w następujący sposób:
Ta metoda może nie brzmieć optymalnie, ale zaufaj mi, działa naprawdę dobrze w praktyce. Możesz umieścić oryginalny DMG (szablon DMG) nawet pod kontrolą wersji (np. SVN), więc jeśli kiedykolwiek go przypadkowo zmienisz / zniszczysz, możesz po prostu wrócić do wersji, w której nadal jest w porządku. Możesz dodać szablon DMG do swojego projektu Xcode wraz ze wszystkimi innymi plikami należącymi do DMG (plik readme, plik URL, obraz tła), wszystko pod kontrolą wersji, a następnie utworzyć cel (np. Cel zewnętrzny o nazwie „Utwórz DMG”) i uruchom powyższy skrypt DMG i dodaj swój stary główny cel jako cel zależny. Możesz uzyskać dostęp do plików w drzewie Xcode za pomocą $ {SRCROOT} w skrypcie (zawsze jest to źródłowy katalog główny produktu) i możesz uzyskać dostęp do produktów kompilacji za pomocą $ {BUILT_PRODUCTS_DIR} (zawsze jest to katalog, w którym Xcode tworzy wyniki kompilacji) .
Wynik: w rzeczywistości Xcode może wyprodukować DMG na końcu kompilacji. DMG, który jest gotowy do wydania. W ten sposób możesz nie tylko utworzyć DMG w prosty sposób, ale możesz to zrobić w zautomatyzowanym procesie (na serwerze bezgłowym, jeśli chcesz), używając xcodebuild z wiersza poleceń (na przykład automatyczne kompilacje nocne).
Jeśli chodzi o początkowy układ szablonu, FileStorm jest dobrym narzędziem do tego. Jest komercyjny, ale bardzo wydajny i łatwy w użyciu. Normalna wersja kosztuje mniej niż 20 USD, więc jest naprawdę przystępna cenowo. Być może można zautomatyzować FileStorm, aby utworzyć DMG (np. Za pomocą AppleScript), nigdy tego nie próbowałem, ale kiedy już znajdziesz idealny szablon DMG, naprawdę łatwo jest go zaktualizować dla każdej wersji.
źródło
Uaktualnienie tego pytania poprzez udzielenie tej odpowiedzi.
appdmg
jest prostym, łatwym w użyciu, otwartym programem wiersza poleceń, który tworzy pliki dmg na podstawie prostej specyfikacji json. Spójrz na plik Readme na oficjalnej stronie:https://github.com/LinusU/node-appdmg
Szybki przykład:
Zainstaluj appdmg
Napisz plik json (
spec.json
)Uruchom program
(wyłączenie odpowiedzialności. Jestem twórcą appdmg)
źródło
Dla tych, którzy są zainteresowani tym tematem, powinienem wspomnieć o tym, jak tworzę DMG:
gdzie
źródło
Moja aplikacja, DropDMG , to łatwy sposób na tworzenie obrazów dysków ze zdjęciami w tle, układami ikon, niestandardowymi ikonami woluminów i umowami licencyjnymi oprogramowania. Można nim sterować z systemu kompilacji za pomocą narzędzia wiersza polecenia „dropdmg” lub AppleScript. W razie potrzeby zdjęcia RTF i pliki licencyjne można zapisać w systemie kontroli wersji.
źródło
Znalazłem tę świetną aplikację na komputery Mac do automatyzacji procesu - http://www.araelium.com/dmgcanvas/ musisz sprawdzić, czy tworzysz instalator dmg dla aplikacji na komputer Mac
źródło
Aby stworzyć ładnie wyglądający DMG, możesz teraz po prostu użyć dobrze napisanych otwartych źródeł:
źródło
Jeśli chcesz ustawić niestandardową ikonę głośności, użyj poniższego polecenia
Teraz utwórz dmg do odczytu / zapisu
źródło
W końcu mam to działające w moim własnym projekcie (który akurat jest w Xcode). Dodanie tych 3 skryptów do fazy kompilacji spowoduje automatyczne utworzenie obrazu dysku dla twojego produktu, który jest miły i schludny. Wystarczy zbudować projekt, a DMG będzie czekać w folderze produktów.
Skrypt 1 (Utwórz obraz dysku Temp):
Skrypt 2 (Ustaw skrypt właściwości okna):
Powyższy pomiar dla okna działa w moim projekcie, szczególnie ze względu na rozmiar mojego obrazu tła i rozdzielczość ikony; może być konieczne zmodyfikowanie tych wartości dla własnego projektu.
Skrypt 3 (Utwórz końcowy skrypt obrazu dysku):
Upewnij się, że pliki obrazów, których używasz, znajdują się w katalogu $ PROJECT_DIR / $ PROJECT_NAME /!
źródło
Pliki .DS_Store przechowują ustawienia systemu Windows na komputerze Mac. Ustawienia systemu Windows obejmują układ ikon, tło okna, rozmiar okna itp. Plik .DS_Store jest potrzebny do utworzenia okna dla zamontowanych obrazów, aby zachować układ plików i tło okna.
Po utworzeniu pliku .DS_Store możesz go po prostu skopiować do utworzonego instalatora (DMG).
źródło
Potrzebuję również zastosowania podejścia z linii poleceń, aby wykonać pakowanie i tworzenie dmg „programowo w skrypcie”. Najlepsza odpowiedź, jaką znalazłem do tej pory, pochodzi z projektu Adium „Framework budowania wersji (patrz R1). Istnieje niestandardowy skrypt (AdiumApplescriptRunner), który pozwala uniknąć interakcji GUI z Windows OS Server. Podejście „osascript applescript.scpt” wymaga zalogowania się jako konstruktor i uruchomienia tworzenia dmg z sesji wiersza polecenia vt100.
System zarządzania pakietami OSX nie jest tak zaawansowany w porównaniu do innych systemów Unixen, które mogą to zadanie łatwo i systematycznie wykonywać.
R1: http://hg.adium.im/adium-1.4/file/00d944a3ef16/Release
źródło
Właśnie napisałem nowe (przyjazne) narzędzie wiersza poleceń, aby to zrobić. Nie opiera się na Finder / AppleScript ani na żadnym (przestarzałym) interfejsie API Alias Manager i jest łatwa w konfiguracji i obsłudze.
W każdym razie każdy zainteresowany może znaleźć go na PyPi ; dokumentacja jest dostępna w Read The Docs .
źródło
Te odpowiedzi są zbyt skomplikowane, a czasy się zmieniły. Następujące działa na 10.9 w porządku, uprawnienia są prawidłowe i ładnie to wygląda.
Utwórz DMG tylko do odczytu z katalogu
Utwórz DMG tylko do odczytu z ikoną (typ .icns)
Jeśli coś innego musi się wydarzyć, najłatwiej jest zrobić tymczasową kopię SRC_DIR i zastosować zmiany do niej przed utworzeniem DMG.
źródło