Xcode MyProjectName-Bridging-Header.h existiert nicht


118

Ich möchte Swift in meinem Objective-C-Projekt verwenden. Also habe ich eine schnelle Klasse hinzugefügt:

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

Und importierte es in eine .m-Datei:

#import "MyProjectName-Swift.h"

Beim Erstellen meines Projekts wird folgende Fehlermeldung angezeigt:

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

HINWEIS: Unter "Build-Einstellungen-> Swift Compiler - Codegenerierung-> Objective-C-Briding-Header" wird MyProjectName-Bridging-Header.h festgelegt

Was soll ich tun, um dieses Problem zu lösen?

Jede Hilfe wird sehr geschätzt.

EDIT: Bridging-Header-Datei: #if defined (__ has_include) && __has_include () # 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.hund MyProjectName-Bridging-Header.harbeiten in entgegengesetzte Richtungen. MyProjectName-Swift.hwird automatisch bereitgestellt. MyProjectName-Bridging-Header.hwird jedoch halbautomatisch bereitgestellt, dh Sie müssen sicherstellen, dass es vorhanden ist. Sind Sie sicher, dass Sie MyProjectName-Bridging-Header.hin Ihrem Projektnavigator sehen können? Wenn nicht, erstellen Sie eine Datei mit diesem Namen und fügen Sie sie Ihrem Projekt hinzu. Überprüfen Sie dann erneut, ob der Pfad in den Build-Einstellungen korrekt ist (er sollte Ihr Projektverzeichnis enthalten : MyProjectName/MyProjectName-Bridging-Header.h.
milos

Haben Sie überprüft, dass der Name Ihres Produktmoduls nicht leer ist? (Build-Einstellungen -> Verpackung -> Name des Produktmoduls)
Nina

Nina, ja, mein Modulname ist "MyProjectName" und nichts
ells

milos, ich dachte, Xcode sollte diese Brautdatei automatisch generieren. Also nein, ich habe diese Datei nicht in meinem Projekt.
user2408952

1
Haben Sie den Bridging-Header.h manuell angegeben? Ich sehe, es gibt einen Rechtschreibfehler 'Briding'
Nina

Antworten:


191

Wenn die Überbrückungsdatei auf derselben Ebene wie die anderen Klassen erstellt wird, müssen Sie möglicherweise den relativen Pfad hinzufügen, wie diese Bilder zeigen. Beachten Sie hier, dass die Bridging-Datei auf derselben Ebene wie die anderen Klassen erstellt wird: Geben Sie hier die Bildbeschreibung ein

Ich habe den Namen korrekt in den Build-Einstellungen eingegeben. Geben Sie hier die Bildbeschreibung ein

Der Compiler findet die Datei jedoch nicht. Geben Sie hier die Bildbeschreibung ein

Wenn ich also den relativen Pfad vom Stamm des Projekts hinzufüge (dh ich füge hinzu ./ProjectName/BridgerFileName.h), Geben Sie hier die Bildbeschreibung ein

Jetzt wird es kompiliert und ich kann eine Methode in meiner Objective C-Klasse aufrufen: Geben Sie hier die Bildbeschreibung ein


4
Für mich ist es überhaupt nicht zu beheben. Es sieht so aus, als würde XCode nicht auf das aktualisierte Feld Objective-C Bridging Header reagieren.
Darius Miliauskas

Es hat zu lange gedauert, bis ich es gefunden habe, aber schließlich. Danke, habe den Fehler behoben :)
Anders Sørensen

Gut demonstriert! Und ja, vergessen Sie nicht, dies sowohl in Ihren Project Build-Einstellungen als auch in den Target Build-Einstellungen zu tun.
Akash Bhardwaj

72

Ich habe festgestellt, dass nach dem manuellen Erstellen der Bridging-Header-Datei und der Auswahl des Standardnamens und -speicherorts der Bridging-Header im Projektverzeichnis abgelegt wird, das sich unter dem Stammverzeichnis befindet.

Dies erfordert den folgenden Wert für die Einstellung: Ziele> [Ihr App-Ziel]> Build-Einstellungen> Swift Compiler - Codegenerierung> Objective-C-Bridging-Header :

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

Beachten Sie, dass Sie, wenn Ihr Projekt ein schnelles Modul (Framework) ist, wie in den Kommentaren erwähnt, möglicherweise Folgendes bevorzugen:

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

2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hwird häufiger sein :)
Gaussblurinc

1
Dies sollte die einzige Antwort sein!
Luca Davanzo

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hBis zu meinem Projektordner erhalte ich den richtigen Pfad, aber das Anhängen führt /$(PROJECT_NAME)mich nicht zum gewünschten Pfad.
iPeter

Hinweis für andere, die möglicherweise das gleiche Problem haben - Beim Kopieren / Einfügen des Kommentars @gaussblurinc wurde ein seltsames Zeichen in den 'Header'-Teil der Zeichenfolge kopiert. Nach dem Kopieren / Einfügen derselben Zeichenfolge aus der Antwort funktionierte dies einwandfrei.
Adam Johns

45

Für diejenigen, die den Bridging Header entfernen

Ich ging den umgekehrten Weg wie die meisten anderen Antworten hier. Ich hatte zuvor einen Bridging Header verwendet, brauchte ihn aber nicht mehr. Nachdem ich es aus meinem Projekt gelöscht hatte, wurde der in der Frage erwähnte Fehler angezeigt. Ich habe die folgenden Schritte ausgeführt, um mein Problem zu lösen.

  1. Gehen Sie zu Ziele> [Ihr App-Ziel]> Build-Einstellungen> Swift Compiler - Allgemein> Objective-C Bridging Header und löschen Sie den Pfad. (Danke an @Donamite für die Idee.) (Sie können einfach anfangen, "Bridging" in das Suchfeld einzugeben, um es zu finden.)
  2. Löschen Sie das abgeleitete Datum. Gehen Sie zu Xcode> Einstellungen> Standorte und klicken Sie auf den grauen Pfeil neben dem Ordner Abgeleitete Daten. Löschen Sie dann Ihren Projektordner.

Geben Sie hier die Bildbeschreibung ein


22

In Swift 4.1

Ihr Projekt haben Sie nicht bridging-Header.h Datei, aber Ihr Projekt hat diesen Pfad. Dazu müssen Sie diesen Pfad löschen ...

Gehen Sie zur targetsDatei und wählen Sie Build Settings----> Swift Compiler - Generalund löschen Sie die bridging-Header.h. Folgen Sie den Screenshots unten ....Geben Sie hier die Bildbeschreibung ein

Löschen Sie die bridging-Header.hDatei in Swift Compiler - General

Geben Sie hier die Bildbeschreibung ein

Jetzt bist du so geworden ...

Geben Sie hier die Bildbeschreibung ein


14

So fügen Sie eine Brückendatei im Swift-Projekt hinzu

Schritt 1. Gehen Sie zu Datei> Kakao mit Objective-C-Datei hinzufügen (für temporäre Zwecke).

Geben Sie hier die Bildbeschreibung ein

Schritt 2. Dann erscheint das folgende PopupGeben Sie hier die Bildbeschreibung ein

Klicken Sie nun auf die Schaltfläche Bridging Header erstellen

GESCHEHEN
SIE BRIGDE Datei in Bundle
DANK


13

Dies sind Schritte zum Erstellen eines Bridging-Headers.

  1. Datei-> Neu-> iOS-> Header-Datei , Geben Sie den Namen der Bridging-Datei wie folgt ein: "yourProjectName-Bridging-Header.h"

  2. Build-Settings-> Objective-C Bridging Header , geben Sie einfach den Namen der Bridging-Header-Datei wie "ProjectName-Bridging-Header.h" an.

    HINWEIS: Die Bridging-Header-Datei sollte sich im Hauptstammordner des Projekts befinden, in dem sich die Datei ".xcodeproj" befindet. Wenn nicht, verschieben Sie die Bridging-Headerdatei in den Stammordner des Projekts. Auf diese Weise kann Xcode auf die Bridge-Datei zugreifen.

  3. Erstellen Sie das Projekt und importieren Sie die erforderlichen Dateien in den Bridging-Header.


12

Für mich hat es geholfen, $ (SRCROOT) / $ (PROJECT_NAME) / vor meinem Bridging-Header-Dateipfad zu verwenden


1
Dies ist eine gültige Antwort. Es sollte nicht markiert worden sein. Sie können $ (SRCROOT) und $ (PROJECT_NAME) als Leitfaden verwenden, um zur richtigen Antwort zu gelangen, aber Sie können wahrscheinlich nicht jede Lösung kopieren und einfügen.
Hobbes the Tige

Die in dieser Antwort vorgestellte Lösung hat mein Problem tatsächlich behoben, danke Srinivas Padidala
Wilson

Machen Sie es. $ (SRCROOT) / $ (PROJECT_NAME) /YourProjectName-Bridging-Header.h funktioniert für mich ............ Fügen Sie $ (SRCROOT) / $ (PROJECT_NAME) / so wie es ist ein ..... fügen Sie Ihren Projektnamen nicht anstelle von $ (PROJECT_NAME) hinzu
ioSana

6

Für mich hat es geholfen, $(SRCROOT)vor meinem Objective-C-Bridging-Header-Pfad zu verwenden.

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

5

Folgen Sie den unteren Schritten:

  1. Löschen Sie die Bridging-Header-Datei. . . (Vielleicht erstellen Sie manuell) und;
  2. Erstellen Sie eine neue Swift-Datei in Objective-C Project. . . (Nicht importieren, zuerst erstellen)

Vielleicht helfen diese beiden Dinge, Ihr Problem zu lösen.


5

Folgendes hat bei mir funktioniert:

  1. Die Bridging-Header-Datei sollte sich im Hauptstammordner des Projekts befinden, in dem sich die Datei ".xcodeproj" befindet. Wechseln Sie in das Projektverzeichnis und ziehen Sie den Bridging-Header per Drag & Drop in das Stammverzeichnis, wenn er sich in einem anderen Ordner befindet.
  2. Korrigieren Sie Rechtschreibfehler im Headernamen.
  3. Abgeleitete Daten löschen
  4. Ziel -> Build-Einstellungen -> Swift Compiler: Allgemein -> Obj C-Headername hinzufügen.
  5. Reinigen und erneut ausführen.

2

Manuelles Erstellen einer Bridging-Header-Datei

Löschen Sie zunächst die Bridging-Header-Datei, für die Xcode erstellt wurde. Und wählen Sie Ihr Projekt aus und gehen Sie zu> Build-Einstellungen> Suchen Sie das Schlüsselwort. Swift Compiler - Codegenerierung. Klicken Sie auf Objective-C Bridging Header und löschen Sie diesen Pfad. Bereinigen Sie jetzt Ihr Projekt.

Wählen Sie nun in der Navigationsleiste Ihr Projekt> Fenster. Wählen Sie Projekte und löschen Sie Ihre abgeleiteten Daten von dort.

Erstellen Sie nun eine neue Datei, wählen Sie die Quelle und dann die Header-Datei aus und erstellen Sie Ihre Bridging-Header-Datei. Der Dateiname muss Ihr Projektname-Bridging-Header.h sein und dann erstellt werden

Wählen Sie Ihr Projekt unter> Build-Einstellungen> Suchen Sie das Schlüsselwort. Swift Compiler - Codegenerierung. Klicken Sie auf Objective-C Bridging Header und fügen Sie nun den Pfad in diesem Objective-C Bridging Header wie projectname-Bridging-Header.h hinzu

Importieren Sie nun Ihre Klassen in eine Bridging-Header-Datei und Sie können Ihren Code einfach kompilieren.

Ihre Bridging-Header-Datei sieht folgendermaßen aus, wenn Sie Ihre Datei manuell erstellen.


0

Was mir geholfen hat, war, die Datei manuell in den in einer Fehlermeldung angegebenen Pfad zu verschieben. So:

  1. Ich habe die Datei gelöscht (in den Papierkorb verschoben)
  2. Verschob es in einer Fehlermeldung aus dem Papierkorb in den Pfad
  3. Später musste ich auch das Projekt reinigen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.