2015-02-26 6 views
9

मैं एक फ्रेमवर्क है कि एक और फ्रेमवर्क का उपयोग कर रहे एम्बेड करने के लिए कोशिश कर रहा हूँ और इस सिम्युलेटर में बस ठीक काम करता है के भीतर एक फ्रेमवर्क के लिए लोड नहीं है, लेकिन यह एक iOS डिवाइस पर दुर्घटनाओं:dyld: लाइब्रेरी एक फ्रेमवर्क

dyld : पुस्तकालय लोड नहीं हुआ: @ rpath/FrameworkB.framework/FrameworkB से संदर्भित: /private/var/mobile/Containers/Bundle/Application/B072CD7C-8595-4AE4-A506-26832A0F4402/FrameworkTest.app/Frameworks/FrameworkA.framework/ फ्रेमवर्क ए कारण: छवि नहीं मिली

यह एक्सकोड में मेरी संरचना है ई:

  • FrameworkTest.xcodeproj (एप्लिकेशन परियोजना)
    • FrameworkA.xcodeproj (कोको टच फ्रेमवर्क)
      • FrameworkB.xcodeproj (कोको टच फ्रेमवर्क)

ऐप (फ्रेमवर्कटेस्ट) फ्रेमवर्कए से कक्षा A का उपयोग करता है (जो एम्बे है फ्रेमवर्कटेस्ट ऐप में dded)। कक्षा A फ्रेमवर्कबी (जो फ्रेमवर्क ए में जुड़ा हुआ है) से B वर्ग का उपयोग करता है।

यह सिम्युलेटर में ठीक काम करता है, लेकिन यह डिवाइस पर काम नहीं करता है।

संरचना थोड़ा अजीब लग सकती है, लेकिन जब मैं ऐप विकसित करता हूं तो मैं ढांचे को विकसित कर रहा हूं, इसलिए मैं अपने ऐप प्रोजेक्ट के अंदर फ्रेमवर्क परियोजनाओं को जोड़ना चाहता हूं।

मैंने आपको देखने के लिए project on GitHub अपलोड किया है, यदि आपको नज़दीक रूप से देखने की आवश्यकता है। (श्रेणी A को AppDelegate.m फ़ाइल में शामिल किया गया है)

यह आईओएस सिम्युलेटर में क्यों काम कर रहा है और डिवाइस पर नहीं? और मैं इसे डिवाइस पर कैसे काम कर सकता हूं?

संपादित करें:

simonthumper टिप्पणी में पता चलता है, मैं भी Copy Files FrameworkA के लिए चरण बिल्ड में फ़्रेमवर्क गंतव्य के रूप में करने के लिए FrameworkB.framework जोड़ने की कोशिश की है, लेकिन है कि मुझे कंसोल में इस त्रुटि देता है:

dyld: लाइब्रेरी लोड नहीं: @ rpath/FrameworkB.framework/FrameworkB से संदर्भित /private/var/mobile/Containers/Bundle/Application/2A38A2BC-9CD7-4AF6-9E50-42C16D92D6B2/FrameworkTest.app/Frameworks/ फ्रेमवर्कए। फ्रेमवर्क/फ्रेमवर्क ए कारण: कोई उपयुक्त छवि नहीं मिली। मिला: /private/var/mobile/Containers/Bundle/Application/2A38A2BC-9CD7-4AF6-9E50-42C16D92D6B2/FrameworkTest.app/Frameworks/FrameworkA.framework/Frameworks/FrameworkB.framework/FrameworkB: mmap() त्रुटि 1 पता = 0x10012C000, आकार = 0x00008000 सेगमेंट = __ टेक्स्ट सेगमेंट :: मानचित्र() मैपिंग /private/var/mobile/Containers/Bundle/Aplication/2A38A2BC-9CD7-4AF6-9E50-42C16D92D6B2/FrameworkTest.app/Frameworks/FrameworkA। ढांचा/Frameworks/FrameworkB।ढांचे/फ्रेमवर्क बी

+0

क्या आपको प्रतिलिपि बनाने के चरण में फ्रेमवर्क मिला है? – simonthumper

+0

@ सिमोनथम्पर मैंने अधिक जानकारी के साथ प्रश्न संपादित किया है यदि मैं ऐसा करता हूं :-) –

+0

हाय। मुझे भी इसी तरह का मुद्दा सामना करना पड़ रहा है। लेकिन मेरे पास मेरे साथ दूसरा फ्रेमवर्क प्रोजेक्ट कोड नहीं है (केवल फ्रेमवर्क बी। फ्रेमवर्क मेरे पास है)। कोई विचार मैं इसके बारे में कैसे जा सकता हूं? –

उत्तर

8

मैं इस मुद्दे के साथ एप्पल से संपर्क किया और मेरी समस्या का समाधान मिल गया। एप्पल के तकनीकी समर्थन यह स्पष्ट कर दिया, कि मैं अपने आवेदन परियोजना के लिए FrameworkB.xcodeproj जोड़ने की जरूरत है, तो अपने प्रोजेक्ट संरचना होती है:

  • FrameworkTest.xcodeproj (एप्लिकेशन परियोजना)
    • FrameworkA.xcodeproj (कोको टच फ्रेमवर्क)
      • FrameworkB.xcodeproj (कोको टच फ्रेमवर्क)
    • FrameworkB.xcodeproj (कोको टच फ्रेमवर्क)

जब मैं इस आवेदन परियोजना किया है FrameworkB.framework एक एंबेडेड लाइब्रेरी के रूप में शामिल कर सकते हैं: FrameworkTest.xcodeproj build phases

यह मेरी समस्या हल और यह संभव किसी iOS उपकरण पर इसे चलाने के लिए बनाया है।

यदि निर्माण रिलीज पर क्रैश हो जाता है: अपने एंटरप्राइज़ वितरण प्रमाणपत्र को रद्द करें और समस्या को हल करने के लिए एक नया बनाएं। एक बार मैंने ऐसा किया कि यह पूरी तरह से काम किया।

+0

हाय। मुझे भी इसी तरह का मुद्दा सामना करना पड़ रहा है। लेकिन मेरे पास मेरे साथ दूसरा फ्रेमवर्क प्रोजेक्ट कोड नहीं है (केवल फ्रेमवर्क बी। फ्रेमवर्क मेरे पास है)। कोई विचार मैं इसके बारे में कैसे जा सकता हूं? –

+0

+1 लेकिन यह समाधान नहीं होना चाहिए - यदि हम एकल फ़ाइल एसडीके कैसे बना सकते हैं :-(तिथि के अनुसार स्थिति के लिए कोई अपडेट? – Angad

+0

मेरी समस्या हल हो गई, धन्यवाद। किसी भी तरह, क्या हम फ्रेमवर्क बी को दो बार नहीं जोड़ रहे हैं? मैं उस समाधान के साथ तुलना करूंगा जिसमें इसे दो बार (कथित तौर पर) जोड़ा नहीं गया है, लेकिन मेरे पास यह नहीं है ... या एक्सकोड बुद्धिमान है जो इसे केवल एक बार जोड़ने के लिए पर्याप्त है? मुझे विश्वास है कि वे हैं ढांचे (गतिशील साझा पुस्तकालय, दाएं?), पहली बार फ्रेमवर्क बी को फ्रेमवर्क में जोड़ा जाता है, केवल संदर्भ की प्रतिलिपि बनाई जाती है। हालांकि, जब फ्रेमवर्क बी को फ्रेमवर्क में जोड़ा जाता है, तो कोड की प्रतिलिपि बनाई जाती है, संदर्भ नहीं। क्या मैं सही हूं? कोई इसे समझने के लिए मुझे सही दिशा में इंगित करें, कृपया :) – inigo333

4

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

विकल्प 1 (टीम वर्क के लिए उपयुक्त नहीं)

क्या त्रुटि गायब किए गए अपने FrameworkTest लक्ष्य की जनरल टैब में एंबेडेड बाइनरी को FrameworkB जोड़ने के लिए किया गया था। xcode - embedded binaries

विकल्प 2

ठीक है, अन्य डेवलपर के साथ साझा करने के लिए सुनिश्चित परियोजना महत्वपूर्ण :) है। क्या आपने इस दृष्टिकोण को आजमाया? नई प्रतिलिपि फ़ाइलें चरण फ़्रेमwrokA के चरण चरण बनाएं और फ्रेमवर्क गंतव्य में फ्रेमवर्क जोड़ें। new copy phase

लेकिन मुझे यकीन नहीं है कि यह सिम्युलेटर पर क्यों काम करता है। अगर कोई जानता है, तो कृपया टिप्पणी करने के लिए स्वतंत्र महसूस करें।

चियर्स

+0

धन्यवाद, लेकिन मैंने फ्रेमवर्क बी को एम्बेडेड बैनरीज में भी जोड़ने का प्रयास किया है, और यह काम करता है। लेकिन यह सीधे 'DerivedData' निर्देशिका से लिंक करता है, जो कि मैं बाद में नहीं हूं। यह केवल आपके मैक पर काम करेगा। मैं प्रोजेक्ट को अन्य डेवलपर्स के साथ साझा कर रहा हूं, इसलिए इसे किसी विशिष्ट पथ के बिना काम करने की ज़रूरत है।:-) –

+0

@ थॉमस क्लेमेन्सन मैंने बस अपना संपादन पढ़ा है, इसलिए मेरा दूसरा समाधान आपके लिए भी बुरा है ... लेकिन यह मेरे लिए काम करता है (आपके प्रोजेक्ट का उपयोग करके) – micromanc3r

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