मैं कमांड लाइन उपकरण का उपयोग कर मैक ओएस एक्स के लिए एक अच्छा दिखने वाला डीएमजी कैसे बना सकता हूं?

मुझे मैक एप्लिकेशन के लिए एक अच्छा इंस्टॉलर बनाना होगा। मैं एक पूर्वनिर्धारित आकार, लेआउट और पृष्ठभूमि छवि के साथ एक डिस्क छवि (डीएमजी) होना चाहता हूँ।

मुझे एक मौजूदा स्क्रिप्ट सिस्टम में एकीकृत होने के लिए, इसे एक स्क्रिप्ट में प्रोग्रामेटिक रूप से करने की ज़रूरत है (वास्तव में एक पैक सिस्टम से अधिक, क्योंकि यह केवल इंस्टॉलर बनाते हैं। बिल्ड अलग से किए जाते हैं)।

मेरे पास पहले से ही "hdiutil" का उपयोग करके डीएमजी सृजन किया गया है, जो मुझे अभी तक नहीं मिला है, यह है कि आइकन लेआउट कैसे बनाएं और पृष्ठभूमि बिटमैप निर्दिष्ट करें।

0
जोड़ा लेखक Prof. Falken, स्रोत
अलग पूछने के लिए यह कुछ नहीं है?
जोड़ा लेखक 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

अब पढ़ें/लिखें डीएमजी बनाएँ

/*to set custom icon attribute*/
SetFile -a C /Volumes/dmgName
0
जोड़ा
"आपका पथ" डीएमजी नाम है। (/ खंड/dmgName)
जोड़ा लेखक Parag Bafna, स्रोत
आपको आईसीएनएस फाइल कॉपी करनी चाहिए। सीपी "/Volumes/customIcon.icns" "/Volumes/dmgName/.VolumeIcon.icns"
जोड़ा लेखक Parag Bafna, स्रोत
क्या आप समझा सकते हैं कि "आपका पथ" का अर्थ क्या है? क्या मैं डिस्क पर किसी भी आइकन फ़ाइल का उपयोग कर सकता हूं, और SetFile इसे कॉपी करेगा, या मुझे .dmg के अंदर मौजूद फ़ाइल का उपयोग करने की आवश्यकता होगी? मेरे पास केवल एक मैक है, इसलिए यह जांचना मुश्किल है कि सामान अन्य मशीनों पर काम करेगा या नहीं।
जोड़ा लेखक Milan Babuškov, स्रोत

आप में से उन लोगों के लिए जो इस विषय में रुचि रखते हैं, मुझे यह उल्लेख करना चाहिए कि मैं डीएमजी कैसे बना सकता हूं:

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 
    

हिम तेंदुए पर, उपर्युक्त सेबस्क्रिप्ट आइकन स्थिति को सही ढंग से सेट नहीं करेगा - ऐसा लगता है कि यह एक हिम तेंदुए की बग है। एक वर्कअराउंड आइकन को सेट करने के बाद बस बंद/खुला कॉल करना है, यानी .:

..
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
जोड़ा
मुझे लगता है कि मुझे थोड़ी गड़बड़ी मिली - ऐप्पलस्क्रिप्ट में एक निकास है, जो कि chmod चलाने की कोशिश करने से पहले किया जाता है। chmod विफल हो जाएगा क्योंकि डिस्क अब बाहर निकाला गया है।
जोड़ा लेखक Trejkaz, स्रोत
यह सेबस्क्रिप्ट को माउस और कीबोर्ड इनपुट और अन्य चीजों का एक गुच्छा अनुकरण करने की अनुमति देता है।
जोड़ा लेखक Ludvig A. Norin, स्रोत
स्रोत फ़ोल्डर पर लिखने की अनुमति को हटाने के लिए hdiutil की पूर्व रिलीज़ में से एक में आवश्यक था। यह इस आलेख में माना जाता है कि आदेशों को रूट के रूप में निष्पादित किया जाता है, जो काम करने के लिए अन्य सभी भागों के लिए आवश्यक हो सकता है या नहीं भी हो सकता है। Hdiutil का वर्तमान संस्करण स्रोत फ़ोल्डर पर लेखन विशेषाधिकारों की परवाह नहीं करता है।
जोड़ा लेखक Ludvig A. Norin, स्रोत
मुझे 'एप्लिकेशन पंजीकरण के बिना अपडेट' के पूरा होने के लिए दृढ़ता से प्रतीक्षा करने का कोई तरीका नहीं मिला है। मुझे यकीन नहीं है कि "hdiutil संलग्न" के बाद नींद की आवश्यकता है, आपको दस्तावेज (मैन hdiutil) की जांच करनी होगी। सिंक को केवल एक बार बुलाए जाने की आवश्यकता होनी चाहिए, अच्छे पुराने सूर्योदय दिनों से मैं इसे पुरानी आदत से दो बार करता हूं।
जोड़ा लेखक Ludvig A. Norin, स्रोत
github.com/LinusU/node-appdmg <- यह सुझाव उत्तर दें!
जोड़ा लेखक Prof. Falken, स्रोत
chmod पूरी तरह से व्यर्थ है क्योंकि इसे सूडो की आवश्यकता होगी और कुछ भी पूरा नहीं करेगा। परिणामी डीएमजी पूरी तरह से केवल पढ़ने के लिए है।
जोड़ा लेखक Barry, स्रोत
अति उत्कृष्ट। इसके बारे में दो प्रश्न: 1. छवि को बढ़ाने के बाद आप नींद की अनुशंसा करते हैं। कितना लंबा? क्या प्रक्रिया के पूरा होने के लिए निश्चित रूप से प्रतीक्षा करना संभव नहीं है? आपके ऐप्पलस्क्रिप्ट में देरी 5 के लिए वही। मैं हमेशा इस तरह के मनमानी प्रतीक्षा समय से सावधान हूं, उनके साथ कुछ बहुत बुरा अनुभव था। 2. अपने चरण 6 में आप सिंक दो बार कॉल करते हैं - क्यों?
जोड़ा लेखक Konrad Rudolph, स्रोत
मैं उपरोक्त चरणों का उपयोग कर "/ अनुप्रयोग" फ़ोल्डर के लिए शॉर्टकट बनाने में सक्षम नहीं हूं। मुझे "एप्लिकेशन" फ़ोल्डर शॉर्टकट के स्थान पर "खाली फ़ाइल" मिल रही है।
जोड़ा लेखक Nandhakumar, स्रोत
चरण 1 क्या करता है?
जोड़ा लेखक Stephen, स्रोत
यदि स्क्रिप्ट तब तक "एप्लिकेशन पंजीकरण किए बिना अपडेट" लाइन पर लटकती है, तो चरण 1 नहीं किया गया है (या पूर्ववत हो गया है)। मैंने इसे मुश्किल तरीके से पाया।
जोड़ा लेखक jmaynard, स्रोत

वहां मत जाओ एक लंबी अवधि के मैक डेवलपर के रूप में, मैं आपको आश्वस्त कर सकता हूं, कोई समाधान वास्तव में अच्छी तरह से काम नहीं कर रहा है। मैंने इतने सारे समाधान की कोशिश की, लेकिन वे सभी बहुत अच्छे नहीं हैं। मुझे लगता है कि समस्या यह है कि ऐप्पल वास्तव में आवश्यक डेटा के लिए मेटा डेटा प्रारूप दस्तावेज नहीं करता है।

यहां बताया गया है कि मैं इसे लंबे समय से कैसे कर रहा हूं, बहुत सफलतापूर्वक:

  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.

यह विधि इष्टतम ध्वनि नहीं दे सकती है, लेकिन मेरा विश्वास करो, यह अभ्यास में वास्तव में अच्छी तरह से काम करता है। आप मूल नियंत्रण (उदा। एसवीएन) के तहत भी मूल डीएमजी (डीएमजी टेम्पलेट) डाल सकते हैं, इसलिए यदि आपने कभी गलती से इसे बदल दिया/नष्ट कर दिया है, तो आप केवल उस संशोधन में वापस जा सकते हैं जहां यह अभी भी ठीक है। आप डीएमजी टेम्पलेट को अपने एक्सकोड प्रोजेक्ट में जोड़ सकते हैं, साथ ही डीएमजी (रीडेमे, यूआरएल फाइल, पृष्ठभूमि इमेज) से संबंधित सभी अन्य फाइलों के साथ, संस्करण नियंत्रण के तहत सभी और फिर एक लक्ष्य बनाएं (जैसे "डीएमजी बनाएं" नामक बाहरी लक्ष्य) और वहां ऊपर की डीएमजी लिपि चलाती है और अपने पुराने मुख्य लक्ष्य को निर्भर लक्ष्य के रूप में जोड़ती है। आप स्क्रिप्ट में $ {SRCROOT} का उपयोग कर एक्सकोड पेड़ में फ़ाइलों तक पहुंच सकते हैं (हमेशा आपके उत्पाद का स्रोत रूट है) और आप $ {BUILT_PRODUCTS_DIR} का उपयोग करके बिल्ड उत्पादों तक पहुंच सकते हैं (हमेशा वह निर्देशिका है जहां एक्सकोड बिल्ड परिणाम बनाता है) ।

परिणाम: वास्तव में एक्सकोड निर्माण के अंत में डीएमजी का उत्पादन कर सकता है। एक डीएमजी जो रिलीज करने के लिए तैयार है। न केवल आप एक तरह से डीएमजी को बहुत आसान बना सकते हैं, आप वास्तव में कमांड लाइन से xcodebuild का उपयोग कर स्वचालित प्रक्रिया (एक हेडलेस सर्वर पर यदि आप चाहें) में ऐसा कर सकते हैं (उदाहरण के लिए स्वचालित रात का निर्माण)।

टेम्पलेट के प्रारंभिक लेआउट के बारे में, FileStorm ऐसा करने के लिए एक अच्छा टूल है। यह वाणिज्यिक है, लेकिन बहुत शक्तिशाली और उपयोग करने में आसान है। सामान्य संस्करण $ 20 से कम है, इसलिए यह वास्तव में सस्ती है। हो सकता है कि कोई डीएमजी (उदाहरण के लिए ऐप्पलस्क्रिप्ट के माध्यम से) बनाने के लिए फ़ाइलस्टॉर्म को स्वचालित कर सके, कभी कोशिश नहीं की, लेकिन एक बार जब आपको सही टेम्पलेट डीएमजी मिल जाए, तो इसे प्रत्येक रिलीज के लिए अपडेट करना वास्तव में आसान है।

0
जोड़ा
हमने पैक प्रक्रिया को बिल्ड प्रक्रिया से अलग कर दिया है, क्योंकि यह अलग-अलग लोगों द्वारा अलग-अलग समय पर किया जाता है। पैक प्रक्रिया विंडोज, विंडोज सीई, सिम्बियन, एआईक्स, लिनक्स और सोलारिस के लिए इंस्टॉलर बनाती है।
जोड़ा लेखक Ludvig A. Norin, स्रोत
यह वही परिदृश्य नहीं है। हम छोटी सूचना के साथ अक्सर उत्पादों को जोड़ते हैं। न्यूनतम मैन्युअल रूटीन का अर्थ है एक उत्पाद को एक नाम और कुछ अन्य विशेषताओं को एक स्क्रिप्ट चला रहा है। इससे परे कारण भी हैं जिससे हमें इस तरह के समाधान का उपयोग न करने का निर्णय लेना पड़ा।
जोड़ा लेखक Ludvig A. Norin, स्रोत
मैंने कई कारणों से इसे इस तरह से करने का विचार छोड़ दिया है। यहां उनमें से दो हैं: इंस्टॉलर की सामग्री उत्पाद के साथ अलग-अलग होगी, और हम केवल पैक मशीनों और स्क्रिप्ट्स पर स्थापित सॉफ़्टवेयर पर भरोसा करना चाहते हैं - नए उत्पादों को जोड़ने के लिए एकल, न्यूनतम, मैन्युअल दिनचर्या।
जोड़ा लेखक Ludvig A. Norin, स्रोत
ऐसा करने के लिए एक बदसूरत तरीका लगता है, लेकिन उपर्युक्त दृष्टिकोणों की कोशिश करने के बाद, मैं इसे एक भंवर दे रहा हूं। लेकिन जब मैं फ़ाइलों को प्रतिस्थापित करता हूं और अलग करता हूं, तो मेरी छवि अपरिवर्तित होती है और इसमें नई फ़ाइलें नहीं होती हैं। मैं गलत क्या कर सकता हूँ? hdiutil "$ COPY_OF_IMAGE" संलग्न करें -readwrite -mountpoint "$ STAGING_DIR" ढूंढें "$ DEST_KM_APP" -मिन्दपथ 1 -मैक्सडेप 1 -प्रिंट 0 | 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, स्रोत
यह वही परिदृश्य है जैसा हमारे पास है। हमारे पास एक दर्जन से अधिक उत्पाद हैं; प्रत्येक में एक पूरी तरह से अलग डीएमजी है। एक टेम्पलेट डीएमजी प्रति उत्पाद बनाना एक बार केवल कार्य है और आपको कुछ मिनट लेता है। और "इंस्टॉलर" से आपका क्या मतलब है? पीकेजी/एमपीकेजी पैकेज स्थापित करें?
जोड़ा लेखक Mecki, स्रोत
@Ivan: आप सही हैं - फिक्सिंग जवाब। उस टाइपो के बारे में खेद है
जोड़ा लेखक Mecki, स्रोत
आप शायद hudutil करने के लिए refering कर रहे हैं, hdutil नहीं।
जोड़ा लेखक Ivan Vučica, स्रोत
यदि आप छवि छवि को घुमाने पर डिस्क छवि रूट विंडो खोलना चाहते हैं, तो चरण 2 में निम्न जोड़ें: आशीर्वाद --openfolder "/ वॉल्यूम्स/मेरा महान सॉफ्टवेयर"
जोड़ा लेखक bleater, स्रोत
मेरे लिए - उपरोक्त लिखित संस्करण काम करने में असफल रहा (यह लगातार अनुप्रयोग लिंक बनाने से इंकार कर देगा)। ऐसी विधि का उपयोग करने के लिए ऐसी मैन्युअल प्रक्रिया की आवश्यकता के बावजूद अच्छी तरह से और भरोसेमंद काम किया।
जोड़ा लेखक Chris R, स्रोत

ये उत्तर बहुत जटिल हैं और समय बदल गए हैं। निम्नलिखित काम 10.9 पर ठीक है, अनुमतियां सही हैं और यह अच्छी लगती है।

एक निर्देशिका से केवल पढ़ने के लिए डीएमजी बनाएँ

#!/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

एक आइकन (.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

अगर कुछ और होने की ज़रूरत है, तो सबसे आसान बात यह है कि एसआरसी_DIR की एक अस्थायी प्रतिलिपि बनाना और डीएमजी बनाने से पहले इसमें परिवर्तन लागू करना है।

0
जोड़ा
यह उत्तर पहले जो लिखा गया है, उसमें कुछ भी नहीं जोड़ रहा है, और यह मूल प्रश्न का भी उत्तर नहीं देता है (यह सिर्फ डीएमजी में आइकन डालने या इसे कैसे हस्ताक्षर करने के बारे में नहीं है; प्रश्न ग्राफिक्स और प्रोग्रामिंग आइकन को प्रोग्रामेटिक रूप से जोड़ने के बारे में है एक डीएमजी)।
जोड़ा लेखक Ludvig A. Norin, स्रोत

मुझे प्रक्रिया को स्वचालित करने के लिए यह शानदार मैक ऐप मिला - http://www.araelium.com/dmgcanvas/ यदि आप अपने मैक ऐप के लिए डीएमजी इंस्टॉलर बना रहे हैं तो आपको एक नज़र रखना चाहिए

0
जोड़ा
जोड़ा लेखक Prof. Falken, स्रोत
यह एक मुफ़्त है: लिंक
जोड़ा लेखक NetworkSys Co. Ltd, स्रोत
ध्यान दें कि यह एक नि: शुल्क कार्यक्रम नहीं है, इसलिए यह कई वातावरणों के लिए उपयुक्त नहीं है।
जोड़ा लेखक jmaynard, स्रोत

create-dmg नामक एक छोटी बैश स्क्रिप्ट है जो कस्टम पृष्ठभूमि, कस्टम आइकन पोजीशनिंग के साथ फैंसी डीएमजी बनाता है और मात्रा का नाम

मैंने कंपनी के लिए कई साल पहले इसे बनाया है कि मैं उस समय भाग गया था; तब से यह अन्य लोगों के योगदान पर जीवित रहता है, और कथित रूप से अच्छी तरह से काम करता है।

यहां नोड-एपीडीएमजी भी है जो Node.js पर आधारित एक अधिक आधुनिक और सक्रिय प्रयास की तरह दिखता है; इसे भी देखें।

0
जोड़ा
क्या यह यह हो सकता है: github.com/andreyvit/create-dmg
जोड़ा लेखक David Karlsson, स्रोत
create-dmg NOT स्थिति आइकन अच्छी तरह से करता है। अगर आपको इस सुविधा की ज़रूरत है, तो इसका इस्तेमाल न करें।
जोड़ा लेखक laike9m, स्रोत
@AndreyTarantsov पहले से ही एक मुद्दा है github.com/andreyvit/create-dmg/issues/18
जोड़ा लेखक laike9m, स्रोत
@AndreyTarantsov एह, यह आपकी परियोजना है, मैंने सोचा कि आप उन सभी मुद्दों से अवगत हैं ...
जोड़ा लेखक laike9m, स्रोत
@ laike9m क्या आप इसे किसी मुद्दे के रूप में रिपोर्ट कर सकते हैं, यदि आप विशिष्टताओं को जानते हैं? शायद कोई इसे ठीक करेगा।
जोड़ा लेखक Andrey Tarantsov, स्रोत
@ laike9m दिलचस्प, उसे नहीं पता था। धन्यवाद।
जोड़ा लेखक Andrey Tarantsov, स्रोत
@ laike9m यह आखिरी बार छूने के बाद से 5 साल से अधिक रहा है। मैं वास्तव में डीएमजी को मैक सॉफ़्टवेयर वितरित करने का सबसे अच्छा तरीका नहीं मानता। तो यह दूसरों के योगदान पर जीवित रहता है - उम्मीद है कि कोई भी आइकन इश्यू को समझ लेगा।
जोड़ा लेखक Andrey Tarantsov, स्रोत
@Zmey अच्छी तरह से उपयोगकर्ता के रूप में, मैं दूर तक ज़िप फ़ाइलों को पसंद करते हैं। यदि ऐप का पता लगाता है कि यह ~/डाउनलोड से चल रहा है, तो ऑटो-कॉपी करने के लिए बोनस पॉइंट /एप्लिकेशन पर जाएं। यह भी देखें जॉन ग्रबर द्वारा यह पुराना आलेख
जोड़ा लेखक Andrey Tarantsov, स्रोत
जोड़ा लेखक Andrey Tarantsov, स्रोत
यह बात बहुत अच्छी काम करती है!
जोड़ा लेखक vpicaver, स्रोत
@AndreyTarantsov बहुत मदद करता है।
जोड़ा लेखक simon xu, स्रोत
आपकी बैश स्क्रिप्ट का लिंक टूटा हुआ है। क्या आप इसे github.com पर एक गिस्ट में डाल सकते हैं? धन्यवाद
जोड़ा लेखक dquimper, स्रोत
@AndreyTarantsov धन्यवाद! यह बहुत ही रोचक विचार है।
जोड़ा लेखक Zmey, स्रोत
@AndreyTarantsov मैक ऐप्स वितरण के लिए सबसे अच्छा तरीका आपको लगता है?
जोड़ा लेखक Zmey, स्रोत
@AndreyTarantsov अच्छा काम, धन्यवाद!
जोड़ा लेखक finnan, स्रोत

.DS_Store फ़ाइलें मैक में विंडोज सेटिंग्स स्टोर करती हैं। विंडोज सेटिंग्स में आइकन लेआउट, विंडो पृष्ठभूमि, खिड़की का आकार इत्यादि शामिल हैं। फ़ाइलों और खिड़कियों की पृष्ठभूमि की व्यवस्था को संरक्षित रखने के लिए घुड़सवार छवियों के लिए विंडो बनाने में .DS_Store फ़ाइल की आवश्यकता है।

एक बार आपके पास .DS_Store फ़ाइल बनाई गई है, तो आप इसे अपने बनाए गए इंस्टॉलर (डीएमजी) पर कॉपी कर सकते हैं।

0
जोड़ा
लेकिन सबसे पहले dmg पर पृष्ठभूमि छवि को .background.png जैसे नामकरण करके और फिर उस छवि को उस (!) छवि को जोड़ने के लिए Cmd-J का उपयोग करके जोड़ें।
जोड़ा लेखक Gijs, स्रोत

मेरा ऐप, DropDMG , पृष्ठभूमि चित्रों, आइकन लेआउट, कस्टम वॉल्यूम के साथ डिस्क छवियों को बनाने का एक आसान तरीका है प्रतीक, और सॉफ्टवेयर लाइसेंस समझौते। इसे "ड्रॉपडएमजी" कमांड लाइन टूल या ऐप्पलस्क्रिप्ट के माध्यम से बिल्ड सिस्टम से नियंत्रित किया जा सकता है। अगर वांछित है, तो तस्वीर और लाइसेंस आरटीएफ फाइलों को आपके संस्करण नियंत्रण प्रणाली के तहत संग्रहीत किया जा सकता है।

0
जोड़ा
बहुत धन्यवाद! क्या पृष्ठभूमि छवि के बिना आकार बदलना संभव है?
जोड़ा लेखक avi, स्रोत
अच्छा लग रहा है, लेकिन ऐसा लगता है कि खिड़की का आकार बदलने का विकल्प नहीं है।
जोड़ा लेखक avi, स्रोत
जोड़ा लेखक Prof. Falken, स्रोत
यह बहुत दिलचस्प लग रहा है।
जोड़ा लेखक Konrad Rudolph, स्रोत
मेरी टीम ने जेनकींस सीआई बिल्ड सर्वर पर खूबसूरती से और स्वचालित रूप से काम कर रहा है, पृष्ठभूमि के साथ पूरा किया है, एप्लीकेशन उपनामों पर खींचें। डिस्क छवियों को बनाने के लिए ड्रॉप डीएमजी पर चलें, चलें मत।
जोड़ा लेखक Paul Collins, स्रोत
@avi DropDMG स्वचालित रूप से विंडो को आपके द्वारा सेट की गई पृष्ठभूमि चित्र में आकार देता है (या इन्सेट )।
जोड़ा लेखक Michael Tsai, स्रोत
@avi यदि आप पृष्ठभूमि चित्र का उपयोग नहीं कर रहे हैं, तो आप "ब्लैकबैकग्राउंड आकार" गूढ़ वरीयता
जोड़ा लेखक Michael Tsai, स्रोत
अच्छा ऐप, मैं अपने परीक्षण की समाप्ति के बाद इसे खरीदना चाहता हूं।
जोड़ा लेखक kilik52, स्रोत

मुझे पैकेजिंग और डीएमजी सृजन "प्रोग्रामेटिक रूप से एक स्क्रिप्ट में" करने के लिए कमांड लाइन दृष्टिकोण का उपयोग करने की आवश्यकता है। अब तक का सबसे अच्छा जवाब एडियम प्रोजेक्ट 'रिलीज बिल्डिंग फ्रेमवर्क (आर 1 देखें) से है। ओएसएक्स विंडोज सर्वर जीयूआई इंटरैक्शन से बचने के लिए एक कस्टम स्क्रिप्ट (AdiumApplescriptRunner) है। "osascript applescript.scpt" दृष्टिकोण के लिए आपको निर्माता के रूप में लॉगिन करने और कमांड लाइन vt100 सत्र से dmg निर्माण चलाने की आवश्यकता होती है।

ओएसएक्स पैकेज प्रबंधन प्रणाली अन्य यूनिक्सन की तुलना में इतनी उन्नत नहीं है जो इस कार्य को आसानी से और व्यवस्थित रूप से कर सकती है।

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

0
जोड़ा

मैंने ऐसा करने के लिए अभी एक नई (दोस्ताना) कमांड लाइन उपयोगिता लिखी है। यह फाइंडर/ऐप्पलस्क्रिप्ट पर निर्भर नहीं है, या किसी भी (बहिष्कृत) उपनाम प्रबंधक API पर निर्भर नहीं है, और इसे कॉन्फ़िगर करना और उपयोग करना आसान है।

वैसे भी, रुचि रखने वाला कोई भी व्यक्ति इसे पीपीपीआई पर ढूंढ सकता है ; प्रलेखन पढ़ें डॉक्स पर उपलब्ध है।

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
    

(अस्वीकरण। मैं एपीडीएमजी का निर्माता हूं)

0
जोड़ा
@ निर्माता: क्या आप इसे खींचने और छोड़ने के बिना इसे एक प्रस्ताव जीयूआई की तरह अग्रिम कर सकते हैं? s.sudre.free.fr/Software/Packages/about.html
जोड़ा लेखक YumYumYum, स्रोत
सरल और प्रभावी। केवल नकारात्मक पक्ष यह है कि इसे स्थापित करने के लिए एनपीएम की आवश्यकता है
जोड़ा लेखक Jack James, स्रोत
@ जॉय, क्या आप गिथब रिपोजिटरी पर कोई मुद्दा खोल सकते हैं यदि यह आपके लिए काम नहीं करता है?
जोड़ा लेखक Linus Unnebäck, स्रोत
यदि .app फ़ाइल जेसन फ़ाइल के समान फ़ोल्डर में नहीं है, तो यह काम नहीं करता है, यह "पथ नहीं मिला" त्रुटि देता है जब आप "पथ" में एक सापेक्ष पथ निर्दिष्ट करते हैं
जोड़ा लेखक Joey, स्रोत

आखिर में यह मेरे अपने प्रोजेक्ट में काम कर रहा है (जो एक्सकोड में होता है)। अपने निर्माण चरण में इन 3 स्क्रिप्ट को जोड़ना स्वचालित रूप से आपके उत्पाद के लिए एक डिस्क छवि बना देगा जो अच्छा और साफ है। आपको बस अपनी परियोजना बनाना है और डीएमजी आपके उत्पादों के फ़ोल्डर में इंतजार कर रहा है।

स्क्रिप्ट 1 (टेम्प डिस्क डिस्क बनाएँ):

#!/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 (अंतिम डिस्क छवि स्क्रिप्ट बनाएं):

#!/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, स्रोत
शेल स्क्रिप्ट भाग केवल काम करता है, लेकिन मैं बिल्ड फेज के तहत रनस्क्रिप्ट में शैल स्क्रिप्ट के साथ ऐप्पल स्क्रिप्ट कैसे जोड़ सकता हूं, यह त्रुटि दिखा रहा है, प्रत्येक सेब स्क्रिप्ट स्टेटमेंट प्रतीक नहीं मिला है।
जोड़ा लेखक ManiaChamp, स्रोत

एक अच्छी लग रही डीएमजी बनाने के लिए, अब आप कुछ अच्छी तरह से लिखित खुले स्रोतों का उपयोग कर सकते हैं:

0
जोड़ा
मैंने नोड-एपीडीएमजी स्थापित करने का फैसला किया। मुझे जो चाहिए वह अच्छा है।
जोड़ा लेखक Pamela Cook - LightBe Corp, स्रोत
डीएमजीबिल्ड का लिंक काम नहीं करता है।
जोड़ा लेखक Pamela Cook - LightBe Corp, स्रोत
@ पामेलाकूक-लाइटबेकॉर्प यदि आप अभी भी रुचि रखते हैं। डीएमजीबिल्ड का लिंक तय कर दिया गया है।
जोड़ा लेखक SubOptimal, स्रोत
हो सकता है कि वे इसे ले जाएं। आप create-dmg और node-appdmg का उपयोग कर सकते हैं। मैं create-dmg का उपयोग कर रहा हूँ। यह अच्छा है।
जोड़ा लेखक Anni S, स्रोत