दिलचस्प पोस्ट
सीएसएस फ़ॉन्ट सीमा? ANTLR4 के साथ एएसटी कैसे बनाएं? <Input type = "file"> का उपयोग करते समय फ़ाइल स्वरूप को सीमित करें? मैं किसी रिमोट के लिए विशिष्ट प्रतिबद्ध कैसे कर सकता हूँ, और पिछला नहीं करता? एकाधिक फ़ाइलों को एक साथ स्ट्रट्स 2 @ एक्शन पर अपलोड करें होम बटन की तरह काम करने के लिए वापस बटन ओवरराइड करें जावा में जीमेल एसएमटीपी सर्वर के जरिए ईमेल भेजना पायथन से सी ++ में स्टडीन से लाइनों को बहुत धीमा क्यों पढ़ना है? मैं मास्टर / मूल के साथ अलग सिर कैसे सम्मिलित कर सकता हूं? पाइपों द्वारा कई प्रक्रियाओं को जोड़ने के लिए मैं कैसे उपप्रोसेस का उपयोग कर सकता हूं? मावेन – हमेशा डाउनलोड करें स्रोत और जवाडॉक्स मेवेन के साथ एक जार में निर्भरताएं शामिल करना Read.table / read.csv में colClasses तर्क के लिए कस्टम दिनांक स्वरूप निर्दिष्ट करें DialogFragment से परिणाम प्राप्त करें बड़ी पाठ फ़ाइलों को पायथन में पढ़ो, लाइन में लाइन में बिना इसे स्मृति में लोड किए बिना

स्विफ्ट कंपाइलर त्रुटि: "गैर-मॉड्यूलर हैडर अंदर फ़्रेमवर्क मॉड्यूल"

अब मैं अपने ओबजेसी फ्रेमवर्क को स्विफ्ट में स्थानांतरित करना चाहूंगा और मुझे निम्न त्रुटि मिली:

include of non-modular header inside framework module 'SOGraphDB' 

ये संदर्भ एक हेडर फाइल है जो सिर्फ एक प्रोटोकॉल को परिभाषित करता है और मैं इस प्रोटोकॉल का उपयोग करने के लिए कुछ वर्गों में हेडर फ़ाइल का उपयोग करता हूं।

लगता है कि मॉड्यूल की सुविधा से संबंधित है, लेकिन अभी यह तय नहीं है कि कैसे ठीक करना है, क्या आपको समाधान पता है?

अद्यतन करें:

यह एक स्विफ्ट कंपाइलर त्रुटि है

अद्यतन 2:

एक त्वरित तय (लेकिन मूल कारण को हल नहीं करना) निम्न सेटिंग को हाँ में सेट करना है: CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = हाँ

वेब के समाधान से एकत्रित समाधान "स्विफ्ट कंपाइलर त्रुटि: "गैर-मॉड्यूलर हैडर अंदर फ़्रेमवर्क मॉड्यूल""

क्या आपका शीर्षक सार्वजनिक है?

परियोजना एक्सप्लोरर में हैडर फ़ाइल का चयन करें फिर Xcode में दाईं ओर के अनुभाग में, आप देखेंगे कि लक्ष्य के बगल में एक ड्रॉपडाउन है इसे "प्रोजेक्ट" से "सार्वजनिक" में बदलें यह मेरे लिए काम किया

सार्वजनिक शीर्षलेख

यह एक अपेक्षित संकलक व्यवहार है और बहुत अच्छे कारण के लिए है।

मुझे लगता है कि इन मुद्दों पर चलने वाले अधिकांश लोग Application Target से Framework Target तक स्विच करते हैं और सी और उद्देश्य सी हेडर को फ्रेमवर्क के छाता हेडर में जोड़ना शुरू करते हैं क्योंकि यह उम्मीद है कि यह एप्लिकेशन के ब्रिजिंग हैडर के रूप में एक समान व्यवहार होगा, जो अलग ढंग से व्यवहार करता है। छाता शीर्षलेख को वास्तव में मिश्रित तेज, obj-c ढांचे के लिए नामित किया गया है और इसका उद्देश्य बाहरी दुनिया को एपीआई को उजागर कर रहा है जो आपके ढांचे के उद्देश्य-सी या सी में है। इसका अर्थ है कि हम जो हेडर डालते हैं, वहां सार्वजनिक क्षेत्र में होना चाहिए।

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

उद्देश्य-सी / सी लाइब्रेरी को आपके फ्रेमवर्क स्विफ्ट कोड को बेनकाब करने के लिए, हमें ऐसे पुस्तकालयों के लिए एक अलग स्विफ्ट मॉड्यूल को परिभाषित करना चाहिए। फिर एक मानक गति import YourLegacyLibrary का उपयोग किया जा सकता है

मैं इसे कुछ विशिष्ट परिदृश्य पर प्रदर्शित करता हूं: हमारे फ्रेमवर्क में एम्बेड करें।

1. आपको सबसे पहले एक module.modulemap बनाने की जरूरत है। module.modulemap फ़ाइल जो इस तरह से देखेंगे:

OSX फ्रेमवर्क के लिए:

 module SwiftLibXML2 [system] { header "/usr/include/libxml2/libxml/xpath.h" export * } 

आईओएस ढांचे के लिए:

 module SwiftLibXML2 [system] { header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/libxml2/libxml/xpath.h" export * } 

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

2. फिर अपने SwiftLibXML2 परियोजना निर्देशिका में एक फ़ोल्डर SwiftLibXML2 और वहां इस मॉड्यूल को डालें। Modulemap वहाँ

3. बिल्ड सेटिंग्स में , हैडर खोज पथ में $(SDKROOT)/usr/include/libxml2

4. बिल्ड सेटिंग्स में , आयात पथ $(SRCROOT)/SwiftLibXML2 को आयात करें

5. प्रोजेक्ट की सामान्य टैब के अंतर्गत, लिंक्ड फ़्रेमवर्क और लाइब्रेरीज़ में libxml2.tbd जोड़ें।

अब आप इस मॉड्यूल को आयात कर सकते हैं जहां की आवश्यकता है:

 import SwiftLibXML2 

(यदि आप अधिक पूर्ण मॉड्यूल.मैप उदाहरण देखना चाहते हैं, तो मैं आपको सूचित करता हूं कि डार्विन के मॉड्यूल। modulemap /usr/include/module.modulemap पर, आपको वहां जाने के लिए Xcode कमांड-लाइन उपकरण स्थापित करने की आवश्यकता होगी, संदर्भ गुम / यूएसआर / ओएस एक्स एल कैप्टन में शामिल हैं )

यहां बताया गया है कि स्वचालित रूप से त्वरित सुधार कैसे लागू करें ताकि आपको प्रत्येक pod install बाद मैन्युअल रूप से Pods.xcodeproj को बदलना Pods.xcodeproj

इस स्निपेट को अपने पॉडफ़ाइल के अंत में जोड़ें:

 post_install do |installer| installer.pods_project.build_configuration_list.build_configurations.each do |configuration| configuration.build_settings['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES' end end 

मेरे लिए समाधान लक्ष्य पर जाना था-> बिल्डिंग सेटिंग्स-> गैर-मॉड्यूलर को फ्रेमवर्क मॉड्यूल में शामिल करने की अनुमति दें हाँ पर स्विच करें!

मुझे लगता है कि मैं इस के आसपास मिल गया। मेरे पास कुछ मॉडल कोड है जो एक चौखटे में sqlite3 का उपयोग करता है। मेरे मामले में, अपराधी <sqlite3.h> था

समस्या यह थी कि मेरे मॉड्यूल / मॉड्यूल। हेडर में, मैंने एक सार्वजनिक हेडर आयात किया था जो <sqlite3.h> आयात किया गया था। इसका समाधान सभी sqlite3_xxx प्रकारों को छिपाना था और यह सुनिश्चित करना था कि वे किसी भी सार्वजनिक में दिखाई नहीं दे रहे थे। H सिकलाइट 3 के सभी प्रत्यक्ष संदर्भ निजी या परियोजना दृश्यता बनाए गए थे। उदाहरण के लिए, मेरे पास एक सिंगल सिंगलटन था जो कि कुछ एसक्लिटे 3_स्टएमटी पॉइंटर्स को फांसी से लटकाया था। मैंने उन लोगों को एक अलग वर्ग में ले जाया था जो अब उस सार्वजनिक शीर्ष लेख में केवल एक आगे की घोषणा है अब मैं बना सकता हूँ

संयोग से, CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES सेटिंग काम नहीं करती थी। मैंने इसे रूपरेखा और आश्रित परियोजना दोनों में स्थापित करने की कोशिश की। यह समाधान आवश्यक था, हालांकि मुझे यकीन नहीं है कि क्यों

स्विफ्ट में :

1. अपने Xcode प्रोजेक्ट और लक्ष्य को संशोधित करें 'बिल्ड सेटिंग नीचे बताए गए अनुसार:

गैर-मॉड्यूलर की अनुमति फ्रेमवर्क मॉड्यूल में शामिल है: नहीं

बिट कोड सक्षम करें: हाँ

2. GoogleMaps iOS SDK के लिए उपलब्ध नवीनतम नवीनतम संस्करण का उपयोग करें (इसे प्राप्त करने के लिए कोकाओप्स का उपयोग करें):

GoogleMaps (1.10.4)

3. समस्याग्रस्त आयात की टिप्पणी करें:

 //import GoogleMaps 

4. समस्याग्रस्त आयात को जोड़ने, अपनी ब्रिजिंग हेडर फ़ाइल बनाएं या संशोधित करें:

[आपका एक्सकोड प्रोजेक्ट नेम] -ब्रिडिंग-हेडर एच

 // Use this file to import your target's public headers // that you would like to expose to Swift. #import <GoogleMaps/GoogleMaps.h> 

5. अपने Xcode प्रोजेक्ट को स्वच्छ और पुन: बनाएं।

यह जवाब बाहर है दिनांकित।

चौखटे आयात करते समय, आपको सभी हेडर फाइल आयात करनी चाहिए, जो कि रूट शीर्षलेख के साथ निर्भरता साझा करती हैं। हमेशा यह सुनिश्चित करने का सबसे आसान तरीका है कि ढांचे के "हेडर" फ़ोल्डर में सभी हेडर को अपने सार्वजनिक हेडर पथ में आयात करना है।

यहां छवि विवरण दर्ज करें

स्विफ्ट कंपाइलर इस जानकारी का उपयोग उनके संबंधित प्रकार की जानकारी के साथ गैर-संदिग्ध प्रतीकों के मानचित्र को बनाने के लिए करता है।

हेडर फाइल को लक्ष्य के लिए आवंटित किया गया था लेकिन इसे केवल परियोजना के रूप में चिह्नित किया गया था, इस त्रुटि के समाधान के लिए सार्वजनिक नेतृत्व में सिर्फ एक बदलाव।

नहीं

 #import "MyOtherFramework.h" 

कर

 #import <MyOtherFramework/MyOtherFramework.h> 

मुझे इस सटीक समस्या थी जब एक परियोजना में अपना स्वयं का ढांचा शामिल था सार्वजनिक में नहीं। एम फाइलों में sqlite3.h के सभी आयात डालने से इसे फिक्स्ड। मैं मान रहा हूं कि अन्य लाइब्रेरीज़ Xcode के साथ समान समस्याएं ध्वज कर सकते हैं

मुझे फेसबुक 4.02 एसडीके और एफबीएसडीकेकोरिक के साथ विशिष्ट समस्या थी

मैंने सभी चरणों को किया लेकिन फिर भी गैर मॉड्यूलर शीर्षलेख के बारे में त्रुटि मैं फ़्रेम -> हैडर अनुभाग बनाने के लिए ढांचे से केवल विशिष्ट शीर्षक को खींच कर हटा दिया।

तब स्वतः शीर्ष पर प्रोजेक्ट नेविगेटर पर हेडर की प्रतिलिपि बनाई गई।

मैंने उसे निर्माण चरणों से हटा दिया -> हेडर और नई फ़ाइल को हटा दिया और ठीक काम किया।

इसे रीसेट या कुछ और जैसा

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मेरे पास एक ही मुद्दा था और ऊपर से कुछ भी मुझे मदद नहीं मिली इसलिए मुझे उम्मीद है कि मेरा जवाब किसी के लिए सहायक होगा। मेरे मामले में समस्या ALWAYS_SEARCH_USER_PATHS सेटिंग में थी। जब यह किसी भी परियोजना पर स्थापित किया गया था और ठीक काम किया था। लेकिन जहां तक ​​एक पॉड की आवश्यकता है, इसे हाँ पर सेट किया जाना चाहिए, मुझे एक त्रुटि मिली थी

फ्रेमवर्क मॉड्यूल के अंदर गैर मॉड्यूलर हैडर शामिल करें

दो कप कप कॉफी और पूरे दिन शोध करने के बाद मुझे पता चला कि Xcode 7.1 बीटा 2 रिलीज नोट्स के ज्ञात मुद्दों के अनुसार:

• अगर आपको पहले संकलित किए गए ढांचे के लिए "ढांचे के मॉड्यूल के अंदर गैर-मॉड्यूलर हेडर शामिल करना" कहा गया है, तो सुनिश्चित करें कि "हमेशा खोज उपयोगकर्ता पथ" बिल्ड सेटिंग को "नहीं" पर सेट किया गया है। केवल लीगेसी कारणों के लिए "हाँ" डिफ़ॉल्ट है (22784786)

मैं XCode 7.3 का उपयोग कर रहा था। हालांकि, लेकिन ऐसा लगता है कि इस बग को अभी तक तय नहीं किया गया है।

सबसे आम तौर पर यह त्रुटि चुने हुए उत्तर के कारण होती है, फिर भी मुझे यह त्रुटि दुर्घटना में एक बार दिखाई दे रही थी जब फ्रेमवर्क फाइलें मेरे नए प्रोजेक्ट फ़ोल्डर में खींच रही थी। मैंने चौखटे को हटाने के लिए क्लिक किया, लेकिन गलती से फ़ाइलों को पूरी तरह से नष्ट करने के बजाय केवल 'निकालें संदर्भ' को चौखटे में दबाया। इस बिंदु पर अगर मैंने खोजक में अपना प्रोजेक्ट फ़ोल्डर खोला तो मैंने 'कोर लेकॉन्स' और 'ऑडिओ टूलबॉक्स' जैसी फाइलें देखीं। प्रोजेक्ट फ़ोल्डर से इन फ़ाइलों को हटाने और परियोजना की सफाई के मुद्दे को तय किया।

गैर मॉड्यूलर में आयात करने की इजाजत देने के बाद, आप उस उद्देश्य का उपयोग करके उस मॉड्यूल को आयात करने का प्रयास कर सकते हैं, जिसका उपयोग उद्देश्य-सी ब्रिजिंग हेडर है:

 #import <YandexMobileMetrica/YandexMobileMetrica.h> 

मैं इस समस्या के साथ अपने अनुभव को भी जोड़ना चाहूंगा

बस संक्षेप में:

  • @ एंबिएटलाइट का जवाब बहुत अच्छा है और यह अधिकांश समस्याओं को हल करता है
  • गैर-मॉड्यूलर हेडर की अनुमति एक और समाधान है (ऊपर दिए गए कुछ उत्तर देखें)
  • रूपरेखा के हेडर को जनता के रूप में चिह्नित करना (केवल एक बार जिसे आप बेनकाब करना चाहते हैं) और उन्हें छाता शीर्ष पर आयात करना
  • यहां मेरे जवाब में 2 अतिरिक्त हैं
  • अपने हेडरों के लिए अपनी परियोजना में सावधानीपूर्वक आयात करें, जो आपके चौखटे सीधे उन में आयात करते हैं (यदि संभव हो तो आगे की घोषणा का उपयोग करने के बजाय), यह हैडर फ़ाइल को किसी अन्य शीर्षलेख फ़ाइल में शामिल करने का अच्छा अभ्यास नहीं है, कभी-कभी यह समस्याएं पैदा करता है, क्योंकि ठीक से नहीं किया गया यह एक हैडर और लिंकर मुद्दों सहित एकाधिक को जन्म दे सकता है
  • और आखिरकार उपर्युक्त सभी को करने के बाद, मैं अभी भी उस त्रुटि पर बैंप लगा रहा हूं, इसलिए मैंने थोड़ा और खोदा और पाया (सेब डेवलपर मंचों में, लेकिन लिंक खो दिया है :(), यदि आप शीर्ष लेखों को छाता शीर्षलेख में शामिल नहीं करते हैं जैसे कि यह <framework/headerName.h> , लेकिन केवल "headerName.h" , समस्या दूर हो जाती है, मैंने इसे करने की कोशिश की है और अब के लिए मुझे अब इस समस्या का अनुभव नहीं हुआ है, हालांकि मुझे लगता है कि यह समाधान केवल तभी वैध है अगर आपने कुछ शीर्ष उत्तरों को लागू किया है (वे एक-दूसरे के साथ सभी संगत नहीं हैं, उदाहरण के लिए मॉड्यूल दृष्टिकोण और गैर मॉड्यूलर हेडर शामिल है)

अतिरिक्त: लाइब्रेरी के आर्किटेक्चर और उस लक्ष्य के बारे में जांचें जो आप इसे लिंक करना चाहते हैं

मेरे मामले में (Xcode 9 बीटा 6 – स्विफ्ट 4 – कोकोपॉड का उपयोग करते हुए) इसका समाधान किया गया जब मैंने पॉडफ़ाइल.लोकॉक और पॉड डायरेक्टरी को हटा दिया और pod install फिर से pod install किया

स्विफ्ट 3 से स्विफ्ट 3 से एक प्रोजेक्ट को अपडेट करने के बाद मुझे यह समस्या मिली मैं कोड को अपडेट करने के लिए XCode 8.3.2 का उपयोग कर रहा था और "गैर-मॉड्यूलर हेडर अंदर फ़्रेमवर्क मॉड्यूल" त्रुटि से छुटकारा नहीं पा रहा था। जब मैंने एक ही प्रोजेक्ट को XCode (संस्करण 9.0.1) के दूसरे संस्करण में खोला तो त्रुटि दिखाई नहीं दे रही थी।

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