2014-07-23 4 views
9

बेसक्या हमें एक्सकोड प्रोजेक्ट में ढांचे को जोड़ने की ज़रूरत नहीं है? इस प्रश्न पर

Why don't iOS framework dependencies need to be explicitly linked to a static library

मैं चयनित जवाब पढ़ सकते हैं और अभी भी बहुत समझ में नहीं आता मैं एक उदाहरण परियोजना

Test Project on Github

परीक्षण परियोजना में बनाया है, मैं सब ढांचे को दूर पुस्तकालयों के साथ लिंक बाइनरी और फ़ाइल नेविगेशन दोनों मुख्य परियोजना और स्थिर पुस्तकालय (फाउंडेशन समेत) के लिए। ढांचे और UIKit.framework भी), मूल रूप से, दोनों परियोजनाओं को 0 ढांचे के लिए लिंक।

प्रश्न परियोजना, क्यों इसके अभी भी काम कर रहा है के लिए Mapkit.framework संदर्भ के बिना

  • हैं स्थिर पुस्तकालय, यह सहित है MapKit/MapKit.h में?
  • मुख्य परियोजना में, मैं परियोजना से UIKit.framework और Foundation.framework को हटाता हूं, यह अभी भी क्यों काम कर रहा है?
  • चूंकि यह अभी काम कर रहा है, क्या बाद में कोई समस्या होगी?

आपकी टिप्पणी के लिए धन्यवाद।

पीएस काम कर रहा है, मेरा मतलब है कि मैं सिम्युलेटर पर चला सकता हूं और मैं बिना किसी त्रुटि के मुख्य परियोजना को संग्रहीत कर सकता हूं।

संपादित 25/07/2014

मुझे लगता है कि मैं पर काम कर रहा हूँ असली अनुप्रयोग के साथ की कोशिश की, यह एक ही है।

  • मैं फाउंडेशन, UIKit, CoreData और फ़ाइल नेविगेशन में 10 अन्य ढांचे को हाइलाइट करता हूं, ठीक है, उन सभी को।
  • सही का निशान हटाएँ उपयोगिताएँ कक्ष में लक्ष्य -> ​​लक्ष्य सदस्यता
  • बिल्ड: पास, रन: के रूप में उम्मीद

दर्रा मेरे ऐप का हर कार्यक्षमता अभी भी काम कर रहा है। मुझे यह नहीं मिला।

उत्तर

25

अपनी परियोजना निर्माण सेटिंग्स की जांच करें। एलएलवीएम 5.1 - भाषा - मॉड्यूल के नीचे आपको 'लिंक फ्रेमवर्क स्वचालित रूप से' विकल्प देखना चाहिए। आपके मामले में ऐसा लगता है कि यह 'हां' पर सेट है, डिफ़ॉल्ट।

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

संपादित करें: प्रासंगिक 'What's New?' document से:

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

यह देखने का एक और तरीका है कि संकलक बहुत चालाक @import को #import उत्परिवर्तित जब ढांचे उचित रूप से बनाया गया है है। सभी सिस्टम ढांचे रहे हैं।

+0

धन्यवाद @ टॉमी, हाँ, यह हाँ पर सेट है। अगर मैं पूछ सकता हूं, लिंक फ्रेमवर्क के लिए डिफ़ॉल्ट मान स्वचालित रूप से हाँ है, है ना? यदि ऐसा है, तो क्या मैं कह सकता हूं कि जब मैं एक नई परियोजना तैयार करता हूं, तो मुझे किसी भी ढांचे से लिंक करने की आवश्यकता नहीं है? –

+2

हां, यह डिफ़ॉल्ट रूप से अब 'हां' है। इसके अलावा, मेरी पुरानी प्रोजेक्ट खोलने से ऐसा लगता है कि जब आप फीचर को पूर्ववत करते हैं तो कुछ भी खोलते हैं तो यह 'हां' पर डिफ़ॉल्ट होता है। तो मुझे नहीं लगता कि आपको लिंकिंग चरण में फिर से [ठीक से निर्मित] ढांचे को स्पष्ट रूप से सूचीबद्ध करने के बारे में चिंता करने की आवश्यकता है। पेडेंटिकली: आप अभी भी उनसे जुड़ रहे होंगे, यह सिर्फ इतना है कि संकलक स्वयं के लिए इसे समझ सकता है। – Tommy

+0

स्पष्टीकरण के लिए धन्यवाद, मुझे लगता है कि यह हाल ही में जोड़ा गया एक नया फीचर है और मैंने एलएलवीएम परिवर्तन लॉग नहीं पढ़ा है, इसलिए मुझे इसके बारे में पता नहीं था। –

संबंधित मुद्दे

 संबंधित मुद्दे