ios protocol Swift Bridging Header-Importproblem




xcode use swift in objective c (16)

Dies wird wahrscheinlich nur einen kleinen Prozentsatz der Leute betreffen, aber in meinem Fall verwendete mein Projekt CocoaPods und einer dieser Pods hatte eine Unterspezifikation mit eigenen CocoaPods. Die Lösung bestand darin, Vollwinkelimporte zu verwenden, um auf alle Dateien in den Unterfenstern zu verweisen.

#import <HexColors/HexColor.h>

Eher, als

#import "HexColor.h"

Nach den Anweisungen habe ich einen Überbrückungs-Header erstellt und meinem Projekt hinzugefügt. Leider ist der folgende Fehler aufgetreten:

: 0: Fehler: konnte Objective-C Header '--- Pfad - zu --- Header / .... h' nicht importieren

In den Build-Einstellungen habe ich die Header-Suchpfad-Zeichenfolge zum Speicherort des Überbrückungs-Headers hinzugefügt, aber nichts half.

Hat jemand dieses Problem erlebt?


Für mich war es, weil ich vergessen habe, es den Build-Einstellungen des Ziels hinzuzufügen.


Für mich löschte das Löschen der abgeleiteten Daten es, ich bemerkte, dass selbst wenn ich aus einem alten Commit auschecke, das gleiche Problem passiert.

Sie können diese Option von Fenster-> Projekte erreichen.


Ich habe tatsächlich eine leere OSX Source Objective C-Datei unter dem Projekt erstellt (wo alle meine schnellen Dateien sind).

Ich habe die Importe hinzugefügt und dann die .m- Datei gelöscht.


Nach ersten Tagen des Kampfes habe ich es endlich geschafft, die Facebook-Anmeldung erfolgreich in meine iOS-App zu integrieren. Hier sind die Schritte (ich gehe davon aus, dass Sie Facebook SDK v4.1 oder höher bereits auf Ihren Rechnern installiert haben):

  1. Fügen Sie die Facebook-Frameworks - FBSDKCoreKit, FBSDKLoginKit unter Ihrem Projekt hinzu.
  2. Nehmen Sie keine Änderungen an den Build-Einstellungen vor, da FB SDK v4.1 und höher keine Bridging-Header-Dateien mehr benötigt.
  3. Importieren Sie das FBSDKCorekit, FBSDKLoginKit in ViewController.swift, AppDelegate.swift-Dateien
  4. Fügen Sie Informationen in die pList wie here erwähnt hinzu

  5. Erstellen Sie Ihre App. Und wohu! keine Kompilierzeitfehler.


Ich habe diese Art von Fehler erlebt, als ich eine Today-Erweiterung zu meiner App hinzugefügt habe. Das Build-Ziel für die Erweiterung wurde mit dem Namen des Bridging-Headers wie das Build-Ziel meiner App generiert. Das führte zu dem Fehler, da die Erweiterung die Dateien nicht in dem Bridging-Header meiner App aufgeführt wird.

Das einzige, was Sie tun müssen, ist löschen oder ändern Sie den Namen der Bridging-Header für die Erweiterung und alles wird gut.

Hoffe, dass dies helfen wird.


Ich habe in einigen Dateien aus Bridgin-Header-Dateien von Cocoapods nicht in der richtigen Weise importiert.

Anstatt zu importieren

#import <SomeCocoaPod/SomeCocoaPod.h>

Ich hab geschrieben

#import "SomeCocoaPod.h"

Und das war mein großer Fehler


"Wir müssen Xcode mitteilen, wo nach den Header-Dateien gesucht wird, die wir in unserem Bridging-Header auflisten. Suchen Sie den Abschnitt Suchpfade und ändern Sie die Einstellung auf Projektebene für Suchpfade für Benutzerheader , indem Sie einen rekursiven Eintrag für die Pods hinzufügen. Verzeichnis: Pods / ** " http://swiftalicio.us/2014/11/using-cocoapods-from-swift/


Ich habe dieses Problem auch erlebt und leider ist es nur ein Fehler im SDK + Xcode. Ich habe mit einem Ingenieur auf der WWDC über dieses und einige andere Probleme gesprochen, die ich mit CloudKit hatte. Diese Fehler werden im nächsten Seed von Xcode angesprochen.

Es ist der spaßige Teil über die Verwendung von Beta-Software.


Unter den anderen Fixes hatte ich den Fehler, als ich versuchte, Product-> Archive zu machen. Es stellte sich heraus, dass ich folgendes hatte:

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

Nachdem es in der letzten Zeile gesetzt wurde, funktionierte es.


für andere, die Schwierigkeiten haben, eine schnelle Klasse in ein objective-c-Projekt einzubauen. das ist was für mich funktioniert:

  1. Erstellen Sie eine neue swift-Datei. Dadurch wird xcode aufgefordert, anzugeben, ob xcode alle Einstellungen für das mix swift-objective-c-Projekt einschließlich bridge-header.h für Sie erstellen soll. Ja drücken.
  2. Fügen Sie jetzt Ihre vorhandenen Swift-Dateien hinzu, die Sie in Ihrem Projekt verwenden möchten.
  3. In der Implementierungsdatei werden Sie die Swift-Klasse hinzufügen: #import "YOURPROJECTNAME-swift.h". Diese Datei xcode erstellt für Sie. Wenn Ihr xcode-Projekt myProject ist, dann "myProject-swift.h"

und das ist es. Jetzt erstellen Sie die Swift-Klasse in Ihrem Code, als wäre es objective-c.


Fügen Sie Ihrem Projekt eine temporäre Objective-C-Datei hinzu. Sie können ihm einen beliebigen Namen geben.

Wählen Sie Ja, um einen Objective-C-Bridging-Header zu konfigurieren.

Löschen Sie die temporäre Objective-C-Datei, die Sie gerade erstellt haben.

Fügen Sie in der soeben erstellten Datei projectName-Bridging-Header.h folgende Zeile hinzu:

'#import <GoogleMaps / GoogleMaps.h>'

Bearbeiten Sie die AppDelegate.swift-Datei:

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

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

    return true
}

Folgen Sie dem Link für die vollständige Probe


Setze Precompile Bridging Header auf No, um das Problem für mich zu beheben.


Finde den Pfad unter:

Build-Einstellungen / Swift Compiler-Code-Generierung / Objective-C Bridging-Header

und lösche diese Datei. Dann sollte es dir gut gehen.


In meinem Fall war dies tatsächlich ein Fehler aufgrund eines Zirkelverweises. Ich hatte eine Klasse in den Bridging-Header importiert, und die Header-Datei dieser Klasse importiert den Swift-Header ( <MODULE_NAME>-Swift.h ). Ich tat dies, weil ich in der Obj-C-Header-Datei eine Klasse verwenden musste, die in Swift deklariert wurde. Die Lösung bestand darin, einfach die @class Deklarative zu verwenden.

Also im Grunde der Fehler sagte "Fehler beim Importieren von Bridging-Header", der Fehler oben sagte <MODULE_NAME>-Swift.h Datei nicht gefunden, darüber war ein Fehler auf eine bestimmte Obj-C-Header-Datei (nämlich eine View-Controller).

Als ich diese Datei untersuchte, bemerkte ich, dass die Swift.h in der Kopfzeile deklariert war. Durch Verschieben dieses Imports auf die Implementierung wurde das Problem behoben. Also musste ich ein Objekt verwenden, nennen MyObject es MyObject das in Swift definiert ist, also habe ich einfach den Header geändert, um zu sagen

@class MyObject;

Ich habe das gleiche Problem aus verschiedenen Gründen, hier ist mein Fall Ich baue Projekt, das Dia-Menü benötigt, um einbezogen zu werden, ich benutze SWRevealViewController lib, um das zu nähern

Wenn ich die Bibliotheksdateien importiere, füge ich einen Unterordner (SWRevealViewController) unter Unterstützende Dateien für .h && .m Dateien hinzu, es löst zwei Fehler aus, kann Bridge nicht importieren und SWRevealViewController.h wird nicht gefunden.

Wie ich es behebe

Wenn ich Dateien direkt in unterstützende Dateien verschiebe (Unterordner löschen), wird SWRevealViewController.m automatisch zu Buildphasen hinzugefügt -> Quellen kompilieren und das Problem ist weg







objective-c-swift-bridge