Xcode4 में फ्रेमवर्क और स्थिर पुस्तकालय के बीच अंतर, और उन्हें कैसे कॉल करें


133

मैं एक्सकोड और ऑब्जेक्टिव-सी के लिए काफी नया हूं। मैं एक बहुत बुनियादी सवाल पूछना चाहता हूं।

मैंने देखा कि जब प्रोजेक्ट सेटिंग्स में "बाइनरी को पुस्तकालयों से जोड़ते हैं", तो कार्यक्षेत्र में अन्य परियोजनाओं से आयातित फ्रेमवर्क और लाइब्रेरी के बारे में मतभेद हैं।

पहला सवाल, एक रूपरेखा क्यों है? और एक पुस्तकालय क्यों है? क्या मेरी लाइब्रेरी एक ढांचा नहीं हो सकती?

और फिर, एक .h फ़ाइल से, मैं अपने आयातित स्थिर पुस्तकालय से कक्षाएं कैसे बुला सकता हूं?

मुझे लगता है कि एक उपसर्ग होना चाहिए, लेकिन मुझे यह नहीं मिला। न तो "प्रोजनेम / मायक्लास.ह" काम कर रहे हैं।

कृपया, जितना हो सके उतना विशिष्ट बनें।

धन्यवाद


एक बुनियादी सवाल नहीं है
माशिह

जवाबों:


140

स्थिर पुस्तकालयों पर सबसे बड़ा लाभ यह है कि वे संकलित पुस्तकालय बाइनरी और किसी भी संबंधित हेडर की पैकेजिंग का एक अच्छा तरीका है। उन्हें आपकी परियोजना में गिराया जा सकता है (जैसे फाउंडेशन और यूआईकिट जैसे एसडीके के अंतर्निहित ढांचे) और उन्हें बस (ज्यादातर समय) काम करना चाहिए।

अधिकांश चौखटे में गतिशील पुस्तकालय होते हैं; मैक फ्रेमवर्क टेम्पलेट का उपयोग करके Xcode में बनाए गए फ्रेमवर्क एक गतिशील लाइब्रेरी बनाएंगे। आईफोन डायनेमिक फ्रेमवर्क का समर्थन नहीं करता है, यही वजह है कि आईओएस कोड के पुन: प्रयोज्य पुस्तकालयों के बजाय स्थिर पुस्तकालयों के रूप में वितरित किया जाना आम हो गया है।

स्टेटिक लाइब्रेरी ठीक हैं, लेकिन उन्हें उपयोगकर्ता की ओर से अतिरिक्त काम की आवश्यकता है। आपको अपने प्रोजेक्ट को लाइब्रेरी से लिंक करने की आवश्यकता है और आपको अपनी प्रोजेक्ट सेटिंग्स में हेडर फ़ाइलों की प्रतिलिपि बनाने या उन्हें कहीं और संदर्भित करने की आवश्यकता है जो आपकी बिल्ड सेटिंग्स में उपयुक्त हेडर खोज पथ सेट करके हैं।

इसलिए: संक्षेप में, मेरी राय यह है कि आपके पुस्तकालय को वितरित करने का सबसे अच्छा तरीका एक रूपरेखा है। IOS के लिए "स्टैटिक" फ्रेमवर्क बनाने के लिए, आप अनिवार्य रूप से एक सामान्य फ्रेमवर्क ले सकते हैं और अपने संकलित स्टैटिक लाइब्रेरी के साथ बाइनरी को बदल सकते हैं। यह है कि मैं अपने पुस्तकालयों में से एक को कैसे वितरित करता हूं, रेस्टी और भविष्य में अपने पुस्तकालयों को वितरित करने का मेरा इरादा है।

आप उस परियोजना में आपूर्ति की गई राकफाइल को देखना चाहते हैं (यदि आप जागरूक नहीं हैं, तो रेक रूबी मेक के बराबर है)। मेरे पास अपने प्रोजेक्ट को संकलित करने (उपयोग करने xcodebuild) और iOS के लिए एक स्थिर ढांचे के रूप में पैकेजिंग के लिए बहुत सारे कार्य हैं । आपको यह उपयोगी लगना चाहिए।

वैकल्पिक रूप से, आप iOS फ्रेमवर्क बनाने के लिए इन Xcode 4 टेम्प्लेट का उपयोग करना चाह सकते हैं ।

अपडेट 9 दिसंबर 2013 : यह एक लोकप्रिय उत्तर है, इसलिए मैंने सोचा कि मैं यह कहना चाहूंगा कि पुस्तकालय वितरण के लिए मेरी पहली पसंद बदल गई है। किसी भी उपभोक्ता या निर्माता के रूप में किसी भी तीसरे पक्ष के पुस्तकालय के लिए मेरी पहली पसंद कोकोआपोड्स है। मैं कोकोआपोड्स का उपयोग करके अपने पुस्तकालयों को वितरित करता हूं और एक पूर्व-स्थिर स्थैतिक पुस्तकालय की पेशकश करता हूं जो हेडर के साथ एक कमबैक विकल्प के रूप में होता है।


1
इसलिए पुस्तकालय या तो स्थिर और गतिशील हो सकते हैं, और फ्रेमवर्क बस पुस्तकालयों का एक समूह है, जो या तो गतिशील या स्थिर हो सकता है, क्या यह सही समझ है?
टोनी

ऐसा लगता है कि Xcode फ्रेमवर्क लक्ष्य आपको हेडर की प्रतिलिपि बनाने की अनुमति देता है, लेकिन संसाधनों को बंडल नहीं करता है। वितरित स्थिर पुस्तकालयों में हेडर भी हो सकते हैं?
टोनी

अनुवर्ती प्रश्न: क्या यह मायने रखता है कि आपने डिबग या डिस्ट्रीब्यूशन का उपयोग करके एक ढांचा बनाया था? क्योंकि अन्यथा वितरण के एक छोटे पदचिह्न हैं।
एल्ड्रिच सह

2
@GoRoS हाँ मैं करता हूँ; वास्तव में मैंने सिर्फ एक ग्राहक के लिए कुछ काम किया जो कि कोकोआपॉड का उपयोग करके अपने निजी एसडीके को उपलब्ध करा रहा था। इस ट्रिक को संकलित स्टैटिक लाइब्रेरी, हेडर्स और पॉडसेप के साथ एक सार्वजनिक रेपो है जो इस ओर इशारा करता है और आपके स्रोत के साथ एक निजी रेपो है। आदर्श रूप से आपके पास अपने निजी रेपो की जांच करने, अपने सार्वजनिक रेपो को संकलित करने और अपडेट करने, दोनों को सिंक में रखने के लिए किसी प्रकार का CI / स्वचालन होगा। सार्वजनिक रेपो में वास्तविक रूप से रिलीज़ किए गए टैग को टैग करने के लिए टैग का उपयोग करें (और शायद निजी रेपो में भी ताकि आप जानते हैं कि सार्वजनिक रिलीज़ बनाने के लिए किस स्रोत का उपयोग किया गया था)।
ल्यूक रेडपाथ

1
@LukeRedpath सीआई के साथ आपका समाधान बहुत ही अच्छा लगता है ... क्या आप कुछ अच्छे लेख / ब्लॉग के बारे में जानते हैं कि इसे कैसे सेट किया जाए? आदर्श रूप से जेनकिंस के साथ
micromanc3r

19

मूल रूप से, रूपरेखा पुस्तकालय हैं और उनके साथ काम करने के लिए एक आसान तंत्र प्रदान करते हैं। यदि आप एक रूपरेखा "अंदर" देखते हैं, तो यह केवल एक निर्देशिका है जिसमें स्थिर पुस्तकालय और हेडर फाइलें (मेटाडेटा के साथ कुछ फ़ोल्डर संरचना में) हैं।

यदि आप अपना स्वयं का ढांचा बनाना चाहते हैं, तो आपको एक "स्टैटिक लाइब्रेरी" बनाना होगा और इसे एक विशिष्ट तरीके से पैक करना होगा। इस सवाल को देखें

सामान्य तौर पर, प्लेटफार्मों पर फ्रेमावर्क्स का उपयोग पुन: प्रयोज्य व्यवहार के लिए किया जाता है जहां आप अपना कोड "मौजूदा ढांचे में" जोड़ते हैं। यदि आप कुछ विशिष्ट कार्यक्षमता रखना चाहते हैं, तो आप एक पुस्तकालय (जैसे तीन20) का उपयोग करना चाहते हैं और इसे अपने एप्लिकेशन में वितरित कर सकते हैं


1
ध्यान दें कि ऐसी कोई आवश्यकता नहीं है कि एक रूपरेखा में एक स्थिर पुस्तकालय होना चाहिए। वास्तव में, मैक ओएस एक्स पर अधिकांश चौखटों में स्थिर पुस्तकालय नहीं होते हैं - इनमें गतिशील पुस्तकालय होते हैं।

धन्यवाद यह स्पष्ट है, लेकिन मैं एक स्थिर लाइब्रेरी में एक .m फ़ाइल के भीतर से क्लास कैसे बुला सकता हूं? क्या "लाइब्रेरियों के साथ लिंक बायनेरी" जोड़ने के अलावा, #import "MyClass.h" को कॉल करना पर्याप्त है?
लियोनार्डो

@ सुंदर तुम सही हो मुझे केवल "पुस्तकालय" लिखना चाहिए ^ ^; फिर भी, पुस्तकालयों के बिना लगभग कोई भी ढांचा है - ज्यादातर मामलों में, आप संकलन के लिए एक रूपरेखा के खिलाफ लिंक करते हैं और पुस्तकालय लक्ष्य प्रणाली पर मौजूद है। यह फिर से यह व्यवहार-बनाम-कार्यक्षमता बात है
मार्टिन उलरिच

@ लियोनार्डो हां, मूल रूप से वही है जो आपको करना है। बस सुनिश्चित करें कि .h-files आपके रास्ते में कहीं हो। यदि आपके पास लिबारे की एक्सकोड परियोजना है, तो आप एक निर्भरता के रूप में परियोजना और उसके लक्ष्य को शामिल कर सकते हैं ताकि आपको अधिक डिबगिंग सुविधाएँ मिलें और अपने रास्ते में .h-files
मार्टिन उलरिच

मैं उलझन में हूं, मैंने कहा कि आपका जवाब सही था, लेकिन मैंने इसे "-1" के रूप में चिह्नित किया?!?!? दूसरा, पुस्तकालय एक कार्यक्षेत्र का हिस्सा है, और मुख्य परियोजना से सही ढंग से जुड़ा हुआ है। लेकिन मुझे अभी भी एप्लिकेशन बनाते समय "क्लास नॉट" "लाइन पर #import" MyClass.h "मिल रहा है। मुझे पता है कि इसे काम करने के लिए एक चाल है।
लियोनार्डो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.