ম্যাকোএসএক্স, ইজি এবং দ্যুগলিতে একটি অ্যাপ বান্ডেল তৈরির দুটি উপায় রয়েছে।
সহজ উপায়টি কেবল এক্সকোড ব্যবহার করা। সম্পন্ন.
সমস্যাটি কখনও কখনও আপনি করতে পারেন না।
আমার ক্ষেত্রে আমি এমন একটি অ্যাপ তৈরি করছি যা অন্যান্য অ্যাপ্লিকেশনগুলি তৈরি করে। আমি ধরে নিতে পারি না ব্যবহারকারীর এক্সকোড ইনস্টল আছে। আমি লাইব্রেরিগুলি তৈরি করতে ম্যাকপোর্টসও ব্যবহার করছি যা আমার অ্যাপের উপর নির্ভর করে। এই ডায়ালিবগুলি অ্যাপটি বিতরণের আগে আমার অ্যাপ্লিকেশনটির সাথে বান্ডিল হয়ে গেছে তা নিশ্চিত করা দরকার।
দাবি অস্বীকার: আমি এই পোস্টটি লেখার জন্য পুরোপুরি অযোগ্য হয়েছি, বিদ্যমান সমস্ত অ্যাপ্লিকেশন এবং ট্রায়াল এবং ত্রুটিটিকে আলাদা করে রেখে সমস্ত কিছু অ্যাপল ডক্স থেকে উদ্ভাসিত হয়েছে। এটি আমার পক্ষে কাজ করে তবে সম্ভবত ভুল। আপনার কোনও সংশোধন থাকলে দয়া করে আমাকে ইমেল করুন।
প্রথম জিনিসটি আপনার জানা উচিত যে অ্যাপ্লিকেশন বান্ডিলটি কেবল একটি ডিরেক্টরি।
অনুমানমূলক foo.app এর কাঠামোটি পরীক্ষা করি।
foo.app/
বিষয়বস্তু /
তথ্য.পুলিস্ট
ম্যাক অপারেটিং সিস্টেম/
ফু
সংস্থান /
foo.icns
তথ্য.পল্লিস্ট একটি সরল এক্সএমএল ফাইল। আপনি এটিকে কোনও পাঠ্য সম্পাদক বা সম্পত্তি কোড সম্পাদক অ্যাপ্লিকেশন দিয়ে সম্পাদনা করতে পারেন যা এক্সকোডের সাথে বান্ডেলযুক্ত। (এটি / বিকাশকারী / অ্যাপ্লিকেশন / ইউটিলিটিস / ডিরেক্টরিতে রয়েছে)।
আপনার মূল বিষয়গুলি অন্তর্ভুক্ত করতে হবে:
সিএফবান্ডেলনাম - অ্যাপটির নাম।
সিএফবান্ডিলআইকন - একটি আইকন ফাইল সামগ্রী / সংস্থানসমূহের ডিয়ার হিসাবে ধরে নেওয়া হয়। আইকনটি তৈরি করতে আইকন রচয়িতা অ্যাপ্লিকেশনটি ব্যবহার করুন। (এটি / বিকাশকারী / অ্যাপ্লিকেশনস / ইউটিলিটিস / ডিরেক্টরিতেও রয়েছে) আপনি কেবল তার উইন্ডোতে একটি পিএনজি টেনে আনতে এবং ড্রপ করতে পারেন এবং স্বয়ংক্রিয়ভাবে আপনার জন্য মিপ-স্তর তৈরি করা উচিত।
CFBundleExecutable - সামগ্রী / ম্যাকোস / সাব-ফোল্ডারে থাকা নির্বাহযোগ্য ফাইলের নাম।
আরও অনেক বিকল্প রয়েছে, উপরের তালিকাভুক্তগুলি কেবলমাত্র সর্বনিম্ন। এখানে তথ্য.পল্লিস্ট
ফাইল এবং
অ্যাপ্লিকেশন বান্ডিল কাঠামোর কয়েকটি অ্যাপল ডকুমেন্টেশন রয়েছে
।
এছাড়াও, এখানে একটি নমুনা তথ্য.প্লেস্ট।
<? এক্সএমএল সংস্করণ = "1.0" এনকোডিং = "ইউটিএফ -8"?>
<! DOCTYPE plist PUBLIC "- // অ্যাপল কম্পিউটার // ডিটিডি প্লিজিটি 1.0 // এএন" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version = "1.0">
<ডিক্ট>
<key> CFBundleGetInfoString </key>
<স্ট্রিং> ফু </ স্ট্রিং>
<key> সিএফবান্ডেলএক্সেকিউটেবল </key>
<স্ট্রিং> ফু </ স্ট্রিং>
<key> সিএফবান্ডেলআইডেন্টিফায়ার </key>
<string> com.yur-company-name.www </string>
<key> সিএফবান্ডেলনাম </key>
<স্ট্রিং> ফু </ স্ট্রিং>
<key> CFBundleIconFile </key>
<string> foo.icns </string>
<key> সিএফবান্ডেলশার্টভিশন স্ট্রিং </key>
<string> 0.01 </string>
<key> সিএফবান্ডেলআইনফো অভিধান অভিধান সংস্করণ </key>
<string> 6.0 </string>
<key> CFBundlePackageType </key> key
<স্ট্রিং> অ্যাপল </ স্ট্রিং>
<key> IFMajorVersion </key>
<অন্তর্ভুক্ত> 0 </integer>
<key> IFMinorVersion </key>
<অন্তর্ভুক্ত> 1 </integer>
</dict>
</plist>
একটি নিখুঁত বিশ্বে আপনি কেবল আপনার নির্বাহযোগ্য বিষয়বস্তু / MacOS / dir এ ফেলে দিতে পারেন এবং সম্পন্ন করতে পারেন। তবে আপনার অ্যাপ্লিকেশনটিতে যদি কোনও মানহীন ডায়ালিব নির্ভরতা থাকে তবে তা কাজ করবে না। উইন্ডোজের মতো ম্যাকওএসও এর নিজস্ব বিশেষ ধরণের ডিএলএল হেল সঙ্গে আসে ।
আপনি যে লাইব্রেরিগুলির সাথে লিঙ্ক করেছেন সেগুলি তৈরি করতে যদি আপনি ম্যাকপোর্টস ব্যবহার করেন, তবে ডাইলিবগুলির অবস্থানগুলি আপনার কার্যকর হতে পারে এমন কোডগুলি হার্ড-কোডড। আপনি যদি এমন কোনও মেশিনে অ্যাপটি চালান যা ঠিক একই জায়গায় ডাইলিবযুক্ত থাকে তবে এটি ঠিকঠাক হবে। তবে, বেশিরভাগ ব্যবহারকারীর সেগুলি ইনস্টল করা হবে না; যখন তারা আপনার অ্যাপ্লিকেশনটিকে ডাবল-ক্লিক করবে তখন এটি ক্রাশ হবে।
নির্বাহযোগ্য আপনার বিতরণ করার আগে আপনাকে এটি লোড করা সমস্ত ডায়ালিব সংগ্রহ করতে হবে এবং অ্যাপ্লিকেশন বান্ডেলে এগুলি অনুলিপি করতে হবে। আপনাকে এক্সিকিউটেবলটি সম্পাদনা করতে হবে যাতে এটি সঠিক জায়গায় ডাইলিবগুলি সন্ধান করতে পারে। অর্থাত্ যেখানে আপনি সেগুলি অনুলিপি করেছেন।
একটি সম্পাদনযোগ্য শব্দ হাত সম্পাদনা বিপজ্জনক অধিকার? ভাগ্যক্রমে সাহায্যের জন্য কমান্ড লাইন সরঞ্জাম রয়েছে।
otool -L এক্সিকিউটেবল_নাম
এই কমান্ডটি আপনার অ্যাপের উপর নির্ভর করে সমস্ত ডায়ালিব তালিকাবদ্ধ করবে। যদি আপনি সিস্টেম / লাইব্রেরি বা usr / lib ফোল্ডারে নেই এমন কোনও কিছু দেখতে পান তবে অ্যাপ্লিকেশন বান্ডলে আপনাকে অনুলিপি করতে হবে। এগুলিকে / সামগ্রী / ম্যাকোস / ফোল্ডারে কপি করুন। এর পরে আপনার নতুন ডায়ালিব ব্যবহার করতে এক্সিকিউটেবলকে সম্পাদনা করতে হবে।
প্রথমত, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি হেডারপ্যাড_ম্যাক্স_ইনস্টল_নাম পতাকা ব্যবহার করে লিঙ্ক করেছেন। এটি কেবল নিশ্চিত করে যে নতুন ডিলিব পাথটি যদি লম্বা হয় তবে পূর্ববর্তীটি, এর জন্য জায়গা থাকবে।
দ্বিতীয়ত, প্রতিটি ডিলিব পাথ পরিবর্তন করতে ইনস্টল_নাম_টুল ব্যবহার করুন।
ইনস্টল_নাম_তুল-বদল বিদ্যমান_পাথ_ টু_ডিলিব @ এক্সিকিউটেবল_পথ / ব্লাহ.আল্লিব এক্সিকিউটেবল_নাম
ব্যবহারিক উদাহরণ হিসাবে, আসুন আমরা বলি যে আপনার অ্যাপ্লিকেশনটি libSDL ব্যবহার করে এবং ওটুল তার অবস্থানটিকে "/opt/local/lib/lib/libSDL-1.2.0.dylib" হিসাবে তালিকাভুক্ত করে।
প্রথমে এটি অ্যাপ্লিকেশন বান্ডেলে অনুলিপি করুন।
সিপি / ওপট / লোকাল / লিব / লিবিএসডিএল 1-1.2.0. আদিলিব foo.app/ সামগ্রী / ম্যাকোস /
তারপরে নতুন অবস্থানটি ব্যবহার করতে এক্সিকিউটেবলকে সম্পাদনা করুন (দ্রষ্টব্য: আপনি এটি হেডারপ্যাড_ম্যাক্স_ইনস্টল_নামগুলির পতাকা দিয়ে তৈরি করেছেন তা নিশ্চিত করুন)
ইনস্টল_নাম_টুল-চেঞ্জ / ওপট / লোকাল / লিবি / লিবিএসডিএল ১.০.০.০.ডিলিব @ এক্সিকিউটেবল_পাথ / লাইবএসডিএল -২.২.০. আদিলিব foo.app/Contents/MacOS/foo
হ্যাঁ, আমরা প্রায় শেষ। এখনকার চলমান ডিরেক্টরিটি নিয়ে একটি ছোট সমস্যা রয়েছে।
আপনি যখন আপনার অ্যাপ্লিকেশনটি শুরু করবেন বর্তমান অ্যাপ্লিকেশনটি যেখানে অবস্থিত সেখানে ডিরেক্টরি হবে above উদাহরণস্বরূপ: আপনি যদি / অ্যাপ্লিকেশন ফোল্ডারে foo.app রাখেন তবে অ্যাপটি চালু করার সময় বর্তমান ডিরেক্টরিটি হবে / অ্যাপ্লিকেশন ফোল্ডার। আপনি যেমন আশা করতে পারেন তেমন / অ্যাপ্লিকেশনগুলি / ফু / অ্যাপ / সামগ্রী / ম্যাকোস / নয় OS
আপনি এটির জন্য অ্যাকাউন্টটি প্রয়োগ করতে আপনার অ্যাপ্লিকেশনটিকে পরিবর্তন করতে পারেন, বা আপনি এই ম্যাজিক লিটল লঞ্চ স্ক্রিপ্টটি ব্যবহার করতে পারেন যা বর্তমান ডিরেক্টরিটি পরিবর্তন করবে এবং আপনার অ্যাপ্লিকেশন চালু করবে।
#! / বিন / বাশ
সিডি "$ {0% / *}"
./foo
নিশ্চিত করুন যে আপনি যাতে Info.plist ফাইল সমন্বয় করুন CFBundleExecutable লঞ্চ স্ক্রিপ্টে এবং পূর্ববর্তী এক্সিকিউটেবল না পয়েন্ট।
ঠিক আছে, এখন সব শেষ। ভাগ্যক্রমে, আপনি যখন এই সমস্ত জিনিসগুলি জানেন তবে আপনি এটি একটি বিল্ড স্ক্রিপ্টে কবর দেবেন।