हम CocoaPods में use_frameworks का उपयोग क्यों करते हैं?


108

मैंने कई बार use_frameworksकोकोपोड्स में उपयोग किया है Podfile। मुझे आश्चर्य है कि हम इसका उपयोग क्यों करते हैं? मुझे इसका सीधा उत्तर नहीं मिला।

उदाहरण:

platform :ios, '8.0'
use_frameworks!

target "CityWhether" do
    pod 'Alamofire'
    pod 'SwiftyJSON'
end

1
क्या आपका मतलब use_frameworks है! विस्मयादिबोधक बिंदु के साथ? मैं हमेशा उस बारे में उलझन में रहा हूँ! मतलब नहीं।
गैब्रियल जेनसेन

जवाबों:


121

use_frameworksकोकोपॉड्स को बताता है कि आप स्टैटिक लाइब्रेरीज़ के बजाय फ्रेमवर्क का उपयोग करना चाहते हैं। चूंकि स्विफ्ट स्टैटिक लाइब्रेरीज़ का समर्थन नहीं करता है इसलिए आपको फ्रेमवर्क का उपयोग करना होगा।


एक अन्य उत्तर में, मैंने स्टैटिक लाइब्रेरी और फ्रेमवर्क के बीच के अंतरों को समझाया:

कोको टच फ्रेमवर्क

वे हमेशा ओपन-सोर्स होते हैं और आपके ऐप की तरह ही बनाए जाएंगे। (इसलिए Xcode कभी-कभी इसे संकलित करेगा, जब आप अपना ऐप चलाते हैं और हमेशा प्रोजेक्ट को साफ करने के बाद।) फ्रेमवर्क केवल iOS 8 और नए का समर्थन करते हैं, लेकिन आप फ्रेमवर्क में स्विफ्ट और ऑब्जेक्टिव-सी का उपयोग कर सकते हैं।

कोको टच स्टेटिक लाइब्रेरी

जैसा कि नाम कहता है, वे स्थिर हैं। इसलिए वे पहले से ही संकलित हैं, जब आप उन्हें अपनी परियोजना में आयात करते हैं। आप उन्हें अपना कोड दिखाए बिना दूसरों के साथ साझा कर सकते हैं। ध्यान दें कि स्टेटिक लाइब्रेरी वर्तमान में स्विफ्ट का समर्थन नहीं करती हैं। आपको लाइब्रेरी के भीतर ऑब्जेक्टिव-सी का उपयोग करना होगा। एप्लिकेशन को अभी भी स्विफ्ट में लिखा जा सकता है।

सूत्र: मेरा अन्य उत्तर | AddThis.com ब्लॉग


3
जारी नोटों पर लंबी कहानी blog.cocoapods.org/CocoaPods-0.36
Jaime Agudo

7
स्थिर लाइब्रेरी अब Xcode 9 बीटा 4 के रूप में तेजी से समर्थन करते हैं - कोकोपीड्स को इसका समर्थन करने के लिए अपडेट किया जा रहा है, देखें github.com/CocoaPods/CocoaPods/issues/6899
जोसेफ जूल 251717

क्रमबद्ध और मीठा विवरण। यह वास्तव में उपयोगी है
पीयूष

76

use_frameworks!कोको फली गतिशील पुस्तकालयों का उपयोग करने के लिए कहता है, और कारण तेजी से करने के लिए विशेष रूप से स्थिर पुस्तकालयों का समर्थन नहीं है, जिसका अर्थ और कोई चारा नहीं था में एक बिंदु पर बहुत प्रचलित था - लेकिन आप अक्सर नहीं है की जरूरत है use_frameworks!अब।

Xcode 9 बीटा 4, और कोकोआपॉड 1.5.0 के रूप में, स्विफ्ट स्टैटिक लाइब्रेरी अब समर्थित हैं। मुख्य लाभ तेजी से ऐप स्टार्टअप समय है, खासकर अगर आपके पास बहुत सारे फली हैं - आईओएस 10 और 11 सबसे तेज़ नहीं हैं जब आपके पास कई डाइलीब होते हैं।

CocoaPods 1.5.0 अप्रैल 2018 की शुरुआत में जारी किया गया था , इसलिए आपको इसे प्राप्त करने के लिए अपग्रेड करने की आवश्यकता हो सकती है sudo gem install cocoapods:।

मुझे कई पॉड्स मिले हैं जो स्टैटिक लाइब्रेरियों के साथ सही तरीके से काम नहीं करते हैं, हालांकि आपका माइलेज अलग-अलग हो सकता है।


2
मैंने ऐसा किया और फिर मैं उसी No such moduleत्रुटियों में भाग गया । क्या उन कोकोपॉड्स में कोई समस्या है?
Alper

3
मुझे use_modular_headers!अपने पॉडफाइल से जुड़ना पड़ा ताकि इसे पॉड्स के साथ काम करने में आसानी हो सके।
एड्रियन

4
@ जोसेफ "मुख्य लाभ तेजी से ऐप स्टार्टअप समय" है। ऐसा लगता है कि Apple के डायनेमिक लाइब्रेरी डॉक्यूमेंट के विरोधाभास में चल रहा है - जो डीएलएस का एक ही दावा करता है: "लॉन्च होने के बाद इसकी मेमोरी को कम से कम करना।" क्या यहाँ निहितार्थ है कि dll का परिणाम तेजी से लॉन्च समय में होगा यदि उपयोग की जा रही लाइब्रेरी को लॉन्च के समय की आवश्यकता नहीं है, या यह एक लोकप्रिय पुस्तकालय है और इसलिए पहले से ही मेमोरी में लोड है?
टॉल्किनवापस

3
@TolkienWASP यह पेज iOS के बजाय macOS के बारे में लगता है। लेकिन, हाँ, अगर DLL स्टार्ट होने के बाद लोड नहीं होता है, तो dll एक जीत होगी। स्थितियों में आईओएस के मामले में दुख की बात है कि मैंने सभी डीएलएल को लॉन्च करने से पहले लोड किया है, ताकि चीजें धीमी हो जाएं। IOS ऐप स्टार्टअप समय के अनुकूलन के विषय पर कम से कम एक WWDC बात है और यह स्पष्ट रूप से यह सुनिश्चित करने की तर्ज पर कुछ का उल्लेख करता है कि आपके पास 3 या 4 dll से अधिक नहीं है।
जोसेफ

1
मुझे लगता है कि यह ऊपर उल्लिखित वीडियो है: developer.apple.com/videos/play/wwdc2016/406 मैं आपको अपने ऐप लॉन्च की गति को मापने के लिए DYLD_PRINT_STATISTICS पर्यावरण चर का उपयोग करने और देखने के लिए प्रोत्साहित करूंगा।
iMacHumphries

2

use_frameworksघोषणा करता है कि आप स्थैतिक पुस्तकालयों के बजाय गतिशील रूपरेखा का उपयोग करना चाहते हैं

Xcode 9.0 और CocoaPods 1.5.0 जारी होने के साथ, यदि आप उपयोग नहीं करते हैं तो आप तेजी के साथ स्थैतिक पुस्तकालयों का उपयोग कर सकते हैं use_frameworks

इसके साथ एक समस्या use_frameworksयह है कि पॉड्स / प्रोडक्ट्स में आपके सभी फ्रेमवर्क फ्रेमवर्क हैं।

यहाँ एक संबंधित लेख है: ios पर स्थिर और गतिशील रूपरेखाओं का मूल अवलोकन


4
> One performance with use_frameworks is that all your framework in Pods/Products is frameworks. एक प्रदर्शन क्या?
एलेक्स ज़ावाटोन

2

कोकोपोड का [अबाउट] use_frameworks! बाइनरी के प्रकार के लिए जिम्मेदार है:

  • अगर use_frameworks!है वर्तमान -dynamic framework
  • अगर use_frameworks!मौजूद नहीं है -static library

use_frameworks!परियोजना के अनुरूप लक्ष्य में Mach-O Type[के बारे में] प्रतिबिंब है Pods

समयरेखा:

  1. CocoaPods 0.36 पेश किया use_frameworks!जो आपको स्विफ्ट पॉड के लिए उपयोग करना था
  2. CocoaPods 1.5.0 और Xcode 9 ने आपको चुनाव करने की अनुमति दी

[शब्दावली]


-1

जोड़ा जा रहा है

use_frameworks!

पोडफाइल में इसका मतलब है कि हम चाहते हैं कि सूचीबद्ध फ्रेमवर्क को स्थिर ढांचे के बजाय गतिशील रूप से स्थापित किया जाए।


धन्यवाद, लेकिन कृपया गतिशील रूप से स्थैतिक स्थापित बनाम स्थापित करने के बारे में अधिक जानकारी दें।
बफॉक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.