web-dev-qa-db-de.com

Beim Importieren von Objective-C-Frameworks in das Swift-Projekt wird "Datei nicht gefunden" in Bridging Header abgerufen

Ich habe ein Swift-Projekt, für das ich versuche, ObjC-basierte Frameworks zu importieren. Das Framework befindet sich in einem Verzeichnis unter dem Projektpfad und wird vom Projekt in Xcode referenziert. Es wird auch auf der Seite "Phasen erstellen" des Projekts zu "Binäres Binär mit Bibliotheken verknüpfen" hinzugefügt.

Aus irgendeinem Grund scheint es mir jedoch nicht möglich zu sein, das Framework in die Bridging-Header-Datei aufzunehmen. Ich erhalte folgende Fehlermeldung:

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'

Dinge, die ich überprüft habe:

  1. Der "Install Objective-C Compatibility Header" ist auf "YES" gesetzt.
  2. Die Header-Suchpfade enthalten den Pfad zu den Frameworks.

Ich bin sicher, dass mir etwas fehlt. Wenn also jemand Hinweise hat, wäre das großartig.

79
Dia Kharrat

Eine Lösung gefunden:

  • Die Einstellung "Objective-C Bridging Header" (alias Swift_OBJC_BRIDGING_HEADER) muss auf Zielebene und NICHT auf Projektebene festgelegt werden. Löschen Sie unbedingt den Einstellungswert auf Projektebene.

(Für mich scheint es ein Xcode-Fehler zu sein, da ich nicht weiß, warum er es behebt).

68
Dia Kharrat

Ich habe das gleiche Problem. Ich habe zum Beispiel alle meine Importe von #import "HMSegmentedControl.h" in #import <HMSegmentedControl/HMSegmentedControl.h> geändert.

54
jamesthakid

Ich musste mein lib-Verzeichnis unter Suchpfade für Benutzerheader hinzufügen:

test target settings - user header search path

In meinem Fall enthält das Verzeichnis lib die .a- Bibliotheksdatei und einige Header-Dateien. Diese sind in der Bridging-Header-Datei enthalten. Der Swift-Compiler würde sie jedoch nicht finden. Erst als ich ${PROJECT_DIR}/lib zum Suchpfad für Benutzerheader hinzugefügt habe, wurde das Testziel erstellt.

(Ich verwende Xcode 6.2 für Mavericks 10.9.5)

23
Rainer Schwarze

Wir haben dieselbe Fehlermeldung mit einer völlig anderen Ursache festgestellt.

Konfiguration:

  • App-Ziel, alles Obj-C-Code
  • Gerätetestziel mit einem einzigen Swift-Testfall und einem Überbrückungsheader, der sich auf App-Code bezieht

Als wir den zweiten Swift-Testfall nach einem Clean (oder auf der Maschine eines Teamkollegen) hinzugefügt haben, haben wir diesen Fehler beim Erstellen des Unit-Testziels festgestellt.

Es wurde behoben, indem dem Einheitentestziel eine Dummy-Klasse Obj-C hinzugefügt wurde.

18
Dan Jackson

Dies hat mir irgendwie den Trick gebracht:

  • Projekt reinigen
  • Bereinigen Sie den Ordner
  • Starten Sie Xcode neu
5
Hlung

Es ist zwar etwas seltsam, aber ich denke, Sie müssen Ihrer "Copy Bundle Resources" -Phase Ihres Testziels eine Ressource hinzufügen, damit alle Kopfzeilen von Ihrem Hauptanwendungsziel geladen werden. In meinem Fall habe ich main.storyboard hinzugefügt und der Fehler wurde behoben.

enter image description here

4
Yas T.

Dieser Fehler trat bei der Installation mit Cocoapods der Bibliothek CocoaImageHashing auf. Das Problem war, dass die Suchpfade falsch waren. Auf Zielebene in Build-Einstellungen -> Suchpfade -> Header-Suchpfade entsprachen die Pfade nicht vorhandenen Ordnern, z. B. "$ {PODS_ROOT}/Headers/Public/CocoaImageHashing", wenn die Ordnerstruktur Headers/Public Ich habe den Pfad $ {PODS_ROOT}/CocoaImageHashing hinzugefügt und der Fehler ist verschwunden. 

4
Nicoara Talpes

Wenn jemandem hilft 

In meinem Fall wurden meine obj-c-Dateien hinzugefügt (Referenzordner) (die blauen Ordner in xcode) und der Header konnte sie nicht finden Die Dateien, nicht der Ordner, wurden aus dem Finder zu xcode hinzugefügt und dort gelöst.

3
DaSilva

Ich hatte das gleiche Problem. Der Grund für mich war, dass ich für meine App und meine Today Extension den gleichen Bridging-Header verwendet habe. Meine Today-Erweiterung enthält Parse nicht. Da sie jedoch im Bridging-Header definiert wurde, versuchte sie, danach zu suchen. Ich habe einen neuen Bridging-Header für meine Today-Erweiterung erstellt und der Fehler verschwand.

2
fisher

Ich hatte ein Problem und habe das Problem behoben, nachdem ich 2 Stunden gefunden hatte. Meine Umgebung wie folgt:

cocoapod 0,39,0

Swift 2.x

XCode 7.3.1

Schritte:

  1. projektpfad: Projektname/Projektname/Ihr_überbrückender_Header.h
  2. Im Swift-Abschnitt unter Build Setting sollte der Objective-C-Bridging-Header folgendermaßen lauten: Projektname/Ihr_Überbrückungsheader.h
  3. Ändern Sie in your_bridging_header.h alle Deklarationen von .h in #import.
  4. In der verwendeten Klasse your_3rd_party. Deklarieren Sie import your_3rd_party
2
Ryan Le

Mein Framework funktionierte vorher und hörte plötzlich auf zu arbeiten, und keine dieser Antworten funktionierte für mich. Ich habe das Framework unter Build-Phasen> Binär mit Bibliotheken verknüpfen entfernt und es erneut hinzugefügt. Wieder angefangen zu arbeiten.

1
James

Wenn Sie Cocoapods verwenden, installieren Sie die Pods erneut, indem Sie den folgenden Befehl ausführen.

pod install
1
Ankit Goel

Ich hatte gerade ein vorhandenes Schema dupliziert und dem Projekt eine weitere Konfiguration hinzugefügt. Ich musste dem Projekt des Frameworks eine Konfiguration mit demselben Namen hinzufügen, damit es auch im selben DerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME)-Ordner erstellt werden kann. Andernfalls wird die .framework-Datei nicht erstellt und kann daher nicht importiert werden.

1
iMaddin

(Stand vom 27. Mai 2017)

Xcode 8. Swift Projekt - Ziel C importieren  

Sachen zu wissen:

  1. Die Überbrückungsheaderdatei MUSS im Ordner des Projekts gespeichert werden. (d. h. nicht auf derselben Ebene gespeichert werden, auf der .xcodeproj gespeichert ist, sondern eine Ebene weiter in die Ordner, in denen alle Ihre Swift- und Objective C-Dateien gespeichert sind). Sie kann die Datei zwar immer noch auf der obersten Ebene finden, aber sie kann nicht ordnungsgemäß Objective C-Dateien in die Bridging-Header-Datei importieren
  2. Bridging-Header-Datei kann beliebig benannt werden, sofern es sich um eine .h-Header-Datei handelt
  3. Stellen Sie sicher, dass der Pfad unter Build-Einstellungen> Swift-Compiler - Allgemein> Objective C Bridging Header richtig auf Ihre erstellte Bridging-Header-Datei verweist
  4. WICHTIG: Wenn Sie immer noch "nicht gefunden" erhalten, leeren Sie zunächst Ihre Bridging-Header-Datei und löschen Sie alle Importe, die Sie dort gerade geschrieben haben. Stellen Sie sicher, dass die Bridging-Header-Datei zuerst gefunden werden kann, und fügen Sie dann der Datei Objective C-Importe hinzu. Aus irgendeinem Grund wird derselbe Fehler "nicht gefunden" zurückgesetzt, auch wenn er gefunden wird. Der Import kann jedoch aus irgendeinem Grund nicht versucht werden
  5. Sie sollten "MyBridgingHeaderFile.h" in keiner Ihrer Objective C-Dateien #importieren. Dies führt auch zu einem Fehler "Datei nicht gefunden"
1
BennyTheNerd

Bei meinem Versuch, eine in Objective-C geschriebene Pod in meinem Swift-Projekt zu verwenden, stieß ich auf das gleiche Problem. Keine der oben genannten Lösungen schien zu funktionieren. 

In der podfile hatte ich use_frameworks! geschrieben. Durch Kommentieren dieser Zeile und anschließendes Ausführen von pod installagain wurde dieses Problem für mich gelöst, und der Fehler wurde behoben. 

1
Rikh

Dies ist mir nach dem Hinzufügen/Umbenennen der aktuellen Konfigurationen passiert und es ist sinnvoll.

Jede Konfiguration verwendet das von cocoapods generierte Konfigurationsset, sodass diese -Dinge übereinstimmen müssen.

Wenn Sie also Konfigurationen hinzufügen oder umbenennen, müssen diese die richtigen Konfigurationssätze verwenden, und pod install wird dies ausführen.

0
rgkobashi

Projekt reinigen, Build-Ordner bereinigen, Xcode neu starten. Ich entferne einfach den Pfad im Projekt-goto> Build-Einstellungen> Suche nach dem Stichwort. Swift Compiler - Allgemein -> Objective-C Der Bridging-Header hat für mich funktioniert.

0

August 2019

In meinem Fall wollte ich ein Swift-Protokoll in einer Objective-C-Headerdatei verwenden, die vom selben Ziel stammt, und dafür musste ich eine Forward-Deklaration verwenden des Protokolls Swift, um es in der Objective-C-Schnittstelle zu referenzieren. Das Gleiche sollte für die Verwendung einer Swift -Klasse in einer Objective-C-Headerdatei gelten. Informationen zur Verwendung der Forward-Deklaration finden Sie im folgenden Beispiel aus dem Abschnitt docs at Swift -Klassen in Objective-C-Headern mit Forward-Deklarationen einschließen:

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

@interface MyObjcClass : NSObject
- (MySwiftClass *)returnSwiftClassInstance;
- (id <MySwiftProtocol>)returnInstanceAdoptingSwiftProtocol;
// ...
@end
0
ronatory

In meinem Fall musste ich nur den Simulator verlassen ...

0
Michal Shatz

Ich hatte ein ähnliches Problem und nur eine Lösung hat für mich geklappt. Ich habe alles ausprobiert, und ich wusste, dass ich meinen Überbrückungsheader gut eingestellt habe, weil ich eine andere Bibliothek hatte, die funktionierte.

Wenn ich eine Bibliothek (Drag & Drop) in das Projekt kopiert habe (ohne Cocoapods), konnte ich danach ohne Fehler Kopfzeilen importieren.

Ich habe Facebook/Shimmer-Bibliothek verwendet.

0
nja

Ich hatte ein ähnliches Problem mit Hülsen. Beim Versuch, meine UI-Tests durchzuführen, beklagte sich Xcode über fehlende Pods. Die Lösung hierfür war viel einfacher als die oben beschriebenen:

  1. gehe zur Projektdatei (main kein Ziel) 
  2. klicken Sie auf die Registerkarte "Info" (ganz links). 
  3. richtige Pod-Konfiguration für UI-Testziel festlegen (Abschnitt "Konfigurationen" direkt unter "Implementierungsziel")

Arbeiten!

Ich habe es in einem Thread gefunden: https://github.com/CocoaPods/CocoaPods/issues/2695

Klingt ein bisschen nach einem Fehler für Kakaoschoten, aber ich kann Gründe dafür finden, warum dies ein schwieriger Fall sein könnte. 

0
Julian Król