स्विफ्ट ब्रिजिंग हेडर आयात मुद्दा


123

निर्देशों का पालन करते हुए, मैंने एक ब्रिजिंग हेडर बनाया है और अपने प्रोजेक्ट में जोड़ा है। दुर्भाग्य से, निम्नलिखित त्रुटि हुई:

: 0: त्रुटि: ऑब्जेक्टिव-सी हेडर आयात नहीं कर सका '--- पथ - से --- हेडर / .... एच'

स्क्रीनशॉट 1

बिल्ड सेटिंग्स में मैंने हेडर सर्च पथ स्ट्रिंग को हेडर ब्रिजिंग के स्थान पर जोड़ा, लेकिन कुछ भी मदद नहीं की।

क्या किसी ने इस समस्या का सामना किया है?


आप हेडर फ़ाइल को स्वयं जोड़ने के बजाय कर सकते हैं। नई फ़ाइल का उपयोग करें .. एक नया रिक्त उद्देश्य-सी फ़ाइल जोड़ने के लिए। यह आपको एक हेडर-ब्रिज फ़ाइल की पेशकश करेगा जहाँ आप अपना आयात जोड़ सकते हैं। इसके बाद आप .m फ़ाइल आपके द्वारा अभी जोड़ी को हटा सकते हैं
markhunte

हां, मैंने इस तरह भी निश्चित रूप से कोशिश की है, लेकिन कुछ भी मदद नहीं की
निकिता Pronchik

क्या यह एक ताजा परियोजना पर है या वही जो आपने हाथ से किया था?
मार्केन

यह नए प्रोजेक्ट पर है, मैंने किचेन सपोर्ट रैपर को एड किया है, जिसे मैंने एक बार OBJC पर लिखा था
निकिता प्रोंचिक

माफ़ करना। निश्चित नहीं है कि आपके द्वारा जोड़े गए किचेन समर्थन आवरण से क्या मतलब है। लेकिन मुझे लगता है कि आप iOS पर हैं क्या आपको OSX प्रोजेक्ट के साथ वही मिलेगा जो मैं उपयोग कर रहा हूं
मार्क

जवाबों:


153

उस फ़ाइल को फ़ोल्डर में जोड़ने के लिए सावधान रहें जो आपकी त्रुटि शिकायत कर रही है! मैंने एक ही गलती की है, अगर आप फ़ाइल को Xcode से बनाते हैं, तो यह फ़ोल्डर में जाएगी: Project-> Project-> Header.h

और Xcode Project-> Header.h की तलाश में है

इसका मतलब है कि आपको फ़ाइल को अपने प्रोजेक्ट फ़ोल्डर (ProjectName-> ProjectNameFolder) के अंदर रखना होगा!

उम्मीद है की वो मदद करदे ;)

अद्यतन: मुझे यकीन नहीं है कि अगर मुझे तुम्हारा मतलब है, लेकिन अपनी समस्या को हल करने के लिए यह कोशिश करो:
1. अब तक आपके द्वारा बनाई गई अपनी सभी ब्रिजिंग फ़ाइलों को हटा दें।
2. प्रोजेक्ट का मुख्य फ़ोल्डर चुनें और नई फ़ाइल हिट करें-> iOS-> हैडर फ़ाइल।
3. बनाई गई हेडर फ़ाइल में अपने आयात लिखें।
4. Xcode-> बिल्ड सेटिंग्स के अंदर प्रोजेक्ट का चयन करें, सर्च फील्ड में टाइप करें: ब्रिजिंग करें और अपनी SWIFT फ़ाइल या उसके लिए पथ का नाम SWIFT_OBJC_BRIDGING_HEADER रखें!

यदि आप इस चरण का पालन करते हैं, तो आपकी हेडर फ़ाइल सही स्थान पर बनाई जाएगी!

: डी आशा है कि मदद करता है!


ठीक है, मैं सिर्फ इस पद्धति की कोशिश की, हेडर वास्तव में दिखाई दे रहा है, लेकिन, दुर्भाग्य से, ओबज-सी कक्षाएं ब्रिजिंग अभी भी अदृश्य हैं (हेडर ब्रिजिंग में उन्हें शामिल करने के बाद)
निकिता प्रुनिक

11
पहले तो उत्तर कहता है "फ़ाइल को xcodeproj के समान स्तर पर रखने की आवश्यकता है", अंत में, यह कहता है "सुनिश्चित करें कि फ़ाइल है ... xcodeproj के समान स्तर में नहीं है"। क्यों?
बून

3
मेरा मतलब था कि फ़ाइल को प्रोजेक्ट के डी सबफ़ोल्डर के अंदर स्थित होना चाहिए, न कि xcodeproj के समान स्तर पर। उदाहरण: आपके प्रोजेक्ट के फ़ोल्डर में आपके पास प्रोजेक्ट, project.xcodeproj और projecttests हैं। फ़ाइल प्रोजेक्ट फ़ोल्डर के अंदर होनी चाहिए :)
रेनन कोसिक

5
मैं सब कुछ करने की कोशिश की, लेकिन nothnig मेरे लिए काम करता है। यह बहुत परेशान करने वाला है। मैं xcode 8 और स्विफ्ट के साथ काम कर रहा हूं। 3. क्या आप मेरी मदद कर सकते हैं
हार्दिक शाह

1
मुझे भ्रम है कि आप कहते हैं "इसका मतलब है कि आपको फ़ाइल को xcodeproj के समान स्तर पर रखने की आवश्यकता है!" लेकिन बाद में आपने कहा "सुनिश्चित करें कि फ़ाइल प्रोजेक्ट के मुख्य फ़ोल्डर के अंदर स्थित है न कि xcodeproj के समान स्तर में!" इनमें से कौनसा?
बकलोलो

68

मेरे मामले में यह वास्तव में एक परिपत्र संदर्भ के परिणामस्वरूप एक त्रुटि थी। मेरे पास ब्रिजिंग हेडर में आयातित एक क्लास थी, और उस क्लास की हेडर फाइल स्विफ्ट हेडर ( <MODULE_NAME>-Swift.h) आयात कर रही थी । मैं ऐसा इसलिए कर रहा था क्योंकि ओज-सी हेडर फ़ाइल में मुझे स्विफ्ट में घोषित एक वर्ग का उपयोग करने की आवश्यकता थी, समाधान केवल @classघोषणात्मक का उपयोग करना था ।

तो मूल रूप से त्रुटि ने कहा "ब्रिजिंग हेडर आयात करने में विफल रहा", इसके ऊपर त्रुटि ने कहा कि <MODULE_NAME>-Swift.hफ़ाइल नहीं मिली, ऊपर यह एक विशिष्ट ओबज-सी हैडर फ़ाइल (अर्थात् एक देखें नियंत्रक) को इंगित करने में त्रुटि थी।

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

@class MyObject;

1
यह मूर्खतापूर्ण है लेकिन इसे लागू करने वाली फ़ाइल में ले जाना मेरे लिए भी काम कर गया। दुर्भाग्य से मुझे हेडर में इसकी आवश्यकता थी क्योंकि मेरी कक्षा एक स्विफ्ट फ़ाइल में परिभाषित प्रतिनिधि को लागू करती है। लेकिन जब से मेरी कक्षा वास्तव में प्रतिनिधि को लागू करती है, जब मैं इसे पास करता हूं, तो obj-c परवाह नहीं करता है, मैं इसके साथ समझौता करूंगा। लेकिन आदर्श रूप से एक और तरीका होगा
ओरेन

आपको ब्रिजिंग हेडर में लाए जाने वाले आयात को भी जांचना पड़ सकता है। यदि उन आयातित वर्गों में से किसी के पास "-Swift.h" फ़ाइल का संदर्भ है, तो आपको घोषणा को .m में ले जाना होगा।
काइल कारुथर्स

30

यहां पाएं रास्ता:

सेटिंग्स बनाएँ Settings स्विफ्ट कंपाइलर Gener कोड जनरेशन-ऑब्जेक्टिव-सी ब्रिजिंग हैडर

और उस फ़ाइल को हटा दें। तब आपको ठीक होना चाहिए।


2
तुम जीते। मैंने इस पर इतना समय बर्बाद किया। सरल और प्रभावी। Xcode इस रास्ते के साथ कुछ पेचीदा कर रहा है, जैसे इसे पर्दे के पीछे $ (SRCROOT) में जोड़ना। मुझे लगता है कि मेरे रास्ते में जगह होना समस्या का हिस्सा हो सकता है लेकिन यह चांदी की गोली थी।
शाम

1
आप उस फ़ाइल को कैसे हटाते हैं?
जैकी वांग

7
Xcode 8 में - "कोड जेनरेशन" के बजाय यह स्विफ्ट कंपाइलर instead जनरल में है।
विवेक बंसल

धन्यवाद मुझे बचाओ ... बहुत बहुत धन्यवाद
विजय राठौड़

18

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

#import <HexColors/HexColor.h>

बजाय

#import "HexColor.h"

2
क्या फर्क पड़ता है?
डेनियल गोमेज़ रिको

मेरे लिए यही समस्या थी। मुझे "ब्रिजिंग हेडर आयात करने में विफल" और "XYZ.h" त्रुटी नहीं मिली। इस परिवर्तन को करने से मेरे लिए Xcode 6.4 और Swift 1.2 पर इसे हल किया गया।
एंटाल्पी

1
@danielgomezrico एक कथन उपनिर्देशिका में फ़ाइल को इंगित करता है। फ़ाइल के अन्य बिंदु मौजूद नहीं हैं।
केसी मरे

कोकोपोड्स का उपयोग करते समय मेरे लिए इस त्रुटि का समाधान बस नए कॉन्फ़िगरेशन को बनाने के बाद फिर से पॉड इंस्टॉल चलाने का था।
टाइपराइटर

16

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

आप उस विकल्प के रूप में पहुँच सकते हैं Window-> प्रोजेक्ट्स।


9

मेरे लिए यह इसलिए था क्योंकि मैं इसे टारगेट बिल्ड बिल्ड में जोड़ना भूल गया था।

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


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

9

"हमें Xcode बताने की आवश्यकता है कि हम अपने शीर्ष लेख में सूचीबद्ध हेडर फ़ाइलों की तलाश कहाँ करें । खोज पथ अनुभाग खोजें, और उपयोगकर्ता हेडर खोज पथों के लिए प्रोजेक्ट-स्तर सेटिंग बदलें , 'पॉड्स' के लिए पुनरावर्ती प्रविष्टि जोड़ें। निर्देशिका: फली / ** " http://swiftalicio.us/2014/11/using-cocoapods-from-swift/


6

मैंने भी इस समस्या का अनुभव किया है और दुख की बात है कि यह एसडीके + एक्सकोड में सिर्फ एक बग है। मैंने WWDC के एक इंजीनियर से इस बारे में और कुछ अन्य समस्याओं के बारे में बात की, जो मुझे CloudKit के साथ हो रही थीं। इन बगों को Xcode के अगले बीज में संबोधित किया जाएगा।

यह बीटा सॉफ्टवेयर का उपयोग करने के बारे में मजेदार हिस्सा है।


1
हाँ, यह निराशाजनक है। मेरी टीम और मैं CloudKit के साथ एक NSURL समस्या का पता लगाने की कोशिश कर रहे थे और हम यह पता नहीं लगा सके कि हम क्यों गलतियाँ कर रहे थे, यह बताता है कि यह एक सर्वर साइड समस्या थी Apple द्वारा। हम भी कुछ नहीं कर सके। इतना समय बर्बाद किया। haha।
डगलस जुंबी

5
शीर्ष लेख को सही स्थान पर रखकर समस्या को वास्तव में हल किया जा सकता है। मेरे लिए जो काम किया गया वह हेडर प्रोजेक्ट-ब्रिजिंग-हेडर कह रहा है और इसे मेरे प्रोजेक्ट फ़ोल्डर ट्री (मेरे मुख्य Xcode प्रोजेक्ट फाइल के सहोदर के रूप में) के रूट में रखकर। @ रेनान-कोसिकी उत्तर देखें
jb

1
एक Xcode अपडेट में फिक्स्ड, यह प्रारंभिक शर्त के साथ एक समस्या के कारण हुआ था।
डगलस बंबी

3

दूसरों के लिए जो उद्देश्य-सी परियोजना में स्विफ्ट क्लास को जोड़ने के लिए परेशान हैं। यह मेरे लिए क्या काम है:

  1. नई स्विफ्ट फ़ाइल बनाएँ। यदि आप चाहते हैं कि यह आपके लिए ब्रिगेड-हेडर.एच सहित मिक्स स्विफ्ट-ऑब्जेक्टिव-सी प्रोजेक्ट के लिए सभी सेटिंग्स बनाने के लिए xcode को संकेत दे तो आपको संकेत देगा। दबाओ हां।
  2. अब, अपनी मौजूदा स्विफ्ट फ़ाइलों को अपने प्रोजेक्ट में उपयोग करना चाहते हैं।
  3. कार्यान्वयन फ़ाइल में आप स्विफ्ट क्लास ऐड का उपयोग करने जा रहे हैं: #import "yourPROJECTNAME-स्विफ्ट.एच"। यह फ़ाइल आपके लिए xcode बनाता है। अगर आपका xcode प्रोजेक्ट myProject है तो "myProject-स्विफ्ट.एच"

और बस। अब अपने कोड में स्विफ्ट क्लास बनाएं जैसे यह ऑब्जेक्टिव-सी था।


3

मैं कुछ फ़ाइलों में आयात किया गया है जो कोकोडापोड से उचित तरीके से नहीं है।

आयात करने के बजाय

#import <SomeCocoaPod/SomeCocoaPod.h>

मैंने लिखा

#import "SomeCocoaPod.h"

और यह मेरी बहुत बड़ी गलती थी


2

अपनी परियोजना में एक अस्थायी उद्देश्य-सी फ़ाइल जोड़ें। आप इसे अपनी पसंद का कोई भी नाम दे सकते हैं।

ऑब्जेक्ट-सी ब्रिजिंग हेडर को कॉन्फ़िगर करने के लिए हां का चयन करें।

आपके द्वारा अभी बनाई गई अस्थायी ऑब्जेक्टिव-सी फाइल को डिलीट करें।

ProjectName-Bridging-Header.h फ़ाइल अभी बनाई गई है, इस पंक्ति को जोड़ें:

'#import <GoogleMaps / GoogleMaps.h>'

AppDelegate.swift फ़ाइल संपादित करें:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    GMSServices.provideAPIKey("AIza....") //iOS API key

    return true
}

पूर्ण नमूने के लिए लिंक का अनुसरण करें


2

मेरे लिए यह फ्रेमवर्क जोड़ते समय गंतव्य पथ में 'यदि आवश्यक हो तो कॉपी आइटम' का चयन नहीं कर रहा था। बस इस विकल्प के साथ ढांचे को फिर से जोड़ें।


1

शुरुआती कुछ दिनों के संघर्ष के बाद, मैं आखिरकार अपने iOS ऐप में फेसबुक साइनअप को सफलतापूर्वक एकीकृत करने में कामयाब रहा। यहाँ चरण दिए गए हैं (मैं मान रहा हूँ कि आपने पहले ही फेसबुक SDK v4.1 या इसके बाद के संस्करण को अपनी मशीनों में स्थापित किया है):

  1. अपने प्रोजेक्ट के तहत फेसबुक फ्रेमवर्क - FBSDKCoreKit, FBSDKLoginKit जोड़ें।
  2. FB SDK v4.1 के रूप में बिल्ड सेटिंग्स में कोई बदलाव न करें और शीर्ष लेख फ़ाइलों की अब और आवश्यकता नहीं है।
  3. FBSDKCorekit, FBSDKLoginKit को ViewController.swift, AppDelegate.swift फ़ाइलों में आयात करें
  4. यहाँ बताए अनुसार pList में informations जोड़ें

  5. अपना ऐप बनाएं। और वाह! कोई संकलन समय त्रुटियों।


2
यदि आप लिंक किए गए पृष्ठ से विवरण शामिल करते हैं तो यह उत्तर बेहतर होगा। यदि लिंक किया गया पेज बदल जाता है या लिंक काम करना बंद कर देता है, तो इस उत्तर को पढ़ने वाले लोगों को पता नहीं चलेगा कि उन्हें चरण 4 में आने पर क्या करना है
टीएनटी

1

मेरे पास अलग-अलग कारणों से एक ही मुद्दा है, यहां मेरा मामला है कि मैं परियोजना का निर्माण करता हूं जिसमें स्लाइड मेनू को शामिल करने की आवश्यकता है, मैं दृष्टिकोण के लिए SWRevealViewController का उपयोग कर रहा हूं

जब मैं .h && .m फ़ाइलों के लिए सहायक फ़ाइलों के तहत उप-फ़ोल्डर (SWRevealViewController) जोड़ता हूं, तो मैं लाइब्रेरी फ़ाइलों को आयात करता हूं, यह दो त्रुटियों को आग लगा देता है, केंट आयात पुल और SWRevealViewController.h नहीं मिला है।

मैं इसे कैसे ठीक करूं

जब मैं फ़ाइलों को सहायक फ़ाइलों में सीधे स्थानांतरित करता हूं (उप-फ़ोल्डर हटाएं), SWRevealViewController.m स्वचालित रूप से बिल्ड चरणों में जोड़ा गया -> संकलित स्रोत और समस्या दूर हो गई है

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


1

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

केवल एक चीज जिसे आपको एक्सटेंशन के लिए ब्रिजिंग हेडर का नाम हटाना या बदलना है और सब ठीक हो जाएगा।

उम्मीद है कि इससे मदद मिलेगी।


0

मैंने वास्तव में प्रोजेक्ट के तहत एक खाली OSX सोर्स ऑब्जेक्टिव सी फाइल बनाई है (जहां मेरी सभी स्विफ्ट फाइलें हैं)।

मैंने आयात जोड़ा और फिर .m फ़ाइल को हटा दिया ।


0

अन्य सुधारों के बीच, जब मैंने Product-> संग्रह करने की कोशिश की तो मुझे त्रुटि हुई। यह मेरे पास है:

Objective-C Bridging Header
  Debug (had the value)
  Release (had the value)
    Any architecture | Any SDK (this was blank - problem here!)

इसे उस अंतिम पंक्ति में स्थापित करने के बाद, इसने काम किया।


0

इसी तरह का मुद्दा था जो ऊपर के किसी भी समाधान से हल नहीं हो सकता था। मेरी परियोजना कोकोआपोड्स का उपयोग करती है। मैंने देखा कि त्रुटियों के साथ मुझे निम्नलिखित संदेश के साथ एक चेतावनी मिली:

Uncategorized: Target 'Pods' of project 'Pods' was rejected as an implicit dependency for 'Pods.framework' because its architectures 'arm64' didn't contain all required architectures 'armv7 arm64'

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

इसलिए समाधान काफी सरल था। पॉड्स प्रोजेक्ट के लिए, बिल्ड एक्टिव आर्किटेक्चर बदलें केवल फ्लैग टू नो और मूल त्रुटि चली गई।


0

सेट precompile ब्रिजिंग हैडर के लिए कोई मेरे लिए इस समस्या को ठीक।


क्यों घटता है? यह कुछ लोगों के लिए एक कानूनी समाधान है। मैंने एक बड़े प्रोजेक्ट पर इसे और बंद करने के साथ पुनरावृत्ति करने का मानदंड बनाया है और इसमें बिल्कुल भी कोई अंतर नहीं दिखता है (Apple ने 30% तक स्पीडअप देखा है), लेकिन बिल्ड फाइल्स को खो देने और खो जाने से लेकर खरोंच तक लगने वाले समय की मात्रा पर्याप्त है
एलेक्जेंडर जी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.