ربط اعتماديات Firebase بشكل ثابت أو ديناميكي

بدءًا من CocoaPods 1.9.0 وFirebase 7، يمكنك اختيار ما إذا كانت تبعيات Firebase يتم إنشاؤها كأُطر عمل ثابتة أو ديناميكية. ننصحك باستخدام أُطر العمل الثابتة ما لم تكن بحاجة إلى سلوكيات مكتبة ديناميكية معيّنة.

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

يُرجى العِلم أنّ الربط الديناميكي قد يزيد من وقت تشغيل تطبيقك، خاصةً إذا كان تطبيقك يتضمّن الكثير من التبعيات.