CocoaPods 1.9.0 এবং Firebase 7 থেকে শুরু করে, আপনি আপনার Firebase ডিপেন্ডেন্সিগুলো স্ট্যাটিক নাকি ডাইনামিক ফ্রেমওয়ার্ক হিসেবে বিল্ড হবে তা বেছে নিতে পারেন। আমরা স্ট্যাটিক ফ্রেমওয়ার্ক ব্যবহার করার পরামর্শ দিই, যদি না আপনার নির্দিষ্ট ডাইনামিক লাইব্রেরির আচরণের প্রয়োজন হয়।
উল্লেখ্য যে, GitHub-এর বাইরে তৈরি লাইব্রেরিগুলো CocoaPods 1.9.0 এবং এর পরবর্তী সংস্করণগুলোতেও শুধুমাত্র স্ট্যাটিক্যালি লিঙ্ক করা যায়। বর্তমানে, এই লাইব্রেরির তালিকায় AdMob , Analytics , Firebase ML এবং Performance Monitoring অন্তর্ভুক্ত রয়েছে। জিপ ফাইল, Swift Package Manager এবং Carthage সহ অন্যান্য সমস্ত ডিস্ট্রিবিউশন চ্যানেল শুধুমাত্র স্ট্যাটিক্যালি লিঙ্ক করা লাইব্রেরি সরবরাহ করে।
এই ডকুমেন্টটি অ্যাপল প্ল্যাটফর্মে ডাইনামিক এবং স্ট্যাটিক লিঙ্কিং সম্পর্কে আপনার কার্যকরী জ্ঞান আছে বলে ধরে নেয়। আপনি যদি এই ধারণাগুলোর সাথে অপরিচিত হন, তাহলে নিম্নলিখিত ডকুমেন্টেশনটি দেখে নিন:
- ম্যাক-ও প্রোগ্রামিং বিষয়সমূহ
- ডাইনামিক লাইব্রেরি প্রোগ্রামিং বিষয়সমূহ
- লাইব্রেরিতে ফায়ারবেস ব্যবহার করা
যেহেতু এই ডকুমেন্টটি লাইব্রেরি লিঙ্কেজের প্রকারভেদ নিয়ে আলোচনা করে এবং নন-এক্সিকিউটেবল রিসোর্স বান্ডেল লোড করা নিয়ে নয়, তাই লাইব্রেরি এবং ফ্রেমওয়ার্ক শব্দ দুটি একই অর্থে ব্যবহৃত হয়েছে।
স্থির সংযোগ
স্ট্যাটিক্যালি লিঙ্ক করা লাইব্রেরিগুলো বিল্ড করার সময় আপনার অ্যাপ্লিকেশন এক্সিকিউটেবলের সাথে বান্ডল করা হয়। ফলে, স্ট্যাটিক লাইব্রেরির অবজেক্ট ফাইলগুলো আপনার অ্যাপ চালু হওয়ার সময়ই তাতে উপস্থিত থাকে এবং অ্যাপ চালুর সময় ডাইনামিক লিঙ্কার দ্বারা সেগুলোকে রিজলভ করার প্রয়োজন হয় না। এর ফলস্বরূপ, স্ট্যাটিক লিঙ্কিং ব্যবহারকারী অ্যাপগুলো দ্রুততরভাবে চালু হয়। এর জন্য বাইনারি / অ্যাপ এক্সিকিউটেবলের আকার কিছুটা বড় হয়, যদিও এটি উল্লেখ্য যে, বান্ডল করা ডাইনামিক লাইব্রেরির অনুপস্থিতির কারণে এক্সিকিউটেবলের এই বড় আকার পুষিয়ে যায়।
আপনার Podfile-এ লিঙ্কেজটি স্পষ্টভাবে উল্লেখ করে আপনি Firebase ডিপেন্ডেন্সিগুলির স্ট্যাটিক লিঙ্কিং বাধ্যতামূলক করতে পারেন:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
ডাইনামিক লিঙ্কিং
ডাইনামিক্যালি লিঙ্ক করা লাইব্রেরিগুলো আপনার অ্যাপের মূল এক্সিকিউটেবল থেকে আলাদাভাবে আপনার অ্যাপ বান্ডেলে সংরক্ষিত থাকে এবং অ্যাপ চালু করার সময় ডাইনামিক লিঙ্কার দ্বারা সেগুলোকে অবশ্যই লোড করতে হয়। প্রসেসগুলোর মধ্যে কোড শেয়ারিং সক্ষম করার জন্য অ্যাপলের সমস্ত ফ্রেমওয়ার্ক ডাইনামিক্যালি লিঙ্ক করা হয়; একইভাবে, আপনি আপনার অ্যাপ এবং এক্সটেনশন টার্গেটগুলোর মধ্যে কোড শেয়ার করার জন্য ডাইনামিক ফ্রেমওয়ার্ক ব্যবহার করতে পারেন। আপনি আলাদা অ্যাপ্লিকেশনগুলোর মধ্যে ডাইনামিক ফ্রেমওয়ার্ক শেয়ার করতে পারবেন না, এমনকি যদি উভয়ই একই ডেভেলপার দ্বারা স্বাক্ষরিত হয়।
আপনি যদি কোনো ডাইনামিক ফ্রেমওয়ার্ক টার্গেটের ডিপেন্ডেন্সি হিসেবে ফায়ারবেস ব্যবহার করতে চান, তাহলে আপনাকে ফায়ারবেসকেও ডাইনামিকভাবে লিঙ্ক করতে হবে; অন্যথায় আপনার অ্যাপের রানটাইমে ডুপ্লিকেট ক্লাস ডেফিনিশনের সমস্যা দেখা দেবে। use_frameworks! এর ক্ষেত্রে ডাইনামিক লিঙ্কিং হলো ডিফল্ট আচরণ, কিন্তু তারপরেও আপনি আপনার `Podfile`-এ স্পষ্টভাবে ডাইনামিক লিঙ্কেজ উল্লেখ করতে পারেন:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
মনে রাখবেন যে, ডাইনামিক লিঙ্কিং আপনার অ্যাপের চালু হওয়ার সময় বাড়িয়ে দিতে পারে, বিশেষ করে যদি আপনার অ্যাপে অনেকগুলো ডিপেন্ডেন্সি থাকে।