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


212

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

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

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


1
এটি কি আলাদা জিজ্ঞাসার জন্য কিছু নয়?
লেনার হোয়েট

উত্তর:


199

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

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

  2. একটি আর / ডাব্লু ডিএমজি তৈরি করুন। এটির ফলাফল অবশ্যই বড় হতে হবে। এই উদাহরণে, ব্যাশ ভেরিয়েবল "আকার" কেবিতে আকার ধারণ করে এবং "উত্স" বাশ ভেরিয়েবলের ফোল্ডারের সামগ্রীগুলি ডিএমজিতে অনুলিপি করা হবে:

    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. ব্যাকগ্রাউন্ডের ছবি (পিএনজি ফর্ম্যাটে) ডিএমজিতে ".ব্যাকগ্রাউন্ড" নামে একটি ফোল্ডারে সঞ্চয় করুন এবং এর নামটি "ব্যাকগ্রাউন্ডপিকচারনাম" ভেরিয়েবলে সঞ্চয় করুন।

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

    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. অনুমতিগুলি যথাযথভাবে সেট করে, সংকোচন করে এবং ছেড়ে দিয়ে ডিএমজিকে চূড়ান্ত করুন:

    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

1
চমৎকার। সে সম্পর্কে দুটি প্রশ্ন: 1. আপনি sleepছবিটি oundিবি করার পরে সুপারিশ করুন । কতক্ষণ? প্রক্রিয়া শেষ হওয়ার জন্য নির্বিচারে অপেক্ষা করা কি সম্ভব নয়? delay 5আপনার অ্যাপলস্ক্রিপ্টের জন্য একই । আমি এ জাতীয় নির্ধারিত অপেক্ষার সময় থেকে সর্বদা সচেতন থাকি, তাদের সাথে কিছু খুব খারাপ অভিজ্ঞতা হয়েছিল। ২. আপনার step ধাপে আপনি syncদুবার কল করেছেন - কেন?
কনরাড রুডল্ফ

আমি 'অ্যাপ্লিকেশন নিবন্ধন না করে আপডেটের' সম্পূর্ণ হওয়ার অপেক্ষার জন্য কোনও উপায় খুঁজে পাইনি। "Hdiutil সংযুক্তি" দেওয়ার পরে ঘুম দরকার কিনা তা আমি নিশ্চিত নই, আপনাকে ডকুমেন্টেশন পরীক্ষা করতে হবে (man hdiutil)। সিঙ্কটি কেবল একবার কল করার দরকার ছিল, আমি পুরানো অভ্যাস থেকে দু'বার ভাল পুরানো সানোস দিন থেকে এটি করি।
লুডভিগ এ। নরিন

1
এটি অ্যাপসক্রিপ্টটিকে মাউস এবং কীবোর্ড ইনপুট এবং অন্যান্য কিছু জিনিসকে সিমুলেট করার অনুমতি দেয়।
লুডভিগ এ। নরিন

1
যদি স্ক্রিপ্টটি "অ্যাপ্লিকেশনগুলি নিবন্ধন না করে আপডেট করুন" রেখার সময় পর্যন্ত স্থগিত হয়, তবে 1 ম পদক্ষেপটি করা হয়নি (বা পূর্বাবস্থায় ফিরে গিয়েছে)। আমি এই কঠিন উপায় খুঁজে পেয়েছি।
জে মেইনার্ড কে 5 জেডিসি

আমি মনে করি আমি একটি সামান্য ত্রুটি পেয়েছি - অ্যাপলস্ক্রিপ্টে একটি ইজেক্ট রয়েছে, যা আপনি chmod চালানোর চেষ্টা করার আগে করা হয়। chmod ব্যর্থ হবে কারণ ডিস্কটি এখন বের করে দেওয়া হয়েছে।
ট্রেজকাজ

56

ক্রেম-ডিএমজি নামে একটি ছোট্ট বাশ স্ক্রিপ্ট রয়েছে যা কাস্টম ব্যাকগ্রাউন্ড, কাস্টম আইকন অবস্থান এবং ভলিউমের নাম সহ অভিনব ডিএমজি তৈরি করে।

আমি বহু বছর আগে এটিকে যে সংস্থায় চালিয়েছিলাম তার জন্য এটি তৈরি করেছি; এটি তখন থেকে অন্যান্য লোকের অবদানের উপর টিকে আছে এবং তথাকথিত ভাল কাজ করে।

এর রয়েছে নোড-appdmg যা আরো আধুনিক এবং সক্রিয় উপর Node.js ভিত্তিক প্রচেষ্টা দেখে মনে হচ্ছে; পাশাপাশি এটি পরীক্ষা করে দেখুন।


7
আপনার বাশ স্ক্রিপ্টের লিঙ্কটি নষ্ট হয়ে গেছে। আপনি github.com এ একটি টুকরো টানতে পারেন? ধন্যবাদ
ডিকিম্পার

create-dmg আইকনটি ভাল রাখে না । আপনার যদি এই বৈশিষ্ট্যটি প্রয়োজন হয় তবে এটি ব্যবহার করবেন না।
লাইক

1
@ লাইক 9 মি আমি সর্বশেষ এটি স্পর্শ করার পরে 5 বছরেরও বেশি সময় হয়ে গেছে। আমি আর সত্যিই ডিএমজিগুলিকে ম্যাক সফ্টওয়্যার বিতরণ করার সর্বোত্তম উপায় মনে করি না। সুতরাং এটি অন্যের অবদানের উপর টিকে আছে - আশা করি কেউ আইকনগুলির সমস্যাটিও বের করে ফেলবে।
আন্দ্রে তারানসভ

3
@ জেমি ওয়েল একজন ব্যবহারকারী হিসাবে, আমি এখন পর্যন্ত জিপ ফাইলগুলি পছন্দ করি। /Applicationsঅ্যাপটি এটি থেকে চলছে কিনা তা সনাক্ত করে স্বতঃ-অনুলিপি করার জন্য বোনাস পয়েন্ট ~/Downloadsজন গ্রুবারের এই পুরানো নিবন্ধটিও দেখুন ।
আন্দ্রে তারানসভ ov


37

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

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

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

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

  3. আবার ডিএমজিকে আনমাউন্ট করুন, সমস্ত সেটিংস এখনই স্টোর করা উচিত।

  4. একটি তৈরি ডিএমজি স্ক্রিপ্ট লিখুন, যা নিম্নলিখিত হিসাবে কাজ করে:

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

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

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

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


3
আমি ইতিমধ্যে বেশ কয়েকটি কারণে এটি করার ধারণাটি ইতিমধ্যে বাতিল করে দিয়েছি। তাদের মধ্যে দুটি এখানে রয়েছে: ইনস্টলারগুলির সামগ্রীগুলি পণ্যের সাথে পৃথক হবে, এবং আমরা কেবল প্যাক মেশিন এবং স্ক্রিপ্টগুলিতে ইনস্টল হওয়া সফ্টওয়্যারগুলির উপর নির্ভর করতে চাই - নতুন পণ্য যুক্ত করার জন্য একটি একক, ন্যূনতম, ম্যানুয়াল রুটিন।
লুডভিগ এ। নরিন

এটি আমাদের মতো পরিস্থিতি। আমাদের এক ডজনেরও বেশি পণ্য রয়েছে; প্রত্যেকের একটি সম্পূর্ণ আলাদা ডিএমজি থাকে। প্রতিটি পণ্য প্রতি এক টেম্পলেট ডিএমজি তৈরি করা একমাত্র সময় কাজ এবং আপনার কয়েক মিনিট সময় লাগে। এবং "ইনস্টলার" বলতে কী বোঝ? পিকেজি / এমপিকেজি ইনস্টল প্যাকেজ?
মক্কি

এটি একই দৃশ্য নয়। আমরা প্রায়শই সংক্ষিপ্ত বিজ্ঞপ্তি সহ পণ্য যুক্ত করি। ন্যূনতম ম্যানুয়াল রুটিনের অর্থ পণ্যটির নাম এবং কয়েকটি অন্যান্য বৈশিষ্ট্য দেওয়া স্ক্রিপ্ট চালানো। এর বাইরেও কিছু কারণ রয়েছে যা আমাদের এই ধরণের সমাধানটি ব্যবহার না করার সিদ্ধান্ত নিয়েছে।
লুডভিগ এ। নরিন

আমরা প্যাক প্রক্রিয়াটি বিল্ড প্রক্রিয়া থেকে আলাদা করেছি, কারণ এটি বিভিন্ন সময়ে বিভিন্ন ব্যক্তি দ্বারা সম্পন্ন করা হয়। প্যাক প্রক্রিয়া উইন্ডোজ, উইন্ডোজ সিই, সিম্বিয়ান, এআইএক্স, লিনাক্স এবং সোলারিসের জন্য ইনস্টলার তৈরি করে।
লুডভিগ এ। নরিন

আপনি সম্ভবত hdiutil রেফারেশন করছেন, hdutil নয়।
ইভান ভুইকা

25

এই উত্তরটি সরবরাহ করে এই প্রশ্নটি আপ টু ডেট।

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

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

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

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

    npm install -g appdmg
    
  2. একটি জেসন ফাইল লিখুন ( 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
    

(অস্বীকৃতি। আমি অ্যাপডিমজির স্রষ্টা)


3
সহজ এবং কার্যকর। কেবলমাত্র খারাপ দিকটির জন্য এটি এনপিএম ইনস্টল করা প্রয়োজন
জ্যাক জেমস

@ নির্মাতা: আপনি কি দয়া করে এটিকে অগ্রাহ্য করতে পারেন যেমন জিইউআই অফারটি টেনে না ফেলে ছাড়াই? s.sudre.free.fr/Software/Packages/about.html

.App ফাইলটি জসন ফাইলের মতো একই ফোল্ডারে না থাকলে, এটি কাজ করে না, আপনি "পথ" -র কোনও আপেক্ষিক পথ নির্দিষ্ট করার সময় এটি "ফাইল খুঁজে পাওয়া যায় না" ত্রুটি দেয়
জোয়ে

@ জোয়ি, আপনি যদি গিথুব সংগ্রহস্থলে কোনও সমস্যা খোলেন তা যদি আপনার পক্ষে কাজ না করে?
লিনাস আনবেনব্যাক

@ জোয়: এটি একই ফোল্ডারে থাকা দরকার নেই, আমার ব্যাকগ্রাউন্ড রয়েছে, অ্যাপটি সমস্ত বিভিন্ন পথে আছে, কেবল আপেক্ষিক পথগুলি পাস করুন ../../../ABC
অনুপ বৈদ্য

22

আপনারা যারা এই বিষয়ে আগ্রহী তাদের জন্য আমি কীভাবে ডিএমজি তৈরি করব তা উল্লেখ করা উচিত:

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

1
এটি ঠিক আছে, তবে এটি প্রকৃত প্রয়োজন (পটভূমির চিত্র, ফোল্ডারে আইটেমের অবস্থান ইত্যাদি)
টম বোগল

ডিএমজি তৈরি করেছে তবে আবার আমাকে সিএমডি ব্যবহার করে আমার স্ক্রিপ্ট (.sh) চালাতে হবে আমাকে ডিএমজি তৈরির পরে স্বয়ংক্রিয়ভাবে চালানো দরকার
সন্তোষ

13

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


3
আমার দলটি জেনকিনস সিআই বিল্ড সার্ভারে সুন্দর এবং স্বয়ংক্রিয়ভাবে এটি কাজ করছে, ব্যাকগ্রাউন্ড সহ সম্পূর্ণ, অ্যাপ্লিকেশন উলেফে টেনে আনুন। ডিস্ক ইমেজ তৈরির জন্য ড্রপডিএমজি-তে চালাও, হাঁটবেন না।
পল কলিন্স

ভাল অ্যাপ, আমি আমার পরীক্ষার মেয়াদ শেষ হওয়ার পরে এটি কিনতে যাচ্ছি।
কিলিক 5২

দেখতে দুর্দান্ত লাগছে, তবে উইন্ডোর আকার পরিবর্তন করার বিকল্প নেই বলে মনে হচ্ছে।
এভিআই

@ আভি ড্রপডিএমজি আপনার সেট করা ব্যাকগ্রাউন্ড ছবিটির উইন্ডোটি স্বয়ংক্রিয়ভাবে আকার দেয় (বা ইচ্ছা করলে সেই ছবিতে ইনসেট করুন )।
মাইকেল সোসাই

দুর্দান্ত, ধন্যবাদ! ব্যাকগ্রাউন্ড ইমেজ ছাড়া কি আকার পরিবর্তন করা সম্ভব?
এভিআই

6

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


1
মনে রাখবেন যে এটি কোনও নিখরচায় প্রোগ্রাম নয়, তাই এটি অনেকগুলি পরিবেশের জন্য উপযুক্ত নয়।
জে মেইনার্ড কে 5 জেডিসি

5

দেখতে সুন্দর ডিএমজি তৈরির জন্য, আপনি কেবল কয়েকটি ভাল লিখিত উন্মুক্ত উত্স ব্যবহার করতে পারেন:


তারা এটি সরানো হতে পারে। আপনি create-dmg এবং নোড-অ্যাপডিএমজি ব্যবহার করতে পারেন। আমি ক্রিয়েট-ডিএমজি ব্যবহার করছি। এটা ভালো.
অ্যানি এস

@ পামেলাকুক-লাইটবির্প যদি আপনি এখনও আগ্রহী হন। Dmgbuild এর লিঙ্কটি ঠিক করা হয়েছে।
সাবঅপটিমাল

4

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

/*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 এর ভিতরে থাকা কোনও ফাইল ব্যবহার করার দরকার আছে? আমার কাছে কেবল একটি ম্যাক রয়েছে, তাই স্টাফগুলি অন্য মেশিনে কাজ করবে কিনা তা পরীক্ষা করা শক্ত।
মিলান বাবুস্কভ

"আপনার পথ" ডিএমজির নাম। (/ খণ্ড / dmgName)
পরাগ

আপনার আইকন ফাইল অনুলিপি করা উচিত। সিপি "/ ভলিউমস / কাস্টম আইকন.আইকএনস" "/ ভলিউমস / ডিএমজিএনএম.ভলিউম আইকন.িকনস"
পরাগ

4

অবশেষে আমি আমার নিজস্ব প্রকল্পে এটি পেয়েছি (যা এক্সকোডে হয়)। আপনার বিল্ড পর্বে এই 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 / T_ PROJECT_NAME / ডিরেক্টরিতে রয়েছে তা নিশ্চিত করুন!


এটি আমার প্রকল্পে ফাঁকা ডিস্ক চিত্র তৈরি করছে। যেকোনো পরামর্শ.
ম্যানিয়াচ্যাম্প

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

2

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

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


তবে প্রথমে একটি ব্যাকগ্রাউন্ড ইমেজটি ডিএমজি-তে এটিকে .background.png জাতীয় কিছু দিয়ে যুক্ত করুন এবং তারপরে সেই (!) চিত্রটি ব্যাকগ্রাউন্ডে যুক্ত করতে Cmd-J ব্যবহার করুন।
গিজস

2

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

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

আর 1: http://hg.eam.im/adium-1.4/file/00d944a3ef16/ দয়া করে


2

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

যাইহোক, আগ্রহী যে কেউ পিপিআইতে এটি খুঁজে পেতে পারেন ; দস্তাবেজগুলি দস্তাবেজগুলি পড়ার জন্য উপলভ্য


1

এই উত্তরগুলি বেশ জটিল এবং সময় পরিবর্তিত হয়েছে। নিম্নলিখিতটি ঠিক ১০.৯-এ কাজ করে, অনুমতিগুলি সঠিক এবং এটি দেখতে দুর্দান্ত লাগে।

ডিরেক্টরি থেকে কেবল পঠনযোগ্য ডিএমজি তৈরি করুন

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

যদি অন্য কিছু হওয়ার দরকার হয় তবে এই সবচেয়ে সহজ জিনিসটি হ'ল এসআরসি_ডিআইআর এর একটি অস্থায়ী অনুলিপি তৈরি করা এবং ডিএমজি তৈরির আগে পরিবর্তনগুলি প্রয়োগ করা।


এই উত্তরটি আগে যা লেখা হয়েছিল তাতে কিছু যুক্ত হচ্ছে না এবং এটি মূল প্রশ্নেরও উত্তর দেয় না (এটি কেবলমাত্র ডিএমজি-তে একটি আইকন রাখার বিষয়ে নয়, বা কীভাবে স্বাক্ষর করতে হবে; প্রশ্নটি গ্রাফিক্স এবং অবস্থানগত আইকনগুলিকে প্রোগ্রামগতভাবে যুক্ত করার বিষয়ে নয়) a dmg)।
লুডভিগ এ। নরিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.