2016-01-03 11 views
6

में अंतर्निहित है के रूप में मैं ios गतिशील ढांचे और स्थिर से बड़ा परिवर्तन समझते हैं कि स्थिर लिंक समय में कोड को स्थिर जुड़ा हुआ है (लॉन्च करने से पहले) और गतिशील प्रक्षेपण/रनटाइम पर जुड़ा हुआ है - A.frameworkउपयोग तृतीय पक्ष ढांचे गतिशील ढांचे

मेरे परियोजना एक गतिशील ढांचे से जुड़ा हुआ है:

अब मैं एक परीक्षण परियोजना है।

import A.framework

A.framework एक रूपरेखा इसके अंदर एम्बेडेड है - B.framework

अपने मुख्य परियोजना में मैं B.framework

से कक्षाओं का उपयोग करने के

अब मैं एक साथ देखते हैं कि चाहते हैं मुख्य परियोजना में सरल आयात विवरण:

import B.framework 

यह वास्तव में काम करता है और मैं बीफ्रेमवर्क के अंदर से कोड का उपयोग कर सकता हूं जुड़ा हुआ A.framework

में एम्बेडेड यह कैसे हो सकता है? क्या यह ऐसा कुछ है जो सुरक्षित और विश्वसनीय है? मुख्य परियोजना बीफ्रेमवर्क को कैसे पहचानती है?

क्या ऐसे मामलों में जहां मुख्य परियोजना सीधे परियोजना को B.framework लिंक के बारे में? इस मामले में मैं कड़ी समय में कई "डुप्लिकेट प्रतीक त्रुटियों" देख

सबसे महत्वपूर्ण बात मैं कैसे A.framework निर्माण कर सकते हैं, जबकि इसके अंदर B.framework embedding नहीं है, जबकि बंद पाठ्यक्रम अपने वर्गों और कार्यों

का उपयोग कर

किसी भी स्पष्टीकरण में मदद मिलेगी :)

उत्तर

7

आप ध्यान दें के रूप में, B.framework जोड़ने प्रतीकों नकल करने के लिए नेतृत्व करेंगे। यही कारण है कि एफ्रेमवर्क को बीफ्रेमवर्क को एम्बेड नहीं करना चाहिए। आप किसी अन्य ढांचे में एक रूपरेखा एम्बेड कभी नहीं होना चाहिए अगर वहाँ किसी भी संभावना है कि उपभोक्ता आवेदन एम्बेडेड ढांचे के बारे में परवाह होगा (व्यवहार में, यह क्या तुम सच में यह कर बस कभी नहीं करना चाहिए मतलब है)।

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

संपादित करें (। वहाँ एक अपवाद है, तो आप पूरे पारिस्थितिकी तंत्र (जैसे एप्पल) को नियंत्रित तो umbrella frameworks तरह बातें स्वीकार्य हैं है लेकिन आप एप्पल नहीं कर रहे हैं।।)

: यह लिंक करने के लिए ठीक है, लेकिन एम्बेड नहीं , एक साझा ढांचे में एक साझा ढांचे। कुंजी यह है कि साझा ढांचे की एकमात्र प्रति शीर्ष स्तर के आवेदन से आनी चाहिए। चूंकि वह अंतिम लिंक चरण लोड पर होगा, तो आपके पास डुप्लिकेट प्रतीक नहीं होंगे क्योंकि साझा ढांचे की केवल एक प्रति है। बस उप-ढांचे को अपने अंदर एम्बेड न करें।

उदाहरण के लिए:

  • ढांचे लक्ष्य के साथ प्रोजेक्ट बना जीएमए में
  • खींचें।फ्रेमवर्क लक्ष्य के लिए ढांचा (इससे लिंक हो जाएगा लेकिन एम्बेड नहीं होगा)
  • ऐप लक्ष्य बनाएं
  • क्या ऐप दोनों GMA.framework और आपके परीक्षण ढांचे को लिंक करता है। यह टकराव के बिना ठीक काम करेगा क्योंकि केवल एक जीएमए.फ्रेमवर्क है, और यह केवल ऐप में एम्बेडेड है।
+0

लेकिन अगर मुझे अपने एफ्रेमवर्क के अंदर बीफ्रेमवर्क से कोड का उपयोग करना है तो क्या होगा? यदि मैं बीफ्रेमवर्क को एफ्रेमवर्क से लिंक नहीं करता हूं तो मैं इसकी कार्यक्षमता का उपयोग नहीं कर सकता हूं, इस मामले में मैं अपने स्वयं को लागू नहीं कर सकता क्योंकि यह एक तृतीय पक्ष ढांचा है –

+1

आपको * ए * आयात * बी में नहीं करना है। * लिंक * बी को * में होना चाहिए जब तक कि अंतिम ऐप बी और ए दोनों को लिंक करता है, तो यह सब काम करेगा। यही लिंकर्स के लिए हैं। एक ढांचे को अपने सभी प्रतीकों को हल करने में सक्षम होने की आवश्यकता नहीं है जब तक कि ऐप चलाने के समय तक उन्हें हल कर सके। –

+0

समस्या यह है कि यदि बी से ए को लिंक नहीं किया गया है तो फ्रेमवर्क प्रोजेक्ट न बनाएं और प्रतीकों की त्रुटियों को अपरिभाषित करें क्योंकि मैं उस प्रश्न में समझाता हूं: http://stackoverflow.com/questions/34609229/undefined-symbols-issue-with- googlemobileads –

0

आप एक से अधिक ढांचे के प्रयोग कर रहे हैं, तो आप Cocoa Pods निर्भरता प्रबंधक जो आप एक से अधिक ढांचे का उपयोग करने में मदद मिलेगी की कोशिश कर सकते हैं। यह आपको ब्रेकपॉइंट रखने की भी अनुमति देगा जो आपको ढांचे के अंदर भी डीबग करने में मदद करेगा और आप भी बदलाव कर सकते हैं।

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