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

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

ملاحظة: لا يمكن ربط المكتبات التي تم تطويرها خارج GitHub بشكل ثابت إلا حتى باستخدام CocoaPods 1.9.0 والإصدارات الأحدث. تتضمن قائمة المكتبة هذه حاليًا AdMob و"إحصاءات Google" وتعلُّم الآلة في Firebase و"مراقبة الأداء" وتوفر جميع قنوات التوزيع الأخرى، بما في ذلك ملف ZIP وSwift Package Manager وقرطاج مكتبات مرتبطة ثابتًا فقط.

يفترض هذا المستند معرفة عملية بالربط الديناميكي والثابت على أنظمة Apple الأساسية. إذا لم تكن معتادًا على هذه المفاهيم، فألق نظرة على الوثائق التالية:

بما أنّ هذا المستند يتعلّق بأنواع ربط المكتبات وليس بتحميل حِزم موارد غير قابلة للتنفيذ، يتم استخدام المصطلحَين library وframework بالتبادل.

الربط الثابت

يتم تجميع المكتبات المرتبطة بشكل ثابت في تطبيقك القابل للتنفيذ في وقت الإنشاء. ونتيجةً لذلك، ستكون ملفات الكائنات المتوفّرة في المكتبة الثابتة متوفّرة في تطبيقك عند تشغيله، ولن تحتاج إلى حلّ في وقت تشغيل التطبيق من خلال الرابط الديناميكي. وبالتالي، سيتم تشغيل التطبيقات التي تستخدم الربط الثابت بشكل أسرع. يرجع ذلك إلى وجود برنامج ثنائي أو تطبيق ثنائي أكبر حجمًا قابل للتنفيذ، علمًا أنّه يجب ملاحظة أنّ الحجم الأكبر القابل للتنفيذ سيعوّضه نقص المكتبات الديناميكية المجمّعة.

يمكنك فرض ربط ثابت لتبعيات Firebase عن طريق تحديد الارتباط بشكل صريح في Podfile:

# cocoapods >= 1.9.0
use_frameworks! :linkage => :static

الربط الديناميكي

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

إذا كنت تريد استخدام Firebase كاعتمادية لاستهداف إطار عمل ديناميكي، عليك أيضًا ربط Firebase ديناميكيًا، وإلّا ستواجه تعريفات فئات مكرّرة في وقت تشغيل تطبيقك. الربط الديناميكي هو السلوك التلقائي مع use_frameworks!، ولكن لا يزال بإمكانك تحديد الربط الديناميكي بشكل واضح في Podfile:

# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic

لاحظ أن الربط الديناميكي قد يزيد من وقت إطلاق تطبيقك، خاصة إذا كان تطبيقك يعتمد على الكثير من التبعيات.