CocoaPods 1.9.0 और Firebase 7 से, यह चुना जा सकता है कि Firebase की डिपेंडेंसी, स्टैटिक या डाइनैमिक फ़्रेमवर्क के तौर पर बनाई जाएं. हमारा सुझाव है कि स्टैटिक फ़्रेमवर्क का इस्तेमाल करें. हालांकि, अगर आपको डाइनैमिक लाइब्रेरी के कुछ खास बिहेवियर की ज़रूरत है, तो डाइनैमिक फ़्रेमवर्क का इस्तेमाल किया जा सकता है.
ध्यान दें कि GitHub के बाहर डेवलप की गई लाइब्रेरी को सिर्फ़ स्टैटिक तौर पर लिंक किया जा सकता है. भले ही, CocoaPods 1.9.0 या उसके बाद के वर्शन का इस्तेमाल किया जा रहा हो. फ़िलहाल, इस लाइब्रेरी की सूची में AdMob, Analytics, Firebase ML, और Performance Monitoring शामिल हैं. ज़िप फ़ाइल, Swift Package Manager, और Carthage जैसे अन्य सभी डिस्ट्रिब्यूशन चैनल, सिर्फ़ स्टैटिक तौर पर लिंक की गई लाइब्रेरी उपलब्ध कराते हैं.
इस दस्तावेज़ में, Apple प्लैटफ़ॉर्म पर डाइनैमिक और स्टैटिक लिंकिंग की जानकारी दी गई है. अगर आपको इन कॉन्सेप्ट के बारे में नहीं पता है, तो यह दस्तावेज़ देखें:
- Mach-O प्रोग्रामिंग के विषय
- डाइनैमिक लाइब्रेरी प्रोग्रामिंग के विषय
- लाइब्रेरी में Firebase का इस्तेमाल करना
इस दस्तावेज़ में, लाइब्रेरी लिंकेज के टाइप के बारे में बताया गया है. इसमें, नॉन-एक्ज़ीक्यूटेबल रिसॉर्स बंडल लोड करने के बारे में नहीं बताया गया है. इसलिए, लाइब्रेरी और फ़्रेमवर्क शब्दों का इस्तेमाल एक ही मतलब के लिए किया गया है.
स्टैटिक लिंकिंग
स्टैटिक तौर पर लिंक की गई लाइब्रेरी, बिल्ड के समय आपके ऐप्लिकेशन के एक्ज़ीक्यूटेबल में बंडल की जाती हैं. इसलिए, स्टैटिक लाइब्रेरी में मौजूद ऑब्जेक्ट फ़ाइलें, आपके ऐप्लिकेशन के लॉन्च होने पर मौजूद रहेंगी. साथ ही, डाइनैमिक लिंकर को ऐप्लिकेशन लॉन्च होने के समय, उन्हें हल करने की ज़रूरत नहीं होगी. नतीजतन, स्टैटिक लिंकिंग का इस्तेमाल करने वाले ऐप्लिकेशन, तेज़ी से लॉन्च होंगे. हालांकि, इससे बाइनरी / ऐप्लिकेशन का एक्ज़ीक्यूटेबल थोड़ा बड़ा हो जाएगा. हालांकि, यह ध्यान रखना ज़रूरी है कि बंडल की गई डाइनैमिक लाइब्रेरी न होने की वजह से, एक्ज़ीक्यूटेबल का साइज़ बड़ा नहीं होगा.
Podfile में लिंकिंग की जानकारी साफ़ तौर पर देकर, Firebase की डिपेंडेंसी को स्टैटिक तौर पर लिंक किया जा सकता है:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
डाइनैमिक लिंकिंग
डाइनैमिक तौर पर लिंक की गई लाइब्रेरी, आपके ऐप्लिकेशन के बंडल में, ऐप्लिकेशन के मुख्य एक्ज़ीक्यूटेबल से अलग सेव की जाती हैं. साथ ही, डाइनैमिक लिंकर को ऐप्लिकेशन लॉन्च होने के समय, उन्हें लोड करना होता है. Apple के फ़्रेमवर्क, प्रोसेस के बीच कोड शेयर करने के लिए, डाइनैमिक तौर पर लिंक किए जाते हैं. इसी तरह, अपने ऐप्लिकेशन और एक्सटेंशन टारगेट के बीच कोड शेयर करने के लिए, डाइनैमिक फ़्रेमवर्क का इस्तेमाल किया जा सकता है. अलग-अलग ऐप्लिकेशन के बीच डाइनैमिक फ़्रेमवर्क शेयर नहीं किए जा सकते. भले ही, दोनों पर एक ही डेवलपर का हस्ताक्षर हो.
अगर आपको डाइनैमिक फ़्रेमवर्क टारगेट की डिपेंडेंसी के तौर पर Firebase का इस्तेमाल करना है, तो आपको Firebase को भी डाइनैमिक तौर पर लिंक करना होगा. ऐसा न करने पर, आपके ऐप्लिकेशन के रनटाइम में, क्लास की डुप्लीकेट परिभाषाएं दिखेंगी. use_frameworks! के साथ, डाइनैमिक लिंकिंग डिफ़ॉल्ट बिहेवियर है. हालांकि, Podfile में डाइनैमिक लिंकेज की जानकारी साफ़ तौर पर दी जा सकती है:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
ध्यान दें कि डाइनैमिक लिंकिंग से, आपके ऐप्लिकेशन का लॉन्च टाइम बढ़ सकता है. ऐसा तब हो सकता है, जब आपके ऐप्लिकेशन में बहुत सारी डिपेंडेंसी हों.