ربط تبعيات 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

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