2015-02-27 14 views
5

के लिए बिल्डिंग मैंने कस्टम ऑब्जेक्टिव-सी फ्रेमवर्क बनाया है। मैं इसे किसी दिए गए आईओएस प्रोजेक्ट में आयात करना चाहता हूं और आईओएस सिम्युलेटर और एक वास्तविक डिवाइस दोनों पर इसकी उपलब्ध कार्यक्षमता का उपयोग करना चाहता हूं। ढांचे को आयात करने के लिए, मैं इसे बिल्ड चरणों> लाइब्रेरी के साथ लिंक बाइनरी ऐप के लक्ष्य में सेटिंग का उपयोग करके लिंक करता हूं। मैं तो इस कथन से मेरी वर्गों में से एक में आयात करने में सक्षम हूँ:एक्सकोड 6 त्रुटि - "अनुपलब्ध आवश्यक आर्किटेक्चर i386" जब आईओएस सिम्युलेटर

#import <CustomFramework/CustomFramework.h> 

मैं अपने ढांचे की कक्षाओं ठीक दृष्टांत सकता है, लेकिन जब मैं एक डिवाइस पर अपने प्रोजेक्ट को चलाने के लिए प्रयास करते हैं, मैं निम्नलिखित त्रुटि मिलती है संदेश:

dyld: Library not loaded: @rpath/CustomFramework.framework/CustomFramework 
Referenced from: /var/mobile/Applications/A61E882D-481A-4C0B-B4FD-69F5D24968BF/TestApp.app/TestApp 
Reason: image not found 

और अगर मैं सिम्युलेटर पर इसे चलाने के लिए प्रयास करते हैं, मुझे कोई दूसरी त्रुटि संदेश मिलता है:

ld: warning: ignoring file /Users/user/Desktop/CustomFramework.framework/CustomFramework, missing required architecture i386 in file /Users/user/Desktop/CustomFramework.framework/CustomFramework (2 slices) 
Undefined symbols for architecture i386: 
    "_OBJC_CLASS_$_CustomFramework", referenced from: 
     objc-class-ref in AppDelegate.o 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

यह तब होता है जब मैं ढांचे से एक वर्ग का दृष्टांत। अगर मैं ढांचे को आयात करता हूं लेकिन वास्तव में इसका उपयोग नहीं करता, तो मेरा ऐप सफलतापूर्वक बनाता है। जब भी मैं कुछ कारणों से ढांचे से कक्षा को तुरंत चालू करता हूं तो यह सिर्फ त्रुटियां होती है।

डिवाइस पर ऐप बनाने के लिए, मैंने this SO उत्तर का पालन किया। ढांचे को जोड़ने के बजाय, मैंने लक्ष्य की चरण सेटिंग में एक नई प्रतिलिपि फ़ाइलें चरण जोड़ा, गंतव्य को फ्रेमवर्क पर सेट किया, और अपना ढांचा जोड़ा।

यह बहुत अच्छा काम करता है; हालांकि, मैं आईओएस सिम्युलेटर पर भी अपने ऐप का परीक्षण करना चाहता हूं। जब मैं सिम्युलेटर पर अपना ऐप चलाने की कोशिश करता हूं, तो मुझे अभी भी "अनुपलब्ध आवश्यक आर्किटेक्चर i386" त्रुटि मिलती है। मैंने केवल हर संबंधित एसओ विषय पर प्रस्तावित समाधानों का प्रयास किया है, और कुछ भी इस मुद्दे को हल करने में मेरी मदद नहीं कर पाया है।

कृपया ध्यान दें कि मैं अपने कस्टम फ्रेमवर्क को एक नए एक्सकोड प्रोजेक्ट में उपयोग करने का प्रयास कर रहा हूं, इसलिए ऐप/बिल्ड सेटिंग्स में से कोई भी उनके डिफ़ॉल्ट से बदल नहीं गया है।

मैं इस त्रुटि को कैसे ठीक कर सकता हूं ताकि मैं अपने ऐप को आईओएस सिम्युलेटर और डिवाइस में शामिल मेरे ढांचे के साथ एक डिवाइस पर चला सकूं? किसी भी जानकारी की काफी सराहना की जाएगी!

उत्तर

5

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

मैं इस ट्यूटोरियल की मदद से खरोंच से मेरी ढांचा बनाया: http://www.raywenderlich.com/65964/create-a-framework-for-ios

बहु वास्तुकला का निर्माण स्क्रिप्ट क्या मेरी ढांचा दोनों आईओएस सिम्युलेटर और एक डिवाइस पर चलाने की अनुमति दी है।

+2

उत्तर के लिए धन्यवाद! फिर भी यह भयानक है कि 2015 तक, हमें अभी भी एक सभ्य रूपरेखा प्राप्त करने के लिए मैन्युअल भवन का सहारा लेना है (ट्यूटोरियल की तरह है, 10 पेज लंबा ?!)। आप पर शर्म आती है, ऐप्पल! – Rick77

+1

@ रिक 77 मदद करने के लिए खुशी! मैं पूरी तरह से सहमत।मैं विंडोज और विंडोज फोन के लिए ऐप भी विकसित करता हूं, और मुझे उन प्लेटफॉर्म पर इसके बारे में भी सोचना नहीं पड़ता है। – Alexander

+0

@Alexander मेरा ढांचा आईओएस सिम्युलेटर के आर्किटेक्चर के लिए संकलित नहीं किया गया था। यह केवल डिवाइस का समर्थन करता है, सिम्युलेटर में अपना ढांचा कैसे काम करता है। मैं फ्रेमवर्क का उपयोग कर रहा हूं। – Arun

0

सिम्युलेटर के निर्माण के लिए प्रयास करते समय मुझे एक्सकोड 7.1 के साथ एक ही समस्या का सामना करना पड़ा। किसी और ने कहा कि यह उनके लिए एक्सकोड 8.2.1 के तहत काम करता है, इसलिए मैंने वहां निर्माण/दौड़ने की कोशिश की और यह काम किया। मुझे अपनी परियोजना में लक्ष्य या कुछ भी बदलने की ज़रूरत नहीं थी।

तो यदि आप कर सकते हैं तो अपने एक्सकोड को अपग्रेड करने का प्रयास करें, आपको संभावित रूप से अतिरिक्त बग फिक्स भी मिलेंगे।

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