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
ध्यान दें कि डाइनैमिक लिंकिंग की वजह से, आपके ऐप्लिकेशन को लॉन्च होने में ज़्यादा समय लग सकता है. ऐसा खास तौर पर तब होता है, जब आपके ऐप्लिकेशन में कई डिपेंडेंसी हों.