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

بدءًا من الإصدار 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

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