Xcode MyProjectName-Bridging-Header.h मौजूद नहीं है


118

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

import Foundation
@objc class System : NSObject {
    @objc func printSome() {
        println("Print line System");
    }
}

और इसे .m फ़ाइल में आयात किया:

#import "MyProjectName-Swift.h"

अपने प्रोजेक्ट का निर्माण करते समय मुझे निम्नलिखित त्रुटि मिलती है:

Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist

नोट: "बिल्ड सेटिंग्स-> स्विफ्ट कंपाइलर - कोड जनरेशन-> ऑब्जेक्टिव-सी ब्राइडिंग हैडर" के तहत MyProjectName-Bridging-Header.h पर सेट है

इस समस्या को हल करने के लिए मुझे क्या करना चाहिए?

किसी भी प्रकार की मदद की बेहद सराहना की जाती है।

संपादित करें: ब्रिजिंग-हैडर फ़ाइल: #if परिभाषित (__ has_include) && __has_include () # में #endif शामिल है

#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if defined(__has_include) && __has_include(<uchar.h>)
# include <uchar.h>
#elif __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif

#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"

#if defined(__has_feature) && __has_feature(modules)
#endif

#pragma clang diagnostic pop

2
MyProjectName-Swift.hऔर MyProjectName-Bridging-Header.hविपरीत दिशाओं में काम करते हैं। MyProjectName-Swift.hस्वचालित रूप से प्रदान किया जाता है। MyProjectName-Bridging-Header.h, हालांकि, अर्ध-स्वचालित रूप से प्रदान किया जाता है, यानी आपको यह सुनिश्चित करना होगा कि यह वहां है। तो, क्या आप सुनिश्चित हैं कि आप MyProjectName-Bridging-Header.hअपने प्रोजेक्ट नेविगेटर में देख सकते हैं ? यदि नहीं, तो अपनी परियोजना में उस नाम के साथ एक फ़ाइल बनाएं और जोड़ें। : तब फिर से जाँच कि सेटिंग बिल्ड में इसे करने के लिए पथ सही है (यह अपनी परियोजना निर्देशिका में शामिल होना चाहिए MyProjectName/MyProjectName-Bridging-Header.h
मिलोस

क्या आपने चेक किया है कि आपका उत्पाद मॉड्यूल नाम खाली नहीं है? (बिल्ड सेटिंग्स -> पैकेजिंग -> उत्पाद मॉड्यूल का नाम)
नीना

नीना, हाँ मेरा मॉड्यूल नाम "MyProjectName" है, न कि कुछ ells
user2408952

milos, मैंने सोचा कि Xcode ऑटो को इस ब्राइडिंग फ़ाइल को उत्पन्न करने वाला था। तो नहीं, मेरे पास वह फ़ाइल मेरे प्रोजेक्ट में नहीं है।
user2408952

1
क्या आपने मैन्युअल रूप से ब्रिजिंग-हेडर निर्दिष्ट किया है? मैं देख रहा हूं, एक वर्तनी की गलती है 'ब्राइडिंग'
नीना

जवाबों:


191

यदि ब्रिजिंग फ़ाइल अन्य वर्गों के समान स्तर पर बनाई गई है, तो आपको इन चित्रों को दिखाने के साथ-साथ आपको सापेक्ष पथ जोड़ना होगा। यहां ध्यान दें कि ब्रिजिंग फ़ाइल अन्य वर्गों के समान स्तर पर बनाई गई है: यहां छवि विवरण दर्ज करें

बिल्ड सेटिंग्स में मेरा नाम सही दर्ज है, यहां छवि विवरण दर्ज करें

लेकिन संकलक फ़ाइल नहीं ढूँढता है। यहां छवि विवरण दर्ज करें

इसलिए, यदि मैं परियोजना के मूल से सापेक्ष पथ जोड़ता हूं (अर्थात, मैं जोड़ता हूं ./ProjectName/BridgerFileName.h), यहां छवि विवरण दर्ज करें

अब यह संकलित करता है और मैं अपने उद्देश्य सी कक्षा में एक विधि कह सकता हूं: यहां छवि विवरण दर्ज करें


4
मेरे लिए यह बिल्कुल भी ठीक नहीं है। ऐसा लगता है कि XCode अपडेटेड ऑब्जेक्टिव-सी ब्रिजिंग हैडर फ़ील्ड पर प्रतिक्रिया नहीं करता है।
डेरियस मिलियास्कस

मुझे खोजने के लिए लंबे समय तक ले गया, लेकिन अंत में। धन्यवाद, त्रुटि तय की :)
एंडर्स सोरेनसेन

अच्छा प्रदर्शन किया! और हाँ अपने प्रोजेक्ट बिल्ड सेटिंग्स और लक्ष्य बिल्ड सेटिंग्स दोनों में ऐसा करना न भूलें।
आकाश भारद्वाज

72

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

सेटिंग के लिए निम्न मूल्य की आवश्यकता होती है: लक्ष्य> [आपका ऐप लक्ष्य]> सेटिंग बनाएँ> स्विफ्ट कंपाइलर - कोड जनरेशन> ऑब्जेक्टिव-सी ब्रिजिंग हैडर :

$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h 

ध्यान दें कि यदि आपकी परियोजना एक स्विफ्ट मॉड्यूल (ढांचा) है, तो जैसा कि टिप्पणियों में बताया गया है, आप पसंद कर सकते हैं:

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h

2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hअधिक आम हो जाएगा :)
gaussblurinc

1
यह एकमात्र उत्तर होना चाहिए!
लुका दावान्ज़ो

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hअपने प्रोजेक्ट फोल्डर तक मुझे सही रास्ता मिल रहा है लेकिन /$(PROJECT_NAME)मुझे वांछित रास्ते पर नहीं ले जाने की अपील की जा रही है।
iPeter

दूसरों के लिए ध्यान दें, जिनके पास एक ही मुद्दा हो सकता है - जब मैं @gaussblurinc टिप्पणी को कॉपी / पेस्ट करता हूं, तो स्ट्रिंग के 'हेडर' भाग में कुछ अजीब चरित्र की नकल की गई थी। उत्तर से उसी स्ट्रिंग को कॉपी / पेस्ट करने के बाद, इसने ठीक काम किया।
एडम जॉन्स

46

उन लोगों के लिए जो ब्रिजिंग हैडर को हटा रहे हैं

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

  1. पर जाएं लक्ष्य> [आपका अनुप्रयोग लक्ष्य]> सेटिंग बिल्ड> स्विफ्ट संकलक - सामान्य> ऑब्जेक्टिव-सी ब्रिजिंग हैडर और पथ को हटा दें। ( विचार के लिए @Donamite का धन्यवाद ।) just आप इसे खोजने के लिए खोज में "ब्रिजिंग" लिखना शुरू कर सकते हैं।)
  2. व्युत्पन्न तिथि हटाएं। पर जाएं Xcode> Preferences> स्थान और व्युत्पन्न डेटा फ़ोल्डर से ग्रे तीर क्लिक करें। फिर अपने प्रोजेक्ट फ़ोल्डर को हटाएं।

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


22

में स्विफ्ट 4.1

आपकी परियोजना आपके पास bridging-Header.hफ़ाइल नहीं है , लेकिन आपकी परियोजना में वह रास्ता है। इसके लिए आपको उस रास्ते को हटाना होगा ...

targetsफ़ाइल पर जाएँ और चुनें Build Settings, ----> Swift Compiler - General, और हटाएँ bridging-Header.h। नीचे स्क्रीन शॉट्स का पालन करें ....यहां छवि विवरण दर्ज करें

bridging-Header.hस्विफ्ट कंपाइलर में फाइल को डिलीट करें - जनरल

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

अब आप इस तरह से ...

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


14

स्विफ्ट परियोजना में ब्रिज फ़ाइल जोड़ने के लिए।

चरण 1. फ़ाइल पर जाएं> उद्देश्य-सी फ़ाइल के साथ कोको जोड़ें (अस्थायी उद्देश्य के लिए)

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

चरण 2. उसके बाद निम्न पॉप अप दिखाई देगायहां छवि विवरण दर्ज करें

अब Create Bridging Header Button दबाएं

किया
आप प्राप्त करेंगे Brigde फ़ाइल में बंडल
धन्यवाद


13

ये ब्रिजिंग हेडर बनाने के लिए चरण हैं।

  1. फ़ाइल-> नया-> iOS-> हैडर फ़ाइल , "yourProjectName-Bridging-Header.h" के रूप में ब्रिजिंग फ़ाइल का नाम दें

  2. बिल्ड-सेटिंग्स-> ऑब्जेक्टिव-सी ब्रिजिंग हेडर , बस ब्रिजिंग हेडर फाइल का नाम "प्रोजेक्टनेम-ब्रिजिंग-हेडर" जैसा हो।

    नोट: ब्रिजिंग हेडर फ़ाइल प्रोजेक्ट के मुख्य रूट फ़ोल्डर में स्थित होनी चाहिए जहां ".xcodeproj" फ़ाइल स्थित है। यदि ब्रिजिंग हेडर फ़ाइल को प्रोजेक्ट के रूट फ़ोल्डर में नहीं ले जाते हैं। इस तरह से Xcode ब्रिज फाइल को एक्सेस करने में सक्षम है।

  3. प्रोजेक्ट बनाएँ, और ब्रिजिंग हेडर में आवश्यक फ़ाइलों को आयात करें।


12

मेरे लिए मेरे ब्रिजिंग हेडर फ़ाइल पथ के सामने $ (SRCROOT) / $ (PROJECT_NAME) / का उपयोग करने में मदद मिली


1
यह एक मान्य उत्तर है। इसे नीचे चिह्नित नहीं किया जाना चाहिए था। आप सही उत्तर पर पहुंचने के लिए एक गाइड के रूप में $ (SRCROOT) और $ (PROJECT_NAME) का उपयोग कर सकते हैं लेकिन आप शायद हर समाधान को कॉपी और पेस्ट नहीं कर सकते।
होब्स

इस उत्तर में प्रस्तुत समाधान ने वास्तव में मेरा मुद्दा तय कर दिया है, धन्यवाद श्रीनिवास पड़ीदाला
विल्सन

इसके लिए जाएं। $ (SRCROOT) / $ (PROJECT_NAME) /YourProjectName-Bridging-Header.h मेरे लिए काम करता है। ..... $ (PROJECT_NAME) के स्थान पर अपने प्रोजेक्ट का नाम न जोड़ें
ioSana

6

मेरे लिए यह $(SRCROOT)मेरे उद्देश्य-सी ब्रिजिंग हेडर पथ के सामने उपयोग करने में मदद करता है।

$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h

5

नीचे दिए गए चरणों का पालन करें:

  1. ब्रिजिंग हेडर फाइल को डिलीट करें। । । (शायद आप स्वयं बनाते हैं) और;
  2. ऑब्जेक्टिव-सी प्रोजेक्ट में नई स्विफ्ट फाइल बनाएं। । । (आयात नहीं, पहले इसे बनाएं)

हो सकता है कि ये दो चीजें आपकी समस्या को हल करने में मदद करें।


5

निम्नलिखित ने मेरे लिए काम किया:

  1. ब्रिजिंग हेडर फ़ाइल को प्रोजेक्ट के मुख्य रूट फ़ोल्डर में स्थित होना चाहिए जहां ".xcodeproj" फाइल स्थित है। यदि यह किसी अन्य फ़ोल्डर के अंदर है, तो प्रोजेक्ट डायरेक्टरी में जाएं और हेडर को ड्रैग और ड्रॉप करें।
  2. हेडर नाम में वर्तनी की गलतियाँ ठीक करें।
  3. व्युत्पन्न डेटा को साफ़ करें
  4. टारगेट -> बिल्ड सेटिंग्स -> स्विफ्ट कंपाइलर: जनरल -> ओब्ज सी हेडर नाम जोड़ें।
  5. साफ करें और फिर से चलाएं।

2

मैन्युअल रूप से ब्रिजिंग हेडर फ़ाइल बनाना

सबसे पहले ब्रिजिंग हेडर फाइल को डिलीट करें जिसे Xcode बनाया गया है। और अपने प्रोजेक्ट गोटो का चयन करें> सेटिंग बनाएँ> कीवर्ड खोजें। स्विफ्ट कंपाइलर - कोड जनरेशन। Objective-C Bridging Header पर क्लिक करें, उस पथ को हटा दें। अब अपने प्रोजेक्ट को साफ करें।

अब नेविगेशन बार में अपनी परियोजना> विंडो चुनें। परियोजनाओं का चयन करें और वहाँ से अपने व्युत्पन्न डेटा को हटा दें।

अब एक नई फाइल बनाएं, सोर्स चुनें और फिर हेडर फाइल को चुनें और अपनी ब्रिजिंग हेडर फाइल बनाएं। फ़ाइल का नाम आपका प्रोजेक्टनेम-ब्रिजिंग-हैडर.ह होना चाहिए और फिर इसे बनाएं

अपना प्रोजेक्ट गेटो चुनें> सेटिंग बनाएँ> कीवर्ड खोजें। स्विफ्ट कंपाइलर - कोड जनरेशन। Objective-C Bridging Header पर क्लिक करें और अब इस Objective-C Bridging Header में पथ जोड़ें जैसे projectname-Bridging-Header.h

अब अपनी कक्षाओं को शीर्ष लेख फ़ाइल में आयात करें और आप इसे आसानी से अपना कोड संकलित कर सकते हैं।

जब आप अपनी फ़ाइल मैन्युअल रूप से बना रहे होते हैं तो आपकी ब्रिजिंग हेडर फ़ाइल इस तरह दिखती है।


0

त्रुटि संदेश में बताए गए पथ पर फ़ाइल को मैन्युअल रूप से स्थानांतरित करने में मुझे क्या मदद मिली। इसलिए:

  1. मैंने फ़ाइल हटा दी (ट्रैश में स्थानांतरित)
  2. त्रुटि संदेश में इसे ट्रैश से पथ पर ले जाया गया
  3. बाद में मुझे भी परियोजना को साफ करना पड़ा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.