स्विफ्ट फ्रेमवर्क: छाता हेडर '[...] .एच' नहीं मिला


114

ऑब्जेक्ट-सी और स्विफ्ट कोड वाले कस्टम फ्रेमवर्क में , स्विफ्ट कंपाइलर निम्न त्रुटि फेंकता है:

[build_path]/unextended-module.modulemap:2:19: error: umbrella header 'bugtest.h' not found
  umbrella header "bugtest.h"
                  ^
<unknown>:0: error: could not build Objective-C module 'bugtest'

जवाबों:


240

यह आमतौर पर एक परियोजना का नाम बदलने या ऐसा कुछ होने के बाद होता है। समस्या यह है कि छाता हेडर को अब सार्वजनिक हेडर के रूप में सूचीबद्ध नहीं किया गया है । इसे ठीक करने के तरीके को देखने के लिए संलग्न छवि को देखें।

ठीक कर


7
भविष्य के पाठकों के लिए बस एक नोट जो ha बिल्ड चरणों ’के note हेडर्स’ अनुभाग को देखने के लिए आपको एक पॉड लक्ष्य पर क्लिक करने की आवश्यकता है। मुख्य ऐप लक्ष्य एक 'हेडर' अनुभाग को सूचीबद्ध नहीं करेगा।
शमीम

3
यह पूरी तरह से यह तय है। धन्यवाद। यह स्वीकृत उत्तर होना चाहिए।
गुजमीन

16
मेरे लिए - पहुंच का स्तर सार्वजनिक था लेकिन यह भी छाता पर विफल रहता है जो नहीं मिला। मैंने "हेडर्स" खंड को "बिल्ड चरणों" को शीर्ष पर ले जाया और यह काम करना शुरू कर दिया।
अलेक्सी मिनाएव

6
मेरा छाता हैडर पहले से ही सार्वजनिक था। अनुभाग को शीर्ष पर ले जाने से भी मदद नहीं मिली।
राफेल बुगाजेवस्की

1
जब कार्टाज ने मेरे आयातित फ्रेमवर्क में से एक को अद्यतन किया तो मैं इसी तरह का मुद्दा रख रहा था। मुझे लगता है कि XCode को संदर्भित फ्रेमवर्क पथ परिवर्तनों के लिए नज़र रखने में परेशानी हो रही है। सरल XCode पुनरारंभ ने मेरे लिए समस्या को ठीक कर दिया।
टोनी

48

स्विफ्ट 2 के साथ Xcode 7 बीटा में, यह तब भी होगा जब आपका फ्रेमवर्क हेडर "सार्वजनिक" घोषित नहीं किया जाता है

उदाहरण के लिए, हेडर फ़ाइल के लिए "प्रोजेक्ट" दृश्यता के साथ मेरे पास कोको टच फ्रेमवर्क था, और त्रुटि "छाता हैडर ... नहीं मिला" मेरे प्रोजेक्ट में सभी स्विफ्ट फ़ाइलों के लिए, एक बार जब मैंने हेडर "पब्लिक" किया था, तो त्रुटि दूर हो गई


1
मेरे मामले में, जब मुझे इस मुद्दे का सामना करना पड़ा, तो यह जवाब "अधिक सही" उत्तर की तरह लग रहा था, और इसने मेरे लिए काम किया।
greymouser

1
मैं सहमत हूँ। यह सही जवाब है। जांचें कि <प्रोजेक्ट> .h फ़ाइल में सही लक्ष्य सदस्यता और एक्सेस स्तर (सार्वजनिक) है।
user965972

@ Shadow_x99 मैं हेडर को "पब्लिक" के रूप में कैसे सेट करता हूं, मेरा सवाल stackoverflow.com/questions/36084291/…
user2727195

यह वास्तव में @ arturgrigor के उत्तर का एक रूपांतर है, सिवाय इसके कि एक्सकोड यह परिवर्तन को स्वयं करता है। अंतिम परिणाम समान होना चाहिए।
original_username

40

Xcode के पिछले संस्करणों में बग को अनदेखा करते हुए 4 अलग-अलग तरीके हो सकते हैं

  • आपके पास अपनी परियोजना में $ (TARGET_NAME) .h नाम का एक छाता हैडर नहीं है
  • आपके पास एक छाता हैडर है, लेकिन यह सार्वजनिक रूप से सेट नहीं है। Arturgrigor का जवाब देखें
  • DEFINES_MODULE के लिए सेट नहीं है YES
  • CLANG_ENABLE_MODULES के लिए सेट नहीं है YES

3
5 वाँ कारण जो मुझे अभी-अभी मिला है:
छाता_हेडर।

3
मेरे पास इस सूची में सब कुछ सही है, फिर भी यह विफल है।
एरिक एग्नर

25

यह तब होगा, जब Always Search User Pathsरूपरेखा लक्ष्य के लिए सेटिंग सक्षम हो।

इसे सेट Noकरने से उस त्रुटि का समाधान हो जाएगा।

IMHO यह स्विफ्ट कंपाइलर में एक बग है और मैंने ऐप्पल के साथ रडार दर्ज किया है। Rdar
देखें : // 21038443


1
धन्यवाद! यह वही है जो मुझे भी मिला है।
क्रिस हैटन

इसने मेरे लिए काम किया। एक अतिरिक्त लक्षण यह है कि यह एक साफ होने के तुरंत बाद विफल हो गया, लेकिन अगर आप सफाई के बिना पीछे हट गए तो सफल रहे।
बेन लेगिएरियो

18

मेरे लिए - पहुंच का स्तर सार्वजनिक था लेकिन यह भी छाता पर विफल रहता है जो नहीं मिला। मैंने "हेडर्स" अनुभाग को "बिल्ड चरणों" को शीर्ष पर ले जाया और यह काम करना शुरू कर दिया। पॉडफाइल को स्क्रिप्ट:

post_install do |installer|
installer.pods_project.targets.each do |target|
    phase_name = 'Headers'
    target.build_phases.each do |phase|
        if (phase.display_name.include? phase_name)
            target.build_phases.unshift(phase).uniq! unless target.build_phases.first == phase
        end
    end
end

कोई सुराग नहीं है कि ऐसा क्यों हो रहा है। डमी परियोजनाओं पर कोशिश की - नहीं हो रहा है। केवल कई निर्भरता वाले बड़े लोगों पर। छाता हेडर की नकल करने से पहले कुछ के साथ।


4
"संकलन सूत्र" के ऊपर "हेडर्स" को ले जाना मेरे लिए काम करता है। xCode 8.2.1।
रोब पैटर्सन

हेडर चरण को शीर्ष पर ले जाना भी मेरे लिए काम कर गया।
सोरेन मोर्टेंसन

अमान्य Podfileफ़ाइल: सिंटैक्स त्रुटि, अनपेक्षित अंत-इनपुट, keyword_end की अपेक्षा।
वोलोडाइमिर कुल्क

13

निश्चित रूप से आपको अपना ढांचा जनता के सामने स्थापित करना होगा:

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


1
अच्छी तरह से काम। आपका बहुत बहुत धन्यवाद!
काकिरमसज़

उस स्क्रीनशॉट का संदर्भ क्या है? वहां पहुंचने के लिए आप क्या क्लिक करते हैं?
pkamb

7

मेरे लिए 'Use Header Maps' को 'NO' पर सेट करने से समस्या हल हो गई


... और मेरे मामले में, इसे हाँ में सेट करने से समस्या ठीक हो गई। दुर्भाग्य से इस सेटिंग पर कोई दस्तावेज़ नहीं लगता है, लेकिन हाँ डिफ़ॉल्ट है और मुझे यकीन नहीं है कि यह मेरे किसी लक्ष्य के लिए सेट क्यों नहीं किया गया था।
रोबोटस्पाइजर

7

एक और समाधान: एक फ़ोल्डर का नाम बदलने के बाद, पुराने स्थान को अभी भी .h फ़ाइल के लिए प्रोजेक्ट फ़ाइल में सूचीबद्ध किया जा सकता है, भले ही आपने Xcode के साइड-बार के माध्यम से स्थान अपडेट किया हो। यह पुराना स्थान छाता-हैडर त्रुटि का कारण बनता है।

सरल समाधान: .h फ़ाइल का संदर्भ निकालें, और फिर से जोड़ें। (और फिर इसे फिर से सार्वजनिक करने के लिए याद रखें!)


5

मैंने पाया कि न्यू स्विफ्ट बिल्ड सिस्टम और पैरेललाइज़ बिल्ड के साथ इस योजना को चालू किया गया था, जिसमें मुझे इस प्रश्न की तरह त्रुटियाँ मिलेंगी। इसका समाधान स्विफ्ट सोर्स फाइलों में आयात किए गए फ्रेमवर्क से जुड़ना था। (मुझे लगता है कि पहले ऐप का निर्माण होगा क्योंकि यह सिर्फ इसलिए हुआ कि फ्रेमवर्क धारावाहिक बिल्ड कतार में पहले से निर्मित कुछ से जुड़े थे)।

मैंने एक कार्यक्षेत्र में सभी लक्ष्यों में सभी आयातों से गुजरने के लिए एक स्क्रिप्ट लिखी और यह सुनिश्चित किया कि उनके फ्रेमवर्क को उस लक्ष्य में जोड़ा गया है।

https://github.com/Jon889/SwiftImportChecker


4

यहाँ पहले से ही कुछ बेहतरीन जवाब हैं। @ Shadow_x99 बहुत मददगार था। हालांकि, अगर मुझे अपने अनुभव के साथ पूरक करने की अनुमति दी जा सकती है।

निर्माण प्रक्रिया में एक छाता हैडर की पहचान स्वतः हो जाती है। यह लक्ष्य की बिल्ड सेटिंग्स में निर्दिष्ट नहीं है या प्रोजेक्ट सेटिंग्स से विरासत में मिला है।

तो इस त्रुटि से बचने के लिए कि - एक्सकोड 7 के रूप में - इस प्रकार है;

warning: no umbrella header found for target 'MyTarget', module map will not be generated

दो महत्वपूर्ण कदम उठाए जाने चाहिए।

सबसे पहले, छत्र शीर्ष लेख में लक्ष्य के समान नाम होना चाहिए । इसलिए यदि आपका लक्ष्य नाम का एक ढांचा है MyTarget, तो नाम का एक शीर्षक होना चाहिए MyTarget.h

दूसरे, बिल्ड चरणों में MyTarget- जैसा कि उस उत्तर में उल्लिखित है - उस हेडर फ़ाइल को ऊपर के रूप में सार्वजनिक अनुभाग में सूचीबद्ध किया जाना चाहिए ।


1

मेरे पास एक ही मुद्दा था और सुझाए गए जवाबों में से किसी ने भी मेरे मामले में मदद नहीं की, इसलिए मैं इसे यहां छोड़ रहा हूं अगर किसी को भी यही समस्या है।

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

मेरा समाधान परियोजना को साफ करने, मेरे ढांचे के पुनर्निर्माण और फिर मेरी ऐप परियोजना को सही ढंग से बनाने के लिए समाप्त हो गया।


1

मेरे अनुभव में आपको उन लक्ष्यों पर चयन करना है, जो आपको प्रोजेक्ट त्रुटि दे रहे हैं, न कि त्रुटि।
फिर संकलन करें, और संकलन के बाद यह परियोजना के लक्ष्य पर उपलब्ध होगा।


0

यदि आप Xcode 7.1 और CocoaPods 0.39 का उपयोग कर रहे हैं, तो एक तेज संकलक परिवर्तन प्रतीत होता है जो कुछ CocoaPods (फुर्तीला, त्वरित आदि) को प्रभावित करता है। इस धागे में निर्दिष्ट कुछ समाधान आज़माएं: https://github.com/ CocoaPods / CocoaPods / मुद्दों / 4420 हालांकि, अगर उनमें से कोई भी काम नहीं करता है, तो Xcode 7.0.1 या 7.2 बीटा का उपयोग करने का प्रयास करें। आप दोनों को यहाँ प्राप्त कर सकते हैं: https://developer.apple.com/downloads/

संपादित करें: मेरे मामले में, समस्या को ठीक करने के लिए, मुझे भी कोकोआ को 0.38.2 पर डाउनग्रेड करना पड़ा।

बाद में संपादित करें: ऐसा लगता है कि Xcode 7.1 से संबंधित नहीं है। बस कोकोआ को 0.38.2 पर अपग्रेड करना चाहिए:

sudo gem uninstall cocoapods -v 0.39
sudo gem install cocoapods -v 0.38.2

धन्यवाद @ मर्सिया उर्सचे आपके निर्देशों के बाद मेरे लिए समस्या का समाधान हुआ।
विक स्विफ्ट

0

आपकी हेडर फ़ाइल को [बिल्ड चरणों / हेडर्स / पब्लिक] अनुभाग में होना चाहिए।

यदि आपकी हेडर फ़ाइल पहले से ही [बिल्ड चरणों / हेडर्स / पब्लिक] सेक्शन में है, तो कई बार फॉलिंग करने से आपकी समस्या हल हो जाती है:

  1. प्रोजेक्ट को साफ करें
  2. शीर्ष लेख फ़ाइल को "निजी" या "प्रोजेक्ट" अनुभाग पर ले जाएं
  3. शीर्ष लेख फ़ाइल को "सार्वजनिक" अनुभाग पर ले जाएं
  4. फिर से सब कुछ पुनर्निर्माण

वाह, यह केवल एक ही है जिसने इन दर्जनों उत्तरों से काम किया है और ऐसा लगता है कि यह कम से कम संभावना होगी, धन्यवाद!
पाओलो

0

मैंने इसे अपने मॉड्यूल के नाम से हल किया था। मॉड्यूल का उपयोग करके मॉड्यूल xYZ.modulemap और प्रोजेक्ट सेटिंग्स में मॉड्यूलमैप फ़ाइल का नाम बदलकर


0

मेरे मामले में, मैंने अभी इसकी योजना के साथ विशिष्ट ढांचे का निर्माण किया है। और फिर पूरे प्रोजेक्ट का पुनर्निर्माण किया और इस मुद्दे को हल किया


0

बिल्ड सेटिंग्स में "आयात पथ" सुनिश्चित करें कि वह फ़ाइल शामिल करें जिसे आप शामिल करने का प्रयास कर रहे हैं ...


-1

इन फ़ाइलों को प्रोजेक्ट की डायरेक्टरी से निकालें। .xcworkspace pods/तथाpodfile.lock

पॉड को अपडेट करें और प्रोजेक्ट बनाएं।


-1

मैंने इसे इंक्रीमेंटल के लिए समसामयिक ढांचे के निर्माण की रूपरेखा का संकलन मोड बनाकर तय किया।


-1

मेरे मामले में बिल्ड फेज़ में हेडर स्क्रिप्ट हटाने के कारण समस्या हुई

function removeHeaders() {  
    find $BUILD_ROOT/...  -name '*.h' -exec rm -f {} \;  
}  
removeHeaders

इस स्क्रिप्ट को हटाने से समस्या ठीक हो गई।


-2

9 जवाबों में से किसी ने भी मेरी मदद नहीं की, इसलिए मैंने एक नई परियोजना बनाने की कोशिश की जिसे मैं बग भेजने के लिए Apple को भेज सकता था। मुझे आश्चर्य हुआ कि मैं इस मुद्दे को पुन: पेश नहीं कर सका। मैंने बिल्ड सेटिंग्स की जाँच की और वे बराबर थे। जाहिर है यह किसी प्रकार का बग है।

यदि कुछ और मदद नहीं करता है , तो एक नई परियोजना बनाने का प्रयास करें और अपनी वर्तमान परियोजना से कम से कम कुछ उद्देश्यपूर्ण सी एंड स्विफ्ट कक्षाएं आयात करें, अपनी रूपरेखा-संबंधित बिल्ड सेटिंग्स की तुलना नए प्रोजेक्ट से डिफ़ॉल्ट मानों से करें, और अंततः सभी फाइलों को स्थानांतरित करें। नया काम।


-2

मैं एक पूरे दिन के लिए इस पर काम कर रहा था, लेकिन यह इसके लायक है मैंने यहां सभी तरीकों की कोशिश की , लेकिन मैंने इसे हल नहीं किया। मैंने एक नया प्रोजेक्ट बनाया, एक प्रयोग किया, और मुझे पता चला कि यूजर हैडर सर्च पाथ को $ {SRCROOT} पुनरावर्ती बनाया गया था , और मैंने इसे $ {SRCROOT} गैर-पुनरावर्ती में बदल दिया, ब्रिजिंग हेडर पथ (जैसे #import "SVProgressHUD.h" -> #import "Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h") को बदल दिया , त्रुटि दूर हो गई।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.