Saya perlu membuat installer yang bagus untuk aplikasi Mac. Saya ingin ini menjadi gambar disk (DMG), dengan ukuran yang telah ditentukan, tata letak, dan gambar latar belakang.
Saya perlu melakukan ini secara terprogram dalam sebuah skrip, untuk diintegrasikan dalam sistem build yang ada (sebenarnya lebih dari sistem paket, karena hanya membuat installer. Build dilakukan secara terpisah).
Saya sudah membuat kreasi DMG menggunakan "hdiutil", yang belum saya ketahui adalah bagaimana membuat tata letak ikon dan menentukan bitmap latar belakang.
Jawaban:
Setelah banyak penelitian, saya datang dengan jawaban ini, dan saya dengan ini menempatkannya di sini sebagai jawaban untuk pertanyaan saya sendiri, untuk referensi:
Pastikan "Aktifkan akses untuk perangkat bantu" dicentang di System Preferences >> Universal Access. Diperlukan agar AppleScript berfungsi. Anda mungkin harus memulai ulang setelah perubahan ini (tidak berfungsi sebaliknya di Mac OS X Server 10.4).
Buat R / W DMG. Itu harus lebih besar dari hasilnya. Dalam contoh ini, "bash" variabel bash berisi ukuran dalam Kb dan isi folder di bash "source" variabel akan disalin ke DMG:
Pasang gambar disk, dan simpan nama perangkat (Anda mungkin ingin menggunakan sleep selama beberapa detik setelah operasi ini):
Simpan gambar latar belakang (dalam format PNG) dalam folder bernama ".background" di DMG, dan simpan namanya dalam variabel "backgroundPictureName".
Gunakan AppleScript untuk mengatur gaya visual (nama .app harus dalam variabel bash "applicationName", gunakan variabel untuk properti lain sesuai kebutuhan):
Finalisasi DMG dengan mengatur izin dengan benar, mengompresi dan melepaskannya:
Pada Snow Leopard, applescript di atas tidak akan mengatur posisi ikon dengan benar - sepertinya itu adalah bug Snow Leopard. Salah satu solusinya adalah dengan memanggil tutup / buka setelah mengatur ikon, yaitu:
sumber
sleep
setelah membuat gambar. Berapa lama? Apakah tidak mungkin untuk secara deterministik menunggu selesainya proses? Sama untukdelay 5
di AppleScript Anda. Saya selalu waspada terhadap waktu tunggu yang sewenang-wenang seperti itu, setelah memiliki pengalaman yang sangat buruk dengan mereka. 2. Pada langkah 6 Anda meneleponsync
dua kali - mengapa?Ada sedikit skrip Bash yang disebut create-dmg yang membangun DMG mewah dengan latar belakang khusus, pemosisian ikon kustom dan nama volume.
Saya telah membangunnya bertahun-tahun yang lalu untuk perusahaan yang saya jalankan saat itu; itu bertahan atas kontribusi orang lain sejak saat itu, dan dilaporkan bekerja dengan baik.
Ada juga node-appdmg yang terlihat seperti upaya yang lebih modern dan aktif berdasarkan Node.js; lihat juga.
sumber
/Applications
jika aplikasi mendeteksi itu berjalan dari~/Downloads
. Lihat juga artikel lama ini oleh John Gruber .Jangan ke sana. Sebagai pengembang Mac jangka panjang, saya dapat meyakinkan Anda, tidak ada solusi yang bekerja dengan baik. Saya mencoba banyak solusi, tetapi semuanya tidak terlalu bagus. Saya pikir masalahnya adalah Apple tidak benar-benar mendokumentasikan format meta data untuk data yang diperlukan.
Begini cara saya melakukannya untuk waktu yang lama, sangat sukses:
Buat DMG baru, dapat ditulisi (!), Cukup besar untuk menampung file biner dan ekstra yang diharapkan seperti readme (jarang mungkin berfungsi).
Pasang DMG dan berikan tata letak secara manual di Finder atau dengan alat apa pun yang cocok untuk Anda melakukannya (lihat tautan FileStorm di bagian bawah untuk alat yang baik). Gambar latar belakang biasanya merupakan gambar yang kami masukkan ke folder tersembunyi (".something") pada DMG. Letakkan salinan aplikasi Anda di sana (versi apa pun, bahkan yang sudah usang akan melakukannya). Salin file lain (alias, readme, dll.) Yang Anda inginkan di sana, sekali lagi, versi lama akan baik-baik saja. Pastikan ikon memiliki ukuran dan posisi yang tepat (TKI, tata letak DMG seperti yang Anda inginkan).
Lepaskan DMG lagi, semua pengaturan harus disimpan sekarang.
Tulis skrip buat DMG, yang berfungsi sebagai berikut:
Metode ini mungkin kedengarannya tidak optimal, tapi percayalah, itu bekerja sangat baik dalam prakteknya. Anda dapat meletakkan DMG (template DMG) asli bahkan di bawah kontrol versi (mis. SVN), jadi jika Anda pernah secara tidak sengaja mengubah / menghancurkannya, Anda bisa kembali ke revisi di mana itu masih baik-baik saja. Anda dapat menambahkan template DMG ke proyek Xcode Anda, bersama dengan semua file lain yang menjadi bagian dari DMG (readme, file URL, gambar latar belakang), semua di bawah kontrol versi dan kemudian membuat target (mis. Target eksternal bernama "Buat DMG") dan jalankan skrip DMG di atas dan tambahkan target utama lama Anda sebagai target dependen. Anda dapat mengakses file di pohon Xcode menggunakan $ {SRCROOT} dalam skrip (selalu menjadi sumber root produk Anda) dan Anda dapat mengakses produk build dengan menggunakan $ {BUILT_PRODUCTS_DIR} (selalu direktori di mana Xcode membuat hasil build) .
Hasil: Sebenarnya Xcode dapat menghasilkan DMG di akhir build. DMG yang siap dirilis. Tidak hanya Anda dapat membuat relase DMG cukup mudah dengan cara itu, Anda benar-benar dapat melakukannya dalam proses otomatis (pada server tanpa kepala jika Anda suka), menggunakan xcodebuild dari baris perintah (misalnya bangunan otomatis malam).
Mengenai tata letak awal templat, FileStorm adalah alat yang baik untuk melakukannya. Ini komersial, tetapi sangat kuat dan mudah digunakan. Versi normal kurang dari $ 20, sehingga sangat terjangkau. Mungkin seseorang dapat mengotomatisasi FileStorm untuk membuat DMG (mis. Via AppleScript), tidak pernah mencobanya, tetapi begitu Anda telah menemukan DMG templat yang sempurna, sangat mudah untuk memperbaruinya untuk setiap rilis.
sumber
Membawa pertanyaan ini terkini dengan memberikan jawaban ini.
appdmg
adalah program baris perintah sumber terbuka sederhana, mudah digunakan yang membuat file dmg dari spesifikasi json sederhana. Lihatlah readme di situs web resmi:https://github.com/LinusU/node-appdmg
Contoh cepat:
Pasang appdmg
Tulis file json (
spec.json
)Jalankan program
(Penafian. Saya pencipta appdmg)
sumber
Bagi Anda yang tertarik dengan topik ini, saya harus menyebutkan bagaimana saya membuat DMG:
dimana
sumber
Aplikasi saya, DropDMG , adalah cara mudah untuk membuat gambar disk dengan gambar latar belakang, tata letak ikon, ikon volume khusus, dan perjanjian lisensi perangkat lunak. Itu dapat dikontrol dari sistem build melalui alat baris perintah "dropdmg" atau AppleScript. Jika diinginkan, gambar dan file lisensi RTF dapat disimpan di bawah sistem kontrol versi Anda.
sumber
Saya menemukan aplikasi mac yang hebat ini untuk mengotomatiskan proses - http://www.araelium.com/dmgcanvas/ Anda harus melihatnya jika Anda membuat penginstal dmg untuk aplikasi mac Anda
sumber
Untuk membuat DMG yang terlihat bagus, Anda sekarang dapat menggunakan beberapa sumber terbuka yang ditulis dengan baik:
sumber
Jika Anda ingin mengatur ikon volume khusus maka gunakan perintah di bawah ini
Sekarang buat baca / tulis dmg
sumber
Saya akhirnya berhasil dalam proyek saya sendiri (yang kebetulan berada di Xcode). Menambahkan 3 skrip ini ke fase build Anda akan secara otomatis membuat Disk Image untuk produk Anda yang bagus dan rapi. Yang harus Anda lakukan adalah membangun proyek Anda dan DMG akan menunggu di folder produk Anda.
Script 1 (Buat Temp Disk Image):
Script 2 (Set Script Properti Jendela):
Pengukuran di atas untuk pekerjaan jendela untuk proyek saya secara khusus karena ukuran gambar latar belakang saya dan resolusi ikon; Anda mungkin perlu mengubah nilai-nilai ini untuk proyek Anda sendiri.
Script 3 (Buat Skrip Gambar Disk Akhir):
Pastikan file gambar yang Anda gunakan ada di direktori $ PROJECT_DIR / $ PROJECT_NAME /!
sumber
File .DS_Store menyimpan pengaturan windows di Mac. Pengaturan Windows meliputi tata letak ikon, latar belakang jendela, ukuran jendela, dll. File .DS_Store diperlukan dalam menciptakan jendela untuk gambar yang dipasang untuk mempertahankan pengaturan file dan latar belakang jendela.
Setelah file .DS_Store dibuat, Anda cukup menyalinnya ke installer yang dibuat (DMG).
sumber
Saya juga perlu menggunakan pendekatan baris perintah untuk melakukan pengemasan dan pembuatan dmg "secara terprogram dalam skrip". Jawaban terbaik yang saya temukan sejauh ini adalah dari kerangka kerja Rilis proyek Adium (Lihat R1). Ada skrip khusus (AdiumApplescriptRunner) untuk memungkinkan Anda menghindari interaksi GUI OSX WindowsServer. Pendekatan "osascript applescript.scpt" mengharuskan Anda masuk sebagai pembuat dan menjalankan pembuatan dmg dari sesi baris perintah vt100.
Sistem manajemen paket OSX tidak begitu canggih dibandingkan dengan Unixen lain yang dapat melakukan tugas ini dengan mudah dan sistematis.
R1: http://hg.adium.im/adium-1.4/file/00d944a3ef16/Release
sumber
Saya baru saja menulis utilitas baris perintah (ramah) baru untuk melakukan ini. Itu tidak bergantung pada Finder / AppleScript, atau pada salah satu dari API Alias Manager (yang sudah usang), dan mudah untuk mengonfigurasi dan menggunakan.
Bagaimanapun, siapa pun yang tertarik dapat menemukannya di PyPi ; dokumentasi tersedia di Read The Docs .
sumber
Jawaban ini terlalu rumit dan waktu telah berubah. Berikut ini berfungsi pada 10,9 saja, izin sudah benar dan itu terlihat bagus.
Buat DMG hanya-baca dari direktori
Buat DMG hanya-baca dengan ikon (tipe .icns)
Jika hal lain perlu terjadi, hal termudah ini adalah membuat salinan sementara dari SRC_DIR dan menerapkan perubahan sebelum membuat DMG.
sumber