كيف أقوم بإنشاء DMG لطيف لـ Mac OS X باستخدام أدوات سطر الأوامر؟

أحتاج إلى إنشاء أداة تثبيت لطيفة لتطبيق Mac. أريد أن يكون صورة قرص (DMG) ، مع حجم مخطط مسبقا ، وصورة خلفية.

أحتاج إلى القيام بذلك برمجيًا في برنامج نصي ، ليتم دمجه في نظام إنشاء حالي (أكثر من نظام حزم بالفعل ، حيث إنه ينشئ فقط برامج تثبيت. تتم عمليات الإنشاء بشكل منفصل).

لدي بالفعل إنشاء DMG باستخدام "hdiutil" ، ما لم أجده بعد هو كيفية إنشاء تخطيط رمز وتحديد صورة نقطية في الخلفية.

0
وأضاف المؤلف Prof. Falken, مصدر
أليس هذا شيء لـ Ask Different؟
وأضاف المؤلف Lenar Hoyt, مصدر

14 إجابة

إذا كنت ترغب في تعيين رمز وحدة التخزين المخصصة ، فاستخدم الأمر أدناه

/*Add a drive icon*/
cp "/Volumes/customIcon.icns" "/Volumes/dmgName/.VolumeIcon.icns"  


/*SetFile -c icnC will change the creator of the file to icnC*/
SetFile -c icnC //.VolumeIcon.icns

الآن إنشاء قراءة/كتابة dmg

/*to set custom icon attribute*/
SetFile -a C /Volumes/dmgName
0
وأضاف
"المسار الخاص بك" هو اسم DMG. (/ المجلدات/dmgName)
وأضاف المؤلف Parag Bafna, مصدر
يجب عليك نسخ ملف icns. cp "/Volumes/customIcon.icns" "/Volumes/dmgName/.VolumeIcon.icns"
وأضاف المؤلف Parag Bafna, مصدر
هل يمكنك توضيح ماذا يعني "طريقك" هنا؟ هل يمكنني استخدام أي ملف رموز على القرص ، وسوف ينسخه SetFile ، أو سأحتاج إلى استخدام ملف بداخل .dmg؟ ليس لدي سوى جهاز Mac واحد ، لذلك من الصعب اختبار ما إذا كانت الأشياء ستعمل على أجهزة أخرى.
وأضاف المؤلف Milan Babuškov, مصدر

لأولئك منكم المهتمين بهذا الموضوع ، يجب أن أذكر كيف أقوم بإنشاء DMG:

hdiutil create XXX.dmg -volname "YYY" -fs HFS+ -srcfolder "ZZZ"

أين

XXX == disk image file name (duh!)
YYY == window title displayed when DMG is opened
ZZZ == Path to a folder containing the files that will be copied into the DMG
0
وأضاف
هذا جيد ، لكنه لا يعالج الحاجة الفعلية (صورة الخلفية ، وتحديد المواقع للعناصر في المجلد ، وما إلى ذلك)
وأضاف المؤلف Tom Bogle, مصدر

بعد الكثير من الأبحاث ، توصلت إلى هذه الإجابة ، وأنا هنا أضعها هنا كإجابة لسؤالي ، للرجوع إليها:

  1. Make sure that "Enable access for assistive devices" is checked in System Preferences>>Universal Access. It is required for the AppleScript to work. You may have to reboot after this change (it doesn't work otherwise on Mac OS X Server 10.4).

  2. Create a R/W DMG. It must be larger than the result will be. In this example, the bash variable "size" contains the size in Kb and the contents of the folder in the "source" bash variable will be copied into the DMG:

    hdiutil create -srcfolder "${source}" -volname "${title}" -fs HFS+ \
          -fsargs "-c c=64,a=16,e=16" -format UDRW -size ${size}k pack.temp.dmg
    
  3. Mount the disk image, and store the device name (you might want to use sleep for a few seconds after this operation):

    device=$(hdiutil attach -readwrite -noverify -noautoopen "pack.temp.dmg" | \
             egrep '^/dev/' | sed 1q | awk '{print $1}')
    
  4. Store the background picture (in PNG format) in a folder called ".background" in the DMG, and store its name in the "backgroundPictureName" variable.

  5. Use AppleScript to set the visual styles (name of .app must be in bash variable "applicationName", use variables for the other properties as needed):

    echo '
       tell application "Finder"
         tell disk "'${title}'"
               open
               set current view of container window to icon view
               set toolbar visible of container window to false
               set statusbar visible of container window to false
               set the bounds of container window to {400, 100, 885, 430}
               set theViewOptions to the icon view options of container window
               set arrangement of theViewOptions to not arranged
               set icon size of theViewOptions to 72
               set background picture of theViewOptions to file ".background:'${backgroundPictureName}'"
               make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
               set position of item "'${applicationName}'" of container window to {100, 100}
               set position of item "Applications" of container window to {375, 100}
               update without registering applications
               delay 5
               close
         end tell
       end tell
    ' | osascript
    
  6. Finialize the DMG by setting permissions properly, compressing and releasing it:

    chmod -Rf go-w /Volumes/"${title}"
    sync
    sync
    hdiutil detach ${device}
    hdiutil convert "/pack.temp.dmg" -format UDZO -imagekey zlib-level=9 -o "${finalDMGName}"
    rm -f /pack.temp.dmg 
    

على Snow Leopard ، لن يقوم applescript أعلاه بتعيين موضع الرمز بشكل صحيح - يبدو أنه خطأ Snow Leopard. حل واحد هو ببساطة إغلاق/فتح بعد إعداد الرموز ، بمعنى:

..
set position of item "'${applicationName}'" of container window to {100, 100}
set position of item "Applications" of container window to {375, 100}
close
open
0
وأضاف
أعتقد أنني وجدت خلل طفيف - هناك إخراج في AppleScript ، والذي يتم قبل محاولة تشغيل chmod. سوف تفشل chmod لأنه يتم الآن إخراج القرص.
وأضاف المؤلف Trejkaz, مصدر
وهو يسمح applescript لمحاكاة إدخال الماوس ولوحة المفاتيح ومجموعة من الأشياء الأخرى.
وأضاف المؤلف Ludvig A. Norin, مصدر
مطلوب إزالة أذونات الكتابة على المجلد المصدر في أحد الإصدارات السابقة من hdiutil. يفترض في هذه المقالة أن الأوامر يتم تنفيذها كجذر ، والتي قد تكون أو لا تكون مطلوبة لجميع الأجزاء الأخرى للعمل. لا يهتم الإصدار الحالي من hdiutil بامتيازات الكتابة في المجلد المصدر.
وأضاف المؤلف Ludvig A. Norin, مصدر
لم أجد أي طريقة للانتظار بشكل انتقامي لإكمال أمر "التحديث بدون تسجيل التطبيقات". لست متأكدا من الحاجة إلى النوم بعد "hdiutil attach" ، سيكون عليك التحقق من الوثائق (man hdiutil). يجب أن تكون هناك حاجة للمزامنة مرة واحدة فقط ، أفعل ذلك مرتين من العادة القديمة منذ أيام SunOS القديمة الجيدة.
وأضاف المؤلف Ludvig A. Norin, مصدر
github.com/LinusU/node-appdmg <- THIS SUPERSEDES AND ABOVE!
وأضاف المؤلف Prof. Falken, مصدر
chmod هو بلا جدوى تماما لأنه يتطلب sudo ولا يحقق أي شيء. تكون DMG الناتجة قراءة كاملة فقط بغض النظر.
وأضاف المؤلف Barry, مصدر
ممتاز. سؤالان حول ذلك: 1. تنصح sleep بعد تحجيم الصورة. حتى متى؟ أليس من الممكن أن تنتظر بشكل انتقائي لإكمال العملية؟ نفس لـ delay 5 في AppleScript. أنا دائمًا أشعر بالقلق من أوقات الانتظار التعسفية هذه ، حيث كانت تجربة سيئة جدًا معهم. 2. في الخطوة 6 التي تتصل بها sync مرتين - لماذا؟
وأضاف المؤلف Konrad Rudolph, مصدر
لا يمكنني إنشاء اختصار لمجلد "/ Applications" باستخدام الخطوات المذكورة أعلاه. أحصل على "ملف فارغ" في مكان اختصار مجلد "/ Application".
وأضاف المؤلف Nandhakumar, مصدر
ماذا تفعل الخطوة 1؟
وأضاف المؤلف Stephen, مصدر
إذا توقف البرنامج النصي حتى انتهاء مهلة في السطر "تحديث دون تسجيل التطبيقات" ، ثم الخطوة 1 لم يتم (أو أصبح التراجع عن). أنا فقط وجدت هذا خارج الطريق الصعب.
وأضاف المؤلف jmaynard, مصدر

لا تذهب هناك. كمطورين ماك على المدى الطويل ، أستطيع أن أؤكد لكم ، لا يوجد حل يعمل بشكل جيد حقا. لقد جربت العديد من الحلول ، لكنها ليست كلها جيدة. أعتقد أن المشكلة هي أن شركة Apple لا تقوم بتوثيق تنسيق بيانات التعريف للبيانات الضرورية.

إليك كيف أفعل ذلك لفترة طويلة ، بنجاح كبير:

  1. Create a new DMG, writeable(!), big enough to hold the expected binary and extra files like readme (sparse might work).

  2. Mount the DMG and give it a layout manually in Finder or with whatever tools suits you for doing that (see FileStorm link at the bottom for a good tool). The background image is usually an image we put into a hidden folder (".something") on the DMG. Put a copy of your app there (any version, even outdated one will do). Copy other files (aliases, readme, etc.) you want there, again, outdated versions will do just fine. Make sure icons have the right sizes and positions (IOW, layout the DMG the way you want it to be).

  3. Unmount the DMG again, all settings should be stored by now.

  4. Write a create DMG script, that works as follows:

    • It copies the DMG, so the original one is never touched again.
    • It mounts the copy.
    • It replaces all files with the most up to date ones (e.g. latest app after build). You can simply use mv or ditto for that on command line. Note, when you replace a file like that, the icon will stay the same, the position will stay the same, everything but the file (or directory) content stays the same (at least with ditto, which we usually use for that task). You can of course also replace the background image with another one (just make sure it has the same dimensions).
    • After replacing the files, make the script unmount the DMG copy again.
    • Finally call hdiutil to convert the writable, to a compressed (and such not writable) DMG.

قد لا يبدو هذا الأسلوب الأمثل ، ولكن ثق بي ، فإنه يعمل بشكل جيد في الممارسة العملية. يمكنك وضع DMG (قالب DMG) الأصلي حتى تحت التحكم في الإصدار (على سبيل المثال SVN) ، لذلك إذا قمت بتغيير/تدميره عن طريق الخطأ ، يمكنك العودة إلى مراجعة حيث كان لا يزال بخير. يمكنك إضافة قالب DMG إلى مشروع Xcode ، مع جميع الملفات الأخرى التي تنتمي إلى DMG (الملف التمهيدي ، ملف URL ، صورة الخلفية) ، وكل ذلك تحت تحكم الإصدار ثم قم بإنشاء هدف (على سبيل المثال ، الهدف الخارجي المسمى "إنشاء DMG") وهناك تشغيل البرنامج النصي DMG أعلاه وإضافة هدفك الرئيسي القديم كهدف تابع. يمكنك الوصول إلى الملفات الموجودة في شجرة Xcode باستخدام $ {SRCROOT} في البرنامج النصي (وهو دائمًا المصدر الجذر لمنتجك) ويمكنك الوصول إلى منتجات الإنشاء باستخدام $ {BUILT_PRODUCTS_DIR} (هو دائمًا الدليل الذي تقوم Xcode بإنشاء نتائج الإنشاء) .

النتيجة: في الواقع يمكن أن ينتج Xcode DMG في نهاية الإنشاء. DMG جاهزة للإصدار. ليس فقط يمكنك إنشاء relase DMG بهذه الطريقة سهلة ، يمكنك القيام بذلك في الواقع في عملية آلية (على خادم مقطوعة الرأس إذا كنت ترغب في ذلك) ، وذلك باستخدام xcodebuild من سطر الأوامر (builds ليلي الآلي على سبيل المثال).

فيما يتعلق بالتخطيط الأولي للقالب ، يعد FileStorm أداة جيدة للقيام بذلك. إنه تجاري ، ولكنه قوي جدا وسهل الاستخدام. الإصدار العادي هو أقل من 20 دولار ، لذلك هو في متناول اليد حقا. ربما يستطيع المرء أتمتة FileStorm لإنشاء DMG (على سبيل المثال عبر AppleScript) ، ولم يحاول ذلك مطلقًا ، ولكن بمجرد العثور على نموذج DMG المثالي ، فمن السهل تحديثه لكل إصدار.

0
وأضاف
لقد قمنا بفصل عملية الحزم عن عملية الإنشاء ، لأنها تتم بواسطة أشخاص مختلفين في أوقات مختلفة. تقوم عملية الحزم بإنشاء مثبتات لـ Windows و Windows CE و Symbian و AIX و Linux و Solaris أيضًا.
وأضاف المؤلف Ludvig A. Norin, مصدر
انها ليست نفس السيناريو. نضيف المنتجات في كثير من الأحيان ، مع إشعار قصير. يعني الحد الأدنى من الروتين اليدوي تشغيل برنامج نصي يعطي للمنتج اسماً وبعض السمات الأخرى. هناك أسباب وراء هذا أيضًا تجعلنا نتخذ قرارًا بعدم استخدام هذا النوع من الحلول.
وأضاف المؤلف Ludvig A. Norin, مصدر
لقد تخلصت بالفعل من فكرة القيام بهذه الطريقة ، لعدة أسباب. في ما يلي اثنتان منها: ستختلف محتويات المثبتات مع المنتج ، ونريد الاعتماد فقط على البرامج المثبتة على أجهزة ونصوص الحزم - روتين مفرد ودقيق لإضافة منتجات جديدة.
وأضاف المؤلف Ludvig A. Norin, مصدر
يبدو وكأنه طريقة قبيحة للقيام بذلك ، ولكن بعد تجربة محاولة اتباع النهج أعلاه ، أنا أعطي هذا دوامة. ولكن بعد استبدال الملفات وفصلها ، لم تتغير الصورة الخاصة بي ولا تحتوي على الملفات الجديدة. ما الذي قد أفعله خطأ؟ hdiutil attach "$ COPY_OF_IMAGE" -readwrite -mountpoint "$ STAGING_DIR" find "$ DEST_KM_APP" -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf cp -fR "$ SOURCE_KM_APP /" "DEST_KM_APP $" $ hdiutil فصل $ STAGING_DIR $ VERBOSITY
وأضاف المؤلف Tom Bogle, مصدر
يبدو أن هذا الأسلوب يعمل: crazyedy.com/tech/؟p=535
وأضاف المؤلف Tom Bogle, مصدر
هذا هو نفس السيناريو الذي لدينا. لدينا أكثر من اثني عشر من المنتجات. كل لديه DMG مختلفة تماما. إنشاء قالب واحد لكل DMG لكل منتج هو مهمة لمرة واحدة فقط ويأخذك بضع دقائق. وماذا تقصد ب "المثبت"؟ PKG/MPKG تثبيت الحزم؟
وأضاف المؤلف Mecki, مصدر
Ivan: أنت على حق في تحديد الرد. عذرا عن هذا الخطأ المطبعي
وأضاف المؤلف Mecki, مصدر
ربما كنت تشير إلى hdiutil ، وليس hdutil.
وأضاف المؤلف Ivan Vučica, مصدر
إذا كنت تريد فتح إطار صورة القرص الجذر عند تحميل الصورة ، أضف التالي إلى الخطوة 2: bless - المجلد "/ مجلد/برنامجي الكبير" .
وأضاف المؤلف bleater, مصدر
بالنسبة لي - فشل الإصدار المكتوب أعلاه في العمل (سوف يرفض باستمرار إنشاء رابط التطبيقات). استخدام هذه الطريقة يعمل بشكل جيد وموثوق به على الرغم من طلب مثل هذه العملية اليدوية لإعداد.
وأضاف المؤلف Chris R, مصدر

هذه الإجابات معقدة للغاية وقد تغير الزمن. الأعمال التالية على 10.9 على ما يرام ، والأذونات صحيحة ويبدو أنها لطيفة.

قم بإنشاء DMG للقراءة فقط من دليل

#!/bin/sh
# create_dmg Frobulator Frobulator.dmg path/to/frobulator/dir [ 'Your Code Sign Identity' ]
set -e

VOLNAME="$1"
DMG="$2"
SRC_DIR="$3"
CODESIGN_IDENTITY="$4"

hdiutil create -srcfolder "$SRC_DIR" \
  -volname "$VOLNAME" \
  -fs HFS+ -fsargs "-c c=64,a=16,e=16" \
  -format UDZO -imagekey zlib-level=9 "$DMG"

if [ -n "$CODESIGN_IDENTITY" ]; then
  codesign -s "$CODESIGN_IDENTITY" -v "$DMG"
fi

إنشاء DMG للقراءة فقط مع رمز (نوع .icns)

#!/bin/sh
# create_dmg_with_icon Frobulator Frobulator.dmg path/to/frobulator/dir path/to/someicon.icns [ 'Your Code Sign Identity' ]
set -e
VOLNAME="$1"
DMG="$2"
SRC_DIR="$3"
ICON_FILE="$4"
CODESIGN_IDENTITY="$5"

TMP_DMG="$(mktemp -u -t XXXXXXX)"
trap 'RESULT=$?; rm -f "$TMP_DMG"; exit $RESULT' INT QUIT TERM EXIT
hdiutil create -srcfolder "$SRC_DIR" -volname "$VOLNAME" -fs HFS+ \
               -fsargs "-c c=64,a=16,e=16" -format UDRW "$TMP_DMG"
TMP_DMG="${TMP_DMG}.dmg" # because OSX appends .dmg
DEVICE="$(hdiutil attach -readwrite -noautoopen "$TMP_DMG" | awk 'NR==1{print$1}')"
VOLUME="$(mount | grep "$DEVICE" | sed 's/^[^ ]* on //;s/ ([^)]*)$//')"
# start of DMG changes
cp "$ICON_FILE" "$VOLUME/.VolumeIcon.icns"
SetFile -c icnC "$VOLUME/.VolumeIcon.icns"
SetFile -a C "$VOLUME"
# end of DMG changes
hdiutil detach "$DEVICE"
hdiutil convert "$TMP_DMG" -format UDZO -imagekey zlib-level=9 -o "$DMG"
if [ -n "$CODESIGN_IDENTITY" ]; then
  codesign -s "$CODESIGN_IDENTITY" -v "$DMG"
fi

إذا كان أي شيء آخر يجب أن يحدث ، فإن أسهل شيء هو إنشاء نسخة مؤقتة من SRC_DIR وتطبيق التغييرات على ذلك قبل إنشاء DMG.

0
وأضاف
لا تضيف هذه الإجابة أي شيء إلى ما تمت كتابته في وقت سابق ، كما أنها لا تجيب عن السؤال الأصلي (لا يتعلق الأمر فقط بوضع رمز في dmg ، أو كيفية توقيعه ؛ السؤال هو حول إضافة الرسومات والرموز الموضوعة برمجيًا إلى أ dmg).
وأضاف المؤلف Ludvig A. Norin, مصدر

وجدت تطبيق mac الرائع هذا لأتمتة العملية - http://www.araelium.com/dmgcanvas/ يجب أن يكون لديك نظرة إذا كنت تقوم بإنشاء dmg المثبت لتطبيق MAC الخاص بك

0
وأضاف
وأضاف المؤلف Prof. Falken, مصدر
هذا البرنامج مجاني: link
وأضاف المؤلف NetworkSys Co. Ltd, مصدر
لاحظ أن هذا ليس برنامجًا مجانيًا ، لذا فهو غير مناسب للعديد من البيئات.
وأضاف المؤلف jmaynard, مصدر

هناك برنامج نصي صغير بعنوان Bash يُسمى create-dmg الذي ينشئ نماذج DMG رائعة مع الخلفيات المخصصة ، وتحديد المواقع المخصصة اسم المجلد.

لقد قمت ببنائها منذ سنوات عديدة للشركة التي ركضت فيها في ذلك الوقت. وهي تنجو من مساهمة الآخرين منذ ذلك الحين ، وتعمل بشكل جيد كما ورد.

هناك أيضًا عقدة - appdmg التي تبدو كجهد أكثر حداثة ونشاطًا يعتمد على Node.js؛ تحقق من ذلك كذلك.

0
وأضاف
هل يمكن أن يكون هذا السؤال: github.com/andreyvit/create-dmg
وأضاف المؤلف David Karlsson, مصدر
إن إنشاء dmg ليس رمز موضع جيدًا. إذا كنت بحاجة إلى هذه الميزة ، فلا تستخدمها.
وأضاف المؤلف laike9m, مصدر
AndreyTarantsov هناك مشكلة بالفعل github.com/andreyvit/create-dmg/issues/18 </أ>.
وأضاف المؤلف laike9m, مصدر
AndreyTarantsov إيه ، إنه مشروعك ، ظننت أنك تدرك كل هذه المشاكل ...
وأضاف المؤلف laike9m, مصدر
@ laike9m هل يمكنك الإبلاغ عن ذلك كمسألة ، إذا كنت تعرف تفاصيل محددة؟ ربما شخص ما سوف إصلاحه.
وأضاف المؤلف Andrey Tarantsov, مصدر
@ laike9m مثيرة للاهتمام ، لم أكن أعرف ذلك. شكر.
وأضاف المؤلف Andrey Tarantsov, مصدر
@ laike9m لقد مضى أكثر من 5 سنوات منذ أن قمت بلمسها. لا أعتقد أن DMGs أفضل طريقة لتوزيع برامج Mac بعد الآن. لذا فهي تنجو من مساهمات الآخرين - على أمل أن يكتشف شخص ما قضية الرموز أيضًا.
وأضاف المؤلف Andrey Tarantsov, مصدر
Zmey حسنا كمستخدم ، أنا أفضل ملفات مضغوطة حتى الآن. نقاط إضافية للنسخ التلقائي إلى /Applications إذا اكتشف التطبيق أنها تعمل من ~/Downloads . راجع أيضًا هذه المقالة القديمة التي كتبها John Gruber .
وأضاف المؤلف Andrey Tarantsov, مصدر
وأضاف المؤلف Andrey Tarantsov, مصدر
هذا الشيء يعمل عظيم!
وأضاف المؤلف vpicaver, مصدر
AndreyTarantsov يساعد كثيرا.
وأضاف المؤلف simon xu, مصدر
رابط البرنامج النصي bash معطوب. يمكنك وضعها في جوهر على github.com؟ شكر
وأضاف المؤلف dquimper, مصدر
ردًا علىAndreyTarantsov انها فكرة مثيرة جدا.
وأضاف المؤلف Zmey, مصدر
AndreyTarantsov ما الطريقة التي تعتقد أنها الأفضل لتوزيع تطبيقات Mac؟
وأضاف المؤلف Zmey, مصدر
AndreyTarantsov العمل الجيد ، شكرا لك!
وأضاف المؤلف finnan, مصدر

ملفات .DS_Store يخزّن إعدادات Windows في Mac. تتضمن إعدادات Windows تخطيط الرموز وخلفية النافذة وحجم النافذة وما إلى ذلك. يلزم وجود ملف .DS_Store في إنشاء الإطار للصور المركبة للمحافظة على ترتيب الملفات وخلفية النوافذ.

بمجرد إنشاء ملف .DS_Store ، يمكنك فقط نسخه إلى برنامج التثبيت الذي قمت بإنشائه (DMG).

0
وأضاف
ولكن أضف أولاً صورة خلفية إلى dmg بتسمية شيء ما مثل .background.png ثم استخدم Cmd-J لإضافة تلك الصورة (!) إلى الخلفية.
وأضاف المؤلف Gijs, مصدر

تطبيقي ، DropDMG ، طريقة سهلة لإنشاء صور القرص مع صور الخلفية وتخطيطات الأيقونات والحجم المخصص الرموز واتفاقيات ترخيص البرامج. يمكن التحكم فيه من نظام بناء عبر أداة سطر الأوامر "dropdmg" أو AppleScript. إذا رغبت في ذلك ، يمكن تخزين ملفات الصور والرخصة RTF تحت نظام التحكم في الإصدار الخاص بك.

0
وأضاف
عظيم ، شكرا! هل من الممكن تغيير حجم بدون صورة خلفية؟
وأضاف المؤلف avi, مصدر
تبدو لطيفة ، ولكن لا يبدو أن لديها خيار لتغيير حجم النافذة.
وأضاف المؤلف avi, مصدر
وأضاف المؤلف Prof. Falken, مصدر
يبدو ذلك مشوقًا للغاية.
وأضاف المؤلف Konrad Rudolph, مصدر
يعمل فريقي هذا بشكل جميل وتلقائي على خادم إنشاء Jenkins CI ، مع استكماله بالخلفية ، والسحب إلى تطبيقات الاسم المستعار. تشغيل ، لا تمشي ، إلى DropDMG لصنع صور القرص.
وأضاف المؤلف Paul Collins, مصدر
يقومavi DropDMG تلقائيًا بحساب النافذة إلى صورة الخلفية التي قمت بتعيينها (أو إدرج في تلك الصورة إذا رغبت في ذلك).
وأضاف المؤلف Michael Tsai, مصدر
avi إذا كنت لا تستخدم صورة خلفية ، فيمكنك تعيين الأبعاد باستخدام "BlankBackgroundSize" تفضيل مقصور على فئة معينة .
وأضاف المؤلف Michael Tsai, مصدر
تطبيق جيد ، سأشتريه بعد انتهاء الفترة التجريبية.
وأضاف المؤلف kilik52, مصدر

أنا أيضا في حاجة إلى استخدام نهج سطر الأوامر للقيام بالتعبئة وإنشاء dmg "برمجيا في برنامج نصي". أفضل إجابة وجدتها حتى الآن هي من إطار عمل إطلاق مشروع Adium (انظر R1). هناك برنامج نصي مخصص (AdiumApplescriptRunner) للسماح لك بتفادي التفاعل OSX WindowsServer GUI. يتطلب منك نهج "osascript applescript.scpt" تسجيل الدخول كمنشيء وتشغيل إنشاء dmg من جلسة سطر الأوامر vt100.

نظام إدارة حزمة OSX غير متقدم للغاية مقارنة مع نظام يونكسن الآخر الذي يمكنه القيام بهذه المهمة بسهولة وبشكل منهجي.

R1: http://hg.adium.im/adium-1.4/file/00d944a3ef16/Release

0
وأضاف

لقد كتبت للتو أداة سطر أوامر جديدة (صديقة) للقيام بذلك. لا تعتمد على Finder/AppleScript ، أو على أي من واجهات برمجة تطبيقات إدارة أسماء المستخدمين (التي تم إيقافها) ، ومن السهل تهيئتها واستخدامها.

على أي حال ، يمكن لأي شخص مهتم العثور عليه على PyPi ؛ تكون المستندات متاحة في قراءة المستندات .

0
وأضاف

تقديم هذا السؤال حتى الآن من خلال تقديم هذه الإجابة.

appdmg is a simple, easy-to-use, open-source command line program that creates dmg-files from a simple json specification. Take a look at the readme at the official website:

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

مثال سريع:

  1. Install appdmg

    npm install -g appdmg
    
  2. Write a json file (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. Run program

    appdmg spec.json test.dmg
    

(إخلاء المسؤولية. أنا منشئ appdmg)

0
وأضاف
Creator: يمكنك الرجاء جعله تقدما مثل هذا العرض واجهة المستخدم الرسومية دون الحاجة إلى سحب وإسقاط؟ s.sudre.free.fr/Software/Packages/about.html
وأضاف المؤلف YumYumYum, مصدر
بسيطة وفعالة. الجانب السلبي الوحيد هو أنه يتطلب أن يتم تركيب npm
وأضاف المؤلف Jack James, مصدر
Joey ، هل يمكنك فتح مشكلة في مستودع Github إذا لم تعمل من أجلك؟
وأضاف المؤلف Linus Unnebäck, مصدر
إذا لم يكن الملف .app موجودًا في نفس المجلد مثل ملف json ، فهذا لا يعمل ، فهذا يعطي خطأ "لم يتم العثور على الملف" عند تحديد مسار نسبي في "path"
وأضاف المؤلف Joey, مصدر

وأخيراً حصلت على هذا العمل في مشروعي الخاص (الذي يحدث في Xcode). ستؤدي إضافة هذه البرامج النصية الثلاثة إلى مرحلة الإنشاء تلقائيًا إلى إنشاء صورة قرص لمنتجك الجميل والأنيق. كل ما عليك فعله هو إنشاء مشروعك وستنتظر DMG في مجلد المنتجات.

Script 1 (إنشاء صورة قرص Temp):

#!/bin/bash
#Create a R/W DMG

dir="$TEMP_FILES_DIR/disk"
dmg="$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.temp.dmg"

rm -rf "$dir"
mkdir "$dir"
cp -R "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app" "$dir"
ln -s "/Applications" "$dir/Applications"
mkdir "$dir/.background"
cp "$PROJECT_DIR/$PROJECT_NAME/some_image.png" "$dir/.background"
rm -f "$dmg"
hdiutil create "$dmg" -srcfolder "$dir" -volname "$PRODUCT_NAME" -format UDRW

#Mount the disk image, and store the device name
hdiutil attach "$dmg" -noverify -noautoopen -readwrite

البرنامج النصي 2 (تعيين خصائص إطار البرنامج النصي):

#!/usr/bin/osascript
#get the dimensions of the main window using a bash script

set {width, height, scale} to words of (do shell script "system_profiler SPDisplaysDataType | awk '/Main Display: Yes/{found=1} /Resolution/{width=$2; height=$4} /Retina/{scale=($2 == \"Yes\" ? 2 : 1)} /^ {8}[^ ]+/{if(found) {exit}; scale=1} END{printf \"%d %d %d\\n\", width, height, scale}'")
set x to ((width/2)/scale)
set y to ((height/2)/scale)

#get the product name using a bash script
set {product_name} to words of (do shell script "printf \"%s\", $PRODUCT_NAME")
set background to alias ("Volumes:"&product_name&":.background:some_image.png")

tell application "Finder"
    tell disk product_name
        open
        set current view of container window to icon view
        set toolbar visible of container window to false
        set statusbar visible of container window to false
        set the bounds of container window to {x, y, (x + 479), (y + 383)}
        set theViewOptions to the icon view options of container window
        set arrangement of theViewOptions to not arranged
        set icon size of theViewOptions to 128
        set background picture of theViewOptions to background
        set position of item (product_name & ".app") of container window to {100, 225}
        set position of item "Applications" of container window to {375, 225}
        update without registering applications
        close
    end tell
end tell

القياس أعلاه للعمل في إطار مشروعي يرجع بشكل خاص إلى حجم صورة الخلفية وأيقونة الخلفية الخاصة بي ؛ قد تحتاج إلى تعديل هذه القيم لمشروعك الخاص.

البرنامج النصي 3 (جعل Final Script Image Script):

#!/bin/bash
dir="$TEMP_FILES_DIR/disk"
cp "$PROJECT_DIR/$PROJECT_NAME/some_other_image.png" "$dir/"

#unmount the temp image file, then convert it to final image file
sync
sync
hdiutil detach /Volumes/$PRODUCT_NAME
rm -f "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.dmg"
hdiutil convert "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.temp.dmg" -format UDZO -imagekey zlib-level=9 -o "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.dmg"
rm -f "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.temp.dmg"

#Change the icon of the image file
sips -i "$dir/some_other_image.png"
DeRez -only icns "$dir/some_other_image.png" > "$dir/tmpicns.rsrc"
Rez -append "$dir/tmpicns.rsrc" -o "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.dmg"
SetFile -a C "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.dmg"

rm -rf "$dir"

تأكد من أن ملفات الصور التي تستخدمها موجودة في الدليل PROJECT_DIR/$ PROJECT_NAME/$!

0
وأضاف
هو خلق صورة قرص فارغ على مشروعي. أي اقتراح.
وأضاف المؤلف ManiaChamp, مصدر
يعمل جزء البرنامج النصي Shell فقط ، ولكن كيف يمكنني إضافة برنامج Apple النصي باستخدام Shell Script في RunScript ضمن Build Phase يظهر خطأ ، كل بيان نصي لبرنامج Apple غير موجود.
وأضاف المؤلف ManiaChamp, مصدر

لإنشاء DMG ذو مظهر جميل ، يمكنك الآن استخدام بعض المصادر المفتوحة المكتوبة بشكل جيد:

0
وأضاف
قررت لتثبيت عقدة appdmg. إنه جيد لما أحتاجه.
وأضاف المؤلف Pamela Cook - LightBe Corp, مصدر
لا يعمل الارتباط إلى dmgbuild.
وأضاف المؤلف Pamela Cook - LightBe Corp, مصدر
@ PamelaCook-LightBeCorp في حال كنت لا تزال مهتمة. تم إصلاح الرابط إلى dmgbuild.
وأضاف المؤلف SubOptimal, مصدر
قد يكون نقلها. يمكنك استخدام create-dmg و node-appdmg. أنا أستخدم create-dmg. إنه جيد.
وأضاف المؤلف Anni S, مصدر