بدءًا من الإصدار 1.9.0 من CocoaPods والإصدار 7 من Firebase، يمكنك اختيار ما إذا كنت تريد إنشاء تبعيات Firebase كأُطر عمل ثابتة أو ديناميكية. ننصحك باستخدام أُطر العمل الثابتة ما لم تكن بحاجة إلى سلوكيات معيّنة للمكتبات الديناميكية.
يُرجى العِلم أنّ المكتبات التي تم تطويرها خارج GitHub لا يمكن ربطها إلا بشكل ثابت، حتى مع الإصدار 1.9.0 من CocoaPods والإصدارات الأحدث. تتضمّن قائمة المكتبات هذه حاليًا AdMob وAnalytics وFirebase ML وPerformance Monitoring. أما جميع قنوات التوزيع الأخرى، بما في ذلك ملف ZIP وSwift Package Manager وCarthage، فتوفّر مكتبات مرتبطة بشكل ثابت فقط.
يفترض هذا المستند معرفة عملية بالربط الديناميكي والثابت على منصات Apple. إذا لم تكن على دراية بهذه المفاهيم، يمكنك الاطّلاع على المستندات التالية:
بما أنّ هذا المستند يتناول أنواع ربط المكتبات وليس تحميل حِزم الموارد غير القابلة للتنفيذ، يتم استخدام المصطلحَين مكتبة وإطار عمل بالتبادل.
الربط الثابت
يتم تجميع المكتبات المرتبطة بشكل ثابت في ملف التطبيق القابل للتنفيذ في وقت الإنشاء. نتيجةً لذلك، ستكون ملفات العناصر في المكتبة الثابتة متوفّرة في تطبيقك عند تشغيله، ولن يحتاج الرابط الديناميكي إلى حلّها في وقت تشغيل التطبيق. وبالتالي، سيتم تشغيل التطبيقات التي تستخدم الربط الثابت بشكل أسرع. يأتي ذلك على حساب ملف ثنائي / تطبيق تنفيذي أكبر قليلاً، مع العلم أنّ حجم الملف التنفيذي الأكبر سيتم تعويضه بعدم وجود مكتبات ديناميكية مجمّعة.
يمكنك فرض الربط الثابت لتبعيات Firebase من خلال تحديد الرابط بشكل صريح في Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
الربط الديناميكي
يتم تخزين المكتبات المرتبطة ديناميكيًا في حزمة تطبيقك بشكل منفصل عن الملف التنفيذي الرئيسي لتطبيقك، ويجب تحميلها في وقت تشغيل التطبيق من خلال الرابط الديناميكي. يتم ربط جميع أُطر عمل Apple ديناميكيًا لإتاحة مشاركة الرموز البرمجية بين العمليات، وبالمثل، يمكنك استخدام أُطر العمل الديناميكية لمشاركة الرموز البرمجية بين تطبيقك وأهداف الإضافات. لا يمكنك مشاركة أُطر العمل الديناميكية بين التطبيقات المنفصلة، حتى إذا كانا موقَّعين من قِبل المطوّر نفسه.
إذا أردت استخدام Firebase كعنصر تابع لهدف إطار عمل ديناميكي، عليك أيضًا ربط Firebase ديناميكيًا، وإلا ستواجه تعريفات فئات مكرّرة في وقت تشغيل تطبيقك. الربط الديناميكي هو الإعداد التلقائي في
use_frameworks!، ولكن لا يزال بإمكانك تحديد الربط الديناميكي بشكل صريح في
Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
يُرجى العِلم أنّ الربط الديناميكي قد يزيد من وقت تشغيل تطبيقك، خاصةً إذا كان تطبيقك يتضمّن الكثير من التبعيات.