macos সফটওয কমান্ড-লাইন সরঞ্জামগুলি ব্যবহার করে ম্যাক ওএস এক্স এর জন্য আমি কীভাবে একটি সুন্দর চেহারা DMG তৈরি করব?




সিস্টেম কাকে বলে (12)

আমি একটি ম্যাক অ্যাপ্লিকেশন জন্য একটি চমৎকার ইনস্টলার তৈরি করতে হবে। আমি এটি একটি পূর্বনির্ধারিত আকার, বিন্যাস এবং ব্যাকগ্রাউন্ড ইমেজ সঙ্গে একটি ডিস্ক ইমেজ (ডিএমজি) হতে চান।

আমি একটি স্ক্রিপ্টে প্রোগ্রামটিগতভাবে এটি করতে হবে, একটি বিদ্যমান বিল্ড সিস্টেমে একত্রিত করা হবে (এটি একটি প্যাক সিস্টেমের চেয়ে বেশি, যেহেতু এটি শুধুমাত্র ইনস্টলার তৈরি করে। বিল্ডগুলি পৃথকভাবে করা হয়)।

আমি ইতিমধ্যে "hdiutil" ব্যবহার করে তৈরি ডিএমজি তৈরি করেছি, যা এখনও আমি খুঁজে পাই নি, আইকন লেআউট কিভাবে এবং কিভাবে ব্যাকগ্রাউন্ড বিটম্যাপ নির্দিষ্ট করতে হয়।


এই উত্তরগুলি খুব জটিল এবং বার পরিবর্তিত হয়েছে। নিম্নলিখিত 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

একটি আইকন (.icns টাইপ) সহ শুধুমাত্র-পাঠযোগ্য DMG তৈরি করুন

#!/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 এর একটি অস্থায়ী অনুলিপি তৈরি করা এবং একটি DMG তৈরি করার আগে এটিতে পরিবর্তনগুলি প্রয়োগ করা।


আমি শুধু এটি করার জন্য একটি নতুন (বন্ধুত্বপূর্ণ) কমান্ড লাইন ইউটিলিটি লিখেছি। এটি ফাইন্ডার / অ্যাপলস্ক্রিপ্ট, বা কোনও (অব্যবহৃত) উপাধি পরিচালক API এ নির্ভর করে না এবং এটি কনফিগার এবং ব্যবহার করা সহজ।

যাইহোক, আগ্রহী যে কেউ dmgbuild পারেন; ডকুমেন্টেশন ডক্স পড়ুন উপলব্ধ


আমার অ্যাপ্লিকেশন, DropDMG , ব্যাকগ্রাউন্ড ছবি, আইকন লেআউট, কাস্টম ভলিউম আইকন এবং সফ্টওয়্যার লাইসেন্স চুক্তির সাথে ডিস্ক চিত্রগুলি তৈরি করার একটি সহজ উপায়। এটি "dropdmg" কমান্ড-লাইন সরঞ্জাম বা অ্যাপলস্ক্রিপ্টের মাধ্যমে একটি বিল্ড সিস্টেম থেকে নিয়ন্ত্রণ করা যেতে পারে। যদি পছন্দসই, ছবি এবং লাইসেন্স RTF ফাইল আপনার সংস্করণ নিয়ন্ত্রণ সিস্টেমের অধীনে সংরক্ষণ করা যেতে পারে।


আমি এই দুর্দান্ত ম্যাক অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে প্রক্রিয়াটি খুঁজে পেয়েছি - http://www.araelium.com/dmgcanvas/ আপনার ম্যাক অ্যাপ্লিকেশনের জন্য আপনি যদি ডিএমজি ইনস্টলার তৈরি করেন তবে আপনাকে অবশ্যই দেখতে হবে


.DS_Store ফাইলগুলি ম্যাকের উইন্ডোজ সেটিংস সঞ্চয় করে। উইন্ডোজ সেটিংস আইকন লেআউট, উইন্ডো পটভূমি, উইন্ডো আকার, ইত্যাদি অন্তর্ভুক্ত। মাউন্ট করা চিত্রগুলির উইন্ডো এবং উইন্ডোজ পটভূমি সংরক্ষণের জন্য উইন্ডো তৈরিতে .DS_Store ফাইলটি প্রয়োজন।

একবার আপনার .DS_Store ফাইল তৈরি হয়ে গেলে, আপনি কেবল এটি আপনার তৈরি ইনস্টলার (ডিএমজি) -এ অনুলিপি করতে পারেন।


সেখানে যান না। একটি দীর্ঘমেয়াদী ম্যাক ডেভেলপার হিসাবে, আমি আপনাকে আশ্বস্ত করতে পারি, কোন সমাধান সত্যিই ভাল কাজ করছে। আমি অনেক সমাধান চেষ্টা করেছি, কিন্তু তারা সব খুব ভাল না। আমি সমস্যা যে অ্যাপল সত্যিই তথ্য প্রয়োজনীয় মেটা ডাটা বিন্যাস নথি না।

এখানে আমি কতদিন ধরে এটি করছি, খুব সফলভাবে:

  1. একটি নতুন DMG তৈরি করুন, লেখার যোগ্য (!), প্রত্যাশিত বাইনারি এবং অতিরিক্ত ফাইলগুলি যেমন রিডমি (স্পারস কাজ করতে পারে) ধরে রাখতে যথেষ্ট।

  2. ডিএমজিটি মাউন্ট করুন এবং ফাইন্ডারে এটি নিজেও একটি লেআউট দিন অথবা এটির জন্য যে কোনও সরঞ্জামগুলি আপনাকে উপযুক্ত করে তুলবে (একটি ভাল সরঞ্জামের জন্য নীচের দিকে ফাইল স্টরম লিঙ্কটি দেখুন)। ব্যাকগ্রাউন্ড চিত্রটি সাধারণত একটি চিত্র যা আমরা একটি লুকানো ফোল্ডারে ("। Something") DMG এ রাখি। সেখানে আপনার অ্যাপ্লিকেশন একটি কপি রাখুন (কোন সংস্করণ, এমনকি একটি পুরানো হবে)। অন্যান্য ফাইলগুলি অনুলিপি করুন (উপনাম, পাঠ্য, ইত্যাদি) আপনি সেখানে চান, আবার, পুরনো সংস্করণগুলি ঠিক আছে। নিশ্চিত করুন যে আইকনগুলির সঠিক মাপ এবং অবস্থান রয়েছে (IOW, এটি DMG লেআউট যা আপনি এটি করতে চান)।

  3. আবার DMM আনমাউন্ট করুন, সব সেটিংস এখন দ্বারা সংরক্ষণ করা উচিত।

  4. একটি তৈরি DMG স্ক্রিপ্ট লিখুন, যা নিম্নরূপঃ

    • এটি DMG কপি করে, তাই মূলটি আবার স্পর্শ করে না।
    • এটা কপি mounts।
    • এটি সর্বাধিক আপ টু ডেটগুলির সাথে সমস্ত ফাইল প্রতিস্থাপন করে (যেমন বিল্ডের পরে সর্বশেষ অ্যাপ্লিকেশন)। কমান্ড লাইনের জন্য আপনি কেবল এমভি বা ডাইটো ব্যবহার করতে পারেন। দ্রষ্টব্য, যখন আপনি কোনও ফাইলটি প্রতিস্থাপন করেন, তখন আইকন একই থাকবে, অবস্থানটি একই থাকবে, তবে ফাইলটি (বা ডিরেক্টরি) সামগ্রীর সবকিছু একই থাকবে (অন্তত ডিত্তোর সাথে, যা আমরা সাধারণত সেই টাস্কের জন্য ব্যবহার করি) । আপনি অবশ্যই ব্যাকগ্রাউন্ড ইমেজটিকে অন্য একটির সাথে প্রতিস্থাপন করতে পারেন (শুধুমাত্র এটি একই মাত্রা রয়েছে কিনা তা নিশ্চিত করুন)।
    • ফাইলগুলি প্রতিস্থাপন করার পরে, স্ক্রিপ্টকে আবার DMG অনুলিপি আনমাউন্ট করুন।
    • অবশেষে wrigitable, একটি সংকুচিত (এবং যেমন লেখার যোগ্য) DMG রূপান্তর hdiutil কল।

এই পদ্ধতিটি অনুকূল শব্দ হতে পারে না, কিন্তু আমাকে বিশ্বাস করুন, এটি অনুশীলনতে সত্যিই ভাল কাজ করে। আপনি এমনকি সংস্করণ নিয়ন্ত্রণ (যেমন SVN) এর অধীনেও আসল DMG (DMG টেমপ্লেট) স্থাপন করতে পারেন, তাই আপনি যদি কখনও ভুলভাবে এটি পরিবর্তন / ধ্বংস করেন তবে আপনি কেবল পুনর্বিবেচনার জন্য ফিরে যেতে পারেন যেখানে এটি ঠিক ছিল। আপনি আপনার Xcode প্রকল্পে DMG টেমপ্লেটটি যুক্ত করতে পারেন, একসাথে DMG (Readme, URL ফাইল, ব্যাকগ্রাউন্ড ইমেজ) সম্পর্কিত সমস্ত অন্যান্য ফাইলগুলির সাথে, সংস্করণ নিয়ন্ত্রণের অধীনে এবং তারপর একটি লক্ষ্য তৈরি করুন (যেমন বাহ্যিক টার্গেট "DMG তৈরি করুন")। এবং উপরে DMG স্ক্রিপ্ট চালান এবং আপনার পুরানো মূল লক্ষ্য নির্ভরশীল টার্গেট হিসাবে যোগ করুন। আপনি স্ক্রিপ্টে $ {SRCROOT} ব্যবহার করে এক্সকোড ট্রিতে ফাইলগুলি অ্যাক্সেস করতে পারেন (সর্বদা আপনার পণ্যের উত্স রুট) এবং আপনি $ {BUILT_PRODUCTS_DIR} ব্যবহার করে বিল্ড পণ্যগুলিতে অ্যাক্সেস করতে পারেন (এটি এমন নির্দেশিকা যেখানে Xcode বিল্ড ফলাফল তৈরি করে) ।

ফলস্বরূপ: প্রকৃতপক্ষে এক্সকোড বিল্ড শেষে DMG উত্পাদন করতে পারে। মুক্তিযুদ্ধের জন্য প্রস্তুত একটি ডিএমজি। কমান্ড লাইন থেকে এক্সকোডবিল্ড ব্যবহার করে (আপনি উদাহরণস্বরূপ স্বয়ংক্রিয় রাতের বেল্ডগুলি) ব্যবহার করে আপনি কেবলমাত্র এটির মাধ্যমে ডিএমজিটিকে সহজে উপভোগ করতে পারবেন না, আপনি এটি স্বয়ংক্রিয়ভাবে একটি স্বয়ংক্রিয় প্রক্রিয়ার (যদি আপনি চান তবে কোন শিরোনাম সার্ভারে) এটি করতে পারেন।

টেমপ্লেটটির প্রাথমিক বিন্যাস সম্পর্কে, FileStorm এটি করার জন্য একটি ভাল সরঞ্জাম। এটি বাণিজ্যিক, কিন্তু খুব শক্তিশালী এবং ব্যবহার করা সহজ। স্বাভাবিক সংস্করণ $ 20 কম, তাই এটি সত্যিই সাশ্রয়ী মূল্যের। হয়তো কেউ একটি DMG তৈরি করতে পারে (যেমন অ্যাপলস্ক্রিপ্টের মাধ্যমে), এটি কখনও চেষ্টা করে নি, তবে একবার আপনি নিখুঁত টেমপ্লেট DMG খুঁজে পেয়ে গেলে, প্রতিটি রিলিজের জন্য এটি আপডেট করা সত্যিই সহজ।


অনেক গবেষণা করার পর, আমি এই উত্তরটি নিয়ে এসেছি, এবং আমি এখানে আমার নিজের প্রশ্নের উত্তর হিসাবে এখানে রেখেছি, রেফারেন্সের জন্য:

  1. সিস্টেম পছন্দসমূহ >> ইউনিভার্সাল অ্যাক্সেসে "সহায়ক ডিভাইসগুলির জন্য অ্যাক্সেস সক্ষম করুন" চেক করা আছে তা নিশ্চিত করুন। এটি অ্যাপলস্ক্রিপ্ট কাজ করার জন্য প্রয়োজন বোধ করা হয়। এই পরিবর্তনের পরে আপনাকে পুনরায় বুট করতে হতে পারে (এটি Mac OS X Server 10.4 এ অন্যথায় কাজ করে না)।

  2. একটি R / W DMG তৈরি করুন। এটা ফলাফল হতে চেয়ে বড় হতে হবে। এই উদাহরণে, ব্যাশ পরিবর্তনশীল "আকার" কেবিতে আকার ধারণ করে এবং "উত্স" বাশ পরিবর্তনশীল ফোল্ডারটির সামগ্রী 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. ডিস্ক ইমেজটি মাউন্ট করুন এবং ডিভাইসের নামটি সংরক্ষণ করুন (আপনি এই অপারেশনটির পরে কয়েক সেকেন্ডের জন্য ঘুম ব্যবহার করতে চাইতে পারেন):

    device=$(hdiutil attach -readwrite -noverify -noautoopen "pack.temp.dmg" | \
             egrep '^/dev/' | sed 1q | awk '{print $1}')
    
  4. ডিএমজি তে ".background" নামের একটি ফোল্ডারে পটভূমি ছবি (PNG ফর্ম্যাটে) সংরক্ষণ করুন এবং তার নাম "ব্যাকগ্রাউন্ডপিক্যুরিননাম" ভেরিয়েবলে সংরক্ষণ করুন।

  5. চাক্ষুষ শৈলীগুলি সেট করতে অ্যাপলস্ক্রিপ্ট ব্যবহার করুন (.app এর নাম অবশ্যই ব্যাশ পরিবর্তনশীল "অ্যাপ্লিকেশন নাম্বারে" থাকা আবশ্যক, প্রয়োজনীয় অন্যান্য বৈশিষ্ট্যগুলির জন্য ভেরিয়েবলগুলি ব্যবহার করুন):

    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. অনুমতিগুলি যথাযথভাবে সংক্ষেপে, কম্প্রেস এবং মুক্ত করে DMG শেষ করুন:

    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

প্যাকেজিং এবং ডিএমজি সৃষ্টির জন্য "স্ক্রিপ্টে প্রোগ্রাম্যাটিক্যালি" করার জন্য আমি কমান্ড লাইন পদ্ধতির ব্যবহার করতে হবে। এ পর্যন্ত পাওয়া সবচেয়ে ভাল উত্তরটি অ্যাডিয়াম প্রকল্প 'রিলিজ বিল্ডিং ফ্রেমওয়ার্ক (R1 দেখুন) থেকে এসেছে। আপনি OSX উইন্ডোজ সার্ভার GUI ইন্টারঅ্যাকশন এড়াতে অনুমতি দেওয়ার জন্য একটি কাস্টম স্ক্রিপ্ট (AdiumApplescriptRunner) আছে। "osascript applescript.scpt" পদ্ধতির জন্য আপনি বিল্ডার হিসাবে লগইন করতে এবং কমান্ড লাইন vt100 অধিবেশন থেকে dmg তৈরি চালানোর প্রয়োজন।

OSX প্যাকেজ ম্যানেজমেন্ট সিস্টেমটি অন্যান্য ইউনিক্সের তুলনায় এত উন্নত নয় যা সহজে এবং পদ্ধতিগতভাবে এই কাজটি করতে পারে।

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


একটি সুন্দর খুঁজছেন DMG তৈরি করার জন্য, আপনি এখন কিছু ভাল লিখিত ওপেন সোর্স ব্যবহার করতে পারেন:


আপনি এই বিষয়ে আগ্রহী যারা আপনার জন্য, আমি কিভাবে 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

এই উত্তর প্রদান করে আপ টু ডেট এই প্রশ্ন।

appdmg একটি সহজ, সহজে ব্যবহারযোগ্য, ওপেন সোর্স কমান্ড লাইন প্রোগ্রাম যা একটি সাধারণ জson স্পেসিফিকেশন থেকে dmg-files তৈরি করে। অফিসিয়াল ওয়েবসাইটে রিডমে দেখুন:

github.com/LinusU/node-appdmg

দ্রুত উদাহরণ:

  1. Appdmg ইনস্টল করুন

    npm install -g appdmg
    
  2. একটি spec.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. প্রোগ্রাম চালু করুন

    appdmg spec.json test.dmg
    

(দাবিত্যাগ। আমি appdmg সৃষ্টিকর্তা)


আপনি কাস্টম ভলিউম আইকন সেট করতে চান তবে নীচের কমান্ডটি ব্যবহার করুন

/*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 /<your path>/.VolumeIcon.icns

এখন পড়ুন / লিখুন dmg লিখুন

/*to set custom icon attribute*/
SetFile -a C /Volumes/dmgName




dmg