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

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

لاحظ أن المكتبات التي تم تطويرها خارج GitHub لا يمكن ربطها إلا بشكل ثابت حتى مع CocoaPods 1.9.0 والإصدارات الأحدث. حاليًا ، تتضمن قائمة المكتبة هذه AdMob و Analytics و Firebase ML ومراقبة الأداء. توفر جميع قنوات التوزيع الأخرى ، بما في ذلك الملف المضغوط و 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

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