स्विफ्ट प्रोजेक्ट में ऑब्जेक्टिव-सी फ्रेमवर्क आयात करते समय हेडर ब्रिजिंग में "फाइल नहीं मिली"


96

मेरे पास एक स्विफ्ट परियोजना है, जिसके लिए मैं ओब्जेक्ट-आधारित रूपरेखाओं को आयात करने की कोशिश कर रहा हूं। ढांचा परियोजना के पथ के तहत एक निर्देशिका में स्थित है और Xcode में परियोजना द्वारा संदर्भित है। यह प्रोजेक्ट के 'बिल्ड चरणों' पृष्ठ में "लिंक बाइनरी विद लाइब्रेरीज़" में भी जोड़ा गया है।

हालाँकि, किसी कारण से, मैं ब्रिजिंग-हैडर फ़ाइल में रूपरेखा को शामिल नहीं कर सकता। मुझे निम्नलिखित त्रुटि मिलती है:

BridgingHeader.h:5:9: error: 'Parse/Parse.h' file not found
#import <Parse/Parse.h>
        ^
<unknown>:0: error: failed to import bridging header 'BridgingHeader.h'

जिन चीजों की मैंने जाँच की है:

  1. "इंसटिव ऑब्जेक्टिव-सी कम्पेटिबिलिटी हैडर" "यस" पर सेट है।
  2. हैडर सर्च पाथ्स में फ्रेमवर्क का पथ शामिल है।

मुझे यकीन है कि मुझे कुछ याद आ रहा है, इसलिए अगर किसी के पास कोई सुराग है, तो यह बहुत अच्छा होगा।


3
मैं पुस्तकालय पथ डालना भूल गया Header Search Paths, इस मामले में प्रश्न ने मदद की: डी
ऐश्वत सिंह

जवाबों:


78

एक समाधान मिला:

  • "ऑब्जेक्टिव-सी ब्रिजिंग हेडर" सेटिंग (उर्फ SWIFT_OBJC_BRIDGING_HEADER) को लक्ष्य स्तर पर सेट किया जाना चाहिए, और प्रोजेक्ट स्तर पर नहीं। प्रोजेक्ट स्तर पर सेटिंग मान को हटाना सुनिश्चित करें।

(मेरे लिए, यह एक Xcode बग की तरह लगता है, क्योंकि मुझे नहीं पता कि यह इसे क्यों ठीक करता है)।


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

2
@MarcoAlmeida, यदि आपके पास परीक्षण लक्ष्य है, तो उसके बाद भी "ऑब्जेक्टिव-सी ब्रिजिंग हैडर" को हटाने का प्रयास करें। इसकी मदद करनी चाहिए।
दावत मिरमानोव

3
अविश्वसनीय। धन्यवाद।
डैरेन

1
सुनो! यहाँ एक ही मुद्दा है :( हालांकि यह ऊपर वर्णित विधि के साथ हल नहीं हुआ है ...
माइक के

1
इसने मेरे लिए Xcode 9.2 में काम किया। इसके बाद भी कई वर्षों तक तय नहीं किया गया ...
ओलिवर आइचॉर्न

58

मेरे साथ भी वही दिक्कत है। मैंने अपने सभी आयातों #import "HMSegmentedControl.h"को #import <HMSegmentedControl/HMSegmentedControl.h>उदाहरण के लिए से बदल दिया ।


7
कोकोपोड्स के साथ काम करने के लिए यह आवश्यक है। ब्रिजिंग हेडर में कभी भी #import "abc.h" उपयोगकर्ता #import <abc / abc.h> अंगूठे के रूप में एक पॉड आयात नहीं करता है।
NaXir

1
आप भगवान हैं! इस लिए आपका बहुत - बहुत धन्यवाद।
Alper

मेरे मामले में मैं परिवर्तित #import <ios-qr-एनकोडर / UIImage + MDQRCode.h> #import "UIImage + MDQRCode.h" करने के लिए और यह काम किया
Mashhadi

आप राजा हैं
इताई क्षेत्र

27

मुझे libउपयोगकर्ता निर्देशिका खोज पथ में अपनी निर्देशिका को जोड़ना था :

परीक्षण लक्ष्य सेटिंग - उपयोगकर्ता शीर्ष लेख खोज पथ

मेरे मामले में libनिर्देशिका में .a-library फ़ाइल और कुछ हेडर फाइलें शामिल हैं। ये ब्रिजिंग हेडर फाइल में शामिल हैं। हालाँकि, स्विफ्ट कंपाइलर उन्हें नहीं मिलेगा। केवल जब मैंने ${PROJECT_DIR}/libउपयोगकर्ता हैडर खोज पथ में जोड़ा तो उसने परीक्षण लक्ष्य बनाया।

(मैं Mavericks 10.9.5 पर Xcode 6.2 का उपयोग कर रहा हूं)


1
मैं मुख्य लक्ष्य के हेडर खोज पथ में पॉड्स / * जोड़कर इस मुद्दे को हल कर सकता था। दिलचस्प बात यह है कि स्विफ्ट के ढांचे को अपने लक्ष्य पर निर्भरता के रूप में जोड़ने से पहले मुझे यह समस्या नहीं थी। Xcode 7 बीटा 6.
bizz84

यह वास्तव में मेरे लिए काम कर रहा था। मेरे पास मेरी परियोजना में शामिल एक ढांचा है जिसमें पुस्तकालय (.a) शामिल हैं। मुझे उपयोगकर्ता हैडर खोज पथ में लाइब्रेरी के हेडर के लिए एक खोज पथ बनाना था।
क्रिस लिवडल

इसके अलावा पोड्स / लाइब्रेरी फोल्डर को भी आयात करना पड़ा, बहुत बहुत धन्यवाद!
थिबुत नूह

17

हमें एक ही त्रुटि संदेश का सामना करना पड़ा, एक पूरी तरह से अलग कारण के साथ।

सेट अप:

  • एप्लिकेशन लक्ष्य, सभी ओब्ज-सी कोड
  • एक एकल स्विफ्ट परीक्षण मामले और ऐप कोड का उल्लेख करते हुए एक तेजतर्रार शीर्षक के साथ यूनिट टेस्ट लक्ष्य

जब हमने क्लीन (या टीम मेट की मशीन पर) के बाद दूसरा स्विफ्ट टेस्ट केस जोड़ा, तो यूनिट टेस्ट का लक्ष्य बनाते समय हमने यह त्रुटि देखी।

यह इकाई परीक्षण लक्ष्य के लिए एक डमी ओबज-सी वर्ग को जोड़कर तय किया गया था।


5
धन्यवाद। यह बिल्कुल कोई मतलब नहीं बनाने के बावजूद काम किया।

मैं बाद में डमी ओबज-सी क्लास को हटाने में सक्षम था। मेरा अनुमान है कि इस समाधान का एक दुष्प्रभाव परीक्षण-लक्ष्य-विशिष्ट ब्रिजिंग हेडर का निर्माण है, जो बदले में (मुझे संदेह है) Xcode होस्ट एप्लिकेशन के ब्रिजिंग हेडर को अनदेखा करने का कारण बनता है।
clozach

ऊपर से परिशिष्ट: एक साफ निर्माण करने के बाद, मुझे संकलन के दौरान एक विभाजन दोष 11 प्राप्त करना शुरू हो गया। कुछ परीक्षण और त्रुटि के बाद, यह प्रतीत होता है कि डमी .m फ़ाइल को उपस्थित होना है, लेकिन यह खाली हो सकता है। पागलपन।
क्लोजाच

मेरे परीक्षण लक्ष्य में एक डमी objc वर्ग जोड़कर, इसे मेरे लिए तय किया!
नवनी

5

यदि कोकोपोड्स का उपयोग कर रहे हैं, तो निम्न कमांड चलाकर फली को फिर से स्थापित करने का प्रयास करें।

pod install

इससे मुझे मदद मिली क्योंकि मैंने हाल ही में एक नया कॉन्फ़िगरेशन बनाया है जो संकलन नहीं था (उसी फ़ाइल को समस्या नहीं मिली), जबकि अन्य कॉन्फ़िगरेशन (डीबग और रिलीज़) थे। pod installजोड़ा किसी भी नए विन्यास के लिए आवश्यक लगता है ...
Mete

5

यह किसी भी तरह मेरे लिए चाल थी:

  • स्वच्छ परियोजना
  • साफ बिल्ड फ़ोल्डर
  • Xcode पुनरारंभ करें

जेनेरिक उत्तरों के साथ न आएं और ट्रिक्स न देखें।
निको

इस विशेष हिट और ट्रिक ट्रिक के लिए बहुत कम प्रयास की आवश्यकता होती है, इसलिए इसे अन्य उपायों के बारे में सोचते हुए प्रयास करने के लिए चोट नहीं पहुंचनी चाहिए। ;)
हुलंग

1
अफसोस की बात है, यह विशेष रूप से हिट और कोशिश की चाल भी अक्सर सही जवाब है।
रॉबर्ट श्मिट

5

Cocoapods लाइब्रेरी CocoaImageHashing के साथ इंस्टॉल करते समय यह त्रुटि दिखाई दी। समस्या यह थी कि खोज पथ गलत थे। तो लक्ष्य स्तर पर, बिल्ड सेटिंग्स में -> खोज पथ -> हैडर खोज पथ, पथ गैर-मौजूद फ़ोल्डरों के अनुरूप थे, उदाहरण के लिए "$ {PODS_ROOT} / हेडर / सार्वजनिक / CocoaImageHashing, जब फ़ोल्डर संरचना हेडर्स / पब्लिक / मौजूद नहीं था। मैंने $ {PODS_ROOT} / CocoaImageHashing को जोड़ा और त्रुटि गायब हो गई।


4

वैसे इसका थोड़ा अजीब है लेकिन मुझे लगता है कि आपको अपने मुख्य लक्ष्य से सभी हेडर को लोड करने के लिए अपने परीक्षण लक्ष्य के "कॉपी बंड रिसोर्स" के संसाधन को जोड़ना होगा। मेरे मामले में, मैंने जोड़ा main.storyboardऔर यह त्रुटि का ख्याल रखा।

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


4

वर्तमान कॉन्फ़िगरेशन को जोड़ने / नाम बदलने के बाद मेरे साथ ऐसा हुआ और यह समझ में आता है।

हर विन्यास कोकोपोड्स द्वारा उत्पन्न विन्यास सेट का उपयोग करता है ताकि इन चीजों का मिलान हो सके।

इसलिए यदि आप कॉन्फ़िगरेशन जोड़ते हैं / नाम बदलते हैं, तो उन्हें सही कॉन्फ़िगरेशन सेट का उपयोग करना होगा, और इसके लिए रनिंग pod installकरना होगा।


3

अगर किसी की मदद करता है।

मेरे मामले में मेरी obj-c फ़ाइलों को जोड़ा गया था एक संदर्भ फ़ोल्डर (xcode में नीले फ़ोल्डर) और हेडर उन्हें नहीं मिल सका। बस फाइल्स को जोड़ा, फोल्डर को नहीं, फाइंडर से लेकर एक्सकोड और सॉल्व किया।


2

मुझे भी यही समस्या थी। मेरे लिए कारण यह था कि मैं अपने ऐप और मेरे टुडे एक्सटेंशन दोनों के लिए एक ही ब्रिजिंग-हेडर का उपयोग कर रहा था। माई टुडे एक्सटेंशन में पार्स को शामिल नहीं किया गया है, लेकिन क्योंकि इसे ब्रिजिंग-हेडर में परिभाषित किया गया था, इसलिए इसे देखने की कोशिश की जा रही थी। मैंने अपने टुडे एक्सटेंशन के लिए एक नया ब्रिजिंग-हेडर बनाया और त्रुटि समाप्त हो गई।


मेरे पास एक ही मुद्दे की तरह ध्वनि नहीं है। मेरे पास टुडे एक्सटेंशन नहीं है। मेरे मामले में, मैं ऐप के लिए एक ब्रिजिंग हेडर का उपयोग कर रहा हूं, और पार्स फ्रेमवर्क ऐप निर्भरता में शामिल है। त्रुटि केवल Parse ही नहीं, अन्य चौखटों के लिए भी होती है।
दीया खर्रत

2

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


2

मेरे पास एक मुद्दा था और इसे खोजने के लिए 2 घंटे बिताने के बाद इसे ठीक किया गया। नीचे जैसा मेरा वातावरण:

कोकोपोड 0.39.0

स्विफ्ट 2.x

XCode 7.3.1

कदम:

  1. प्रोजेक्ट पथ: project_name / project_name / your_bridging_header.h
  2. बिल्ड सेटिंग में स्विफ्ट सेक्शन में, ऑब्जेक्टिव-सी ब्रिजिंग हैडर होना चाहिए: project_name / your_bridging_dder.h
  3. में your_bridging_header.h , से सभी घोषणाओं को बदलने को #import
  4. क्लास में जो आपके_3 वें_पार्टी का इस्तेमाल किया जा रहा है । प्रचार आयात your_3rd_party

आपका उत्तर सही है बस तीसरे बिंदु में @jamesthakid उत्तर जोड़ें और अधिक स्पष्ट करें। मेरे लिए काम किया धन्यवाद।
NaXir

5
".H से #import" की सभी घोषणाओं को बदलने का वास्तव में क्या मतलब है?
क्रिस गनवार्डन

1

मैंने अभी-अभी एक मौजूदा योजना को दोहराया था और परियोजना के लिए एक और विन्यास जोड़ा था। मुझे उसी फ्रेमवर्क के प्रोजेक्ट में उसी नाम के साथ एक कॉन्फ़िगरेशन जोड़ना था, ताकि उसी में भी निर्माण हो सकेDerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME) फ़ोल्डर । अन्यथा .framework फ़ाइल बनाई नहीं जाती है और इसलिए इसे आयात नहीं किया जा सकता है।


1

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

पॉडफाइल में मैंने use_frameworks!लिखा था । इस लाइन पर टिप्पणी करना और फिर फिर से चलना pod installमेरे लिए इस मुद्दे को हल कर दिया और त्रुटि दूर हो गई।


1

(27 मई, 2017 तक अद्यतन)

Xcode 8. स्विफ्ट प्रोजेक्ट - इंपोर्टेंट सी।

जानने योग्य बातें:

  1. ब्रिजिंग हेडर फाइल को प्रोजेक्ट के फोल्डर में सेव किया जाना चाहिए। (यानी उसी स्तर पर सहेजा नहीं गया है जो .xcodeproj सहेजा गया है, लेकिन इसके बजाय एक स्तर नीचे फ़ोल्डर्स में जहां आपकी सभी स्विफ्ट और ऑब्जेक्टिव सी फाइलें बच जाती हैं)। यह अभी भी फ़ाइल को शीर्ष स्तर पर पा सकता है, लेकिन यह सही ढंग से लिंक नहीं करेगा और उद्देश्यपूर्ण सी फाइलों को ब्रोडिंग हेडर फ़ाइल में आयात करने में सक्षम होगा
  2. हेडर फ़ाइल को ब्रिजिंग फ़ाइल कुछ भी नाम दिया जा सकता है, जब तक यह एक .h हेडर फ़ाइल है
  3. सुनिश्चित करें कि बिल्ड सेटिंग्स> स्विफ्ट कंपाइलर - जनरल> ऑब्जेक्टिव सी ब्रिजिंग हैडर में रास्ता सही ढंग से आपको हेडर फ़ाइल को ब्रिजिंग करने के लिए इंगित कर रहा है जो आपने बनाया था
  4. महत्वपूर्ण: यदि आप अभी भी "नहीं मिल रहे हैं", तो अपने ब्रिजिंग हेडर फ़ाइल को पहले खाली करने का प्रयास करें और आपके द्वारा वर्तमान में लिखे गए किसी भी आयात को मिटा दें। सुनिश्चित करें कि ब्रिजिंग हेडर फ़ाइल पहले मिल सकती है, फिर उस फ़ाइल में ऑब्जेक्टिव सी इंपोर्ट जोड़ना शुरू करें। किसी कारण के लिए, यह "नहीं मिली" त्रुटि को वापस लाएगा भले ही यह मिल जाए लेकिन यह किसी कारण से आपकी कोशिश को आयात करना पसंद नहीं करता है
  5. आपको अपने किसी भी उद्देश्य C फ़ाइलों में #import "MyBridgingHeaderFile.h" नहीं करना चाहिए। यह भी "फ़ाइल नहीं मिली" त्रुटि का कारण होगा

1
इन सभी बिंदुओं की जाँच की जाती है और अभी भी एक ही मुद्दा है :( किसी भी अन्य बिंदुओं पर ध्यान दिया जाना चाहिए?
अमजद हुसैनी

@AmjadHusseini आपकी प्रोजेक्ट फ़ाइलों को साफ़ करने का प्रयास करें और फिर अपनी परियोजना के व्युत्पन्न डेटा को साफ़ करें फिर xCode को पुनरारंभ करें। मेरे साथ काम किया
मोहम्मद अल्लम

0

मुझे भी ऐसी ही समस्या थी और मेरे लिए केवल एक ही उपाय काम करता था। मैंने सब कुछ सुझाए जाने की कोशिश की, और मुझे पता था कि मैंने अपने ब्रिजिंग हेडर को ठीक से सेट किया है, क्योंकि मेरे पास काम करने के लिए कुछ और काम थे।

जब मैंने प्रोजेक्ट में लाइब्रेरी (ड्रैग एंड ड्रॉप) को कोकोपोड्स के बिना कॉपी किया, उसके बाद ही मैं हेडर को त्रुटियों के बिना आयात कर सका।

मैंने फेसबुक / शिमर लाइब्रेरी का इस्तेमाल किया।


0

मैं फली के साथ एक समान मुद्दा था। मूल रूप से मेरे यूआई परीक्षण चलाने की कोशिश कर रहा है, एक्सकोड ने लापता फली के बारे में शिकायत की। इसका समाधान ऊपर वर्णित किसी भी चीज़ की तुलना में बहुत सरल था:

  1. प्रोजेक्ट फ़ाइल पर जाएं (मुख्य लक्ष्य नहीं)
  2. "जानकारी" टैब पर क्लिक करें (सबसे बाएं)
  3. UI परीक्षण लक्ष्य के लिए उचित पॉड कॉन्फ़िगरेशन सेट करें ("कॉन्फ़िगरेशन" अनुभाग "परिनियोजन लक्ष्य" के तहत सही)

काम कर रहे!

मैंने इसे एक सूत्र में पाया: https://github.com/CocoaPods/CocoaPods/issues/2695

कोको फली के लिए एक बग की तरह थोड़ा सा लगता है, लेकिन मैं कारणों को देख सकता हूं कि यह मुश्किल मामला क्यों हो सकता है।



0

क्लीन प्रोजेक्ट, क्लीन बिल्ड फोल्डर, रीस्टार्ट Xcode। मैं सिर्फ प्रोजेक्ट गोटो में पथ हटाता हूं> सेटिंग बनाएँ> कीवर्ड खोजें। स्विफ्ट कंपाइलर - जनरल -> ऑब्जेक्टिव-सी ब्रिजिंग हेडर ने मेरे लिए काम किया।


0

अगस्त 2019

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

// MyObjcClass.h
@class MySwiftClass; // class forward declaration
@protocol MySwiftProtocol; // protocol forward declaration

@interface MyObjcClass : NSObject
- (MySwiftClass *)returnSwiftClassInstance;
- (id <MySwiftProtocol>)returnInstanceAdoptingSwiftProtocol;
// ...
@end
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.