بدءًا من CocoaPods 1.9.0 وFirebase 7، يمكنك اختيار ما إذا كانت تبعيات 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
يُرجى العِلم أنّ الربط الديناميكي قد يزيد من وقت تشغيل تطبيقك، خاصةً إذا كان تطبيقك يتضمّن الكثير من التبعيات.