CocoaPods 1.9.0 और Firebase 7 से शुरू करके, यह चुना जा सकता है कि आपकी Firebase डिपेंडेंसी को स्टैटिक या डाइनैमिक फ़्रेमवर्क के तौर पर बनाया जाए. हमारा सुझाव है कि जब तक आपको डाइनैमिक लाइब्रेरी के कुछ खास फ़ंक्शन की ज़रूरत न हो, तब तक स्टैटिक फ़्रेमवर्क का इस्तेमाल करें.
ध्यान दें कि GitHub के बाहर डेवलप की गई लाइब्रेरी को सिर्फ़ स्टैटिक तौर पर लिंक किया जा सकता है. ऐसा CocoaPods 1.9.0 और इसके बाद के वर्शन के साथ भी किया जा सकता है. फ़िलहाल, इस लाइब्रेरी की सूची में AdMob, Analytics, Firebase ML, और Performance Monitoring शामिल हैं. वितरण के अन्य सभी चैनलों में, सिर्फ़ स्टैटिक तौर पर लिंक की गई लाइब्रेरी उपलब्ध होती हैं. जैसे, zip फ़ाइल, 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
ध्यान दें कि डाइनैमिक लिंकिंग की वजह से, आपके ऐप्लिकेशन को लॉन्च होने में ज़्यादा समय लग सकता है. ऐसा खास तौर पर तब होता है, जब आपके ऐप्लिकेशन में कई डिपेंडेंसी हों.