Firebase डिपेंडेंसी को स्टैटिक या डाइनैमिक तरीके से लिंक करें

CocoaPods 1.9.0 और Firebase 7 के साथ, आपके पास यह चुनने का विकल्प होता है कि आपकी Firebase डिपेंडेंसी को स्टैटिक या डाइनैमिक फ़्रेमवर्क के तौर पर बनाया जाए या नहीं. हमारा सुझाव है कि जब तक आपको डाइनैमिक लाइब्रेरी के कुछ खास व्यवहारों की ज़रूरत न हो, तब तक स्टैटिक फ़्रेमवर्क का इस्तेमाल करें.

ध्यान दें कि GitHub के बाहर डेवलप की गई लाइब्रेरी को सिर्फ़ CocoaPods के 1.9.0 और इसके बाद के वर्शन के साथ भी स्टैटिक तरीके से लिंक किया जा सकता है. फ़िलहाल, इस लाइब्रेरी की सूची में AdMob, Analytics, Firebase ML, और Performance Monitoring शामिल हैं. डिस्ट्रिब्यूशन के अन्य सभी चैनल, जैसे कि zip फ़ाइल, Swift Package Manager, और Carthage, सिर्फ़ स्टैटिक तौर पर लिंक की गई लाइब्रेरी उपलब्ध कराते हैं.

इस दस्तावेज़ में, Apple के प्लैटफ़ॉर्म पर डाइनैमिक और स्टैटिक लिंकिंग के बारे में जानकारी दी गई है. अगर आपको इन कॉन्सेप्ट के बारे में जानकारी नहीं है, तो यहां दिए गए दस्तावेज़ देखें:

इस दस्तावेज़ में, लाइब्रेरी लिंकेज के टाइप के बारे में बताया गया है, न कि बिना एक्सीक्यूट किए जा सकने वाले संसाधन बंडल को लोड करने के बारे में. इसलिए, लाइब्रेरी और फ़्रेमवर्क शब्दों का इस्तेमाल एक-दूसरे के लिए किया जाता है.

स्टैटिक लिंकिंग

स्टैटिक तौर पर लिंक की गई लाइब्रेरी, बिल्ड के समय आपके ऐप्लिकेशन के एक्सीक्यूटेबल में बंडल की जाती हैं. इस वजह से, स्टैटिक लाइब्रेरी में मौजूद ऑब्जेक्ट फ़ाइलें, ऐप्लिकेशन के लॉन्च होने पर आपके ऐप्लिकेशन में मौजूद होंगी. साथ ही, ऐप्लिकेशन लॉन्च होने के समय, डायनैमिक लिंकर को उन्हें हल करने की ज़रूरत नहीं होगी. इस वजह से, स्टैटिक लिंकिंग का इस्तेमाल करने वाले ऐप्लिकेशन तेज़ी से खुलेंगे. इसकी वजह थोड़ी बड़ी बाइनरी / ऐप्लिकेशन की एक्ज़ीक्यूटेबल फ़ाइल है. हालांकि, इस बात का ध्यान रखना चाहिए कि बंडल की गई डाइनैमिक लाइब्रेरी की कमी की वजह से, एक्ज़ीक्यूटेबल साइज़ के बड़े साइज़ को आकलन किया जाएगा.

अपने Podfile में लिंकेज की जानकारी साफ़ तौर पर देकर, Firebase डिपेंडेंसी को स्टैटिक तरीके से लिंक किया जा सकता है:

# cocoapods >= 1.9.0
use_frameworks! :linkage => :static

डाइनैमिक लिंकिंग

डाइनैमिक तौर पर लिंक की गई लाइब्रेरी, आपके ऐप्लिकेशन के मुख्य एक्सीक्यूटेबल से अलग आपके ऐप्लिकेशन बंडल में सेव की जाती हैं. साथ ही, ऐप्लिकेशन लॉन्च होने के समय, डाइनैमिक लिंकर को उन्हें लोड करना होता है. Apple के सभी फ़्रेमवर्क, प्रोसेस के बीच कोड शेयर करने की सुविधा चालू करने के लिए डाइनैमिक तौर पर लिंक किए जाते हैं. इसी तरह, अपने ऐप्लिकेशन और एक्सटेंशन टारगेट के बीच कोड शेयर करने के लिए, डाइनैमिक फ़्रेमवर्क का इस्तेमाल किया जा सकता है. अलग-अलग ऐप्लिकेशन के बीच डाइनैमिक फ़्रेमवर्क शेयर नहीं किए जा सकते. भले ही, दोनों ऐप्लिकेशन पर एक ही डेवलपर ने साइन किया हो.

अगर आपको Firebase को डाइनैमिक फ़्रेमवर्क टारगेट की डिपेंडेंसी के तौर पर इस्तेमाल करना है, तो आपको Firebase को डाइनैमिक तौर पर भी लिंक करना होगा. ऐसा न करने पर, आपको अपने ऐप्लिकेशन के रनटाइम में डुप्लीकेट क्लास डेफ़िनिशन दिखेंगी. use_frameworks! के साथ डाइनैमिक लिंकिंग डिफ़ॉल्ट रूप से चालू होती है. हालांकि, अब भी अपनी Podfile में डाइनैमिक लिंकेज के बारे में साफ़ तौर पर बताया जा सकता है:

# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic

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