wake-up-neo.com

Fehler beim Import des Bridging-Headers

Ich habe viele Fragen und Antworten gelesen, die sich auf ein ähnliches Problem beziehen, aber ich habe noch keine Lösung gefunden. Wenn jemand etwas Licht werfen könnte, wäre das wunderbar.

Ich habe ein Swift-Projekt erstellt und möchte es nun mit Objective-C kombinieren. Mein "Bridging-Header konnte nicht importiert werden" tritt nur auf, wenn ich versuche, meine Chartboost.h-Datei zu importieren. Solange ich nichts in meiner Überbrückungs-Header-Datei habe, findet Xcode es und gibt mir kein Problem. Aber wenn ich Folgendes hinzufüge:

#import <Chartboost/Chartboost.h>

Ich erhalte zusammen mit 38 anderen Fehlern den Fehler "Swift Compiler Error - Funktionsdefinition ist hier nicht zulässig". 

Ich habe mein Framework richtig importiert. Und mein Suchpfad ist korrekt. Und nur wenn ich das Chartboost-Framework importiere. UIKit und Foundation funktionieren gut.

Hier ist, was ich im Vorfeld getan habe ... Zuerst habe ich eine neue Obj-C-Datei erstellt und dann auf "Ja" geklickt, als Xcode mir ein Popup-Fenster mit der Frage fragte, ob es einen Bridging-Header konfigurieren könnte -Bridging-Header.h "

Dann habe ich sichergestellt, dass der Pfad für den Objective-C Bridging-Header unter Swift Compiler - Code Generation korrekt ist. 

Ich habe sogar einen sehr spezifischen Pfad /Users/me/Desktop/FunFacts/FunFacts-Bridging-Header.h eingegeben, und es wird immer noch "Importieren fehlgeschlagen" angezeigt.

Ich habe auch Defines Module auf "Yes" gesetzt (weil ich gehört habe, dass das helfen kann). Und mein Produktmodulname lautet FunFacts.

Warum kann FunFacts-Bridging-Header.h nicht importieren, wenn ich versuche, #import hinzuzufügen?

27
Alan Scarpa

Ich habe 2 Lösungen gefunden!

1) Dies ist nicht der schönste Weg, aber ich habe meinen gesamten Code aus meiner Chartboost.h-Datei in meine Bridging-Header.h-Datei eingefügt und eingefügt, anstatt zu importieren. Das hat funktioniert. Aber ich wusste, dass es einen besseren Weg gab, also jagte ich weiter ...

2) Die richtige Lösung ist das, was ich als nächstes getan habe. Die Framework-Suchpfade meines Projekts (nicht Ziels) waren leer. Also ging ich voran und fügte den Pfad zum Chartboost-SDK wie folgt hinzu:/Users/me/Desktop/Apps/SDKs/Chartboost
Nun baut und läuft es ohne Probleme und ich musste nicht alles kopieren und in den Bridging-Header einfügen. Alles was benötigt wurde war 

#import <Chartboost/Chartboost.h>

Wenn jemand ein ähnliches Problem hat, lesen Sie einfach, was ich in meiner Frage getan habe, und folgen Sie dann dieser Antwort. 

15
Alan Scarpa

Ich habe darauf in einem anderen Beitrag geantwortet: Probleme mit der Chartboost-Integration mit XCode 6.1

ERLÄUTERUNG:

Es scheint, als würden einige Pods und Bibliotheken die grundlegenden Frameworks nicht importieren, da sie davon ausgehen, dass sie bereits in Ihrem Code vorhanden sind. Dies funktioniert nicht mit Swift, da sich die Methode zum Importieren von Frameworks geändert hat. Alles, was Sie tun müssen, ist, die Frameworks hinzuzufügen, die in Ihrer Bridging-Header-Datei benötigt werden.

ANTWORTEN:

Dies hängt davon ab, welche Fehler der Compiler auslöst . Wenn er sich über NSObject, NSString usw. beschwert, müssen Sie #import <Foundation/Foundation.h> oben in Ihre Bridging-Headerdatei einfügen.

Wenn es sich über UIView, UIButton usw. beschwert, müssen Sie #import <UIKit/UIKit.h> oben in Ihre Bridging-Header-Datei einfügen.

41
xemacobra

Das Problem wie Ihres hat mich verwirrt ... Aber ich habe eine Lösung gefunden. 

#import <Foundation/Foundation.h>

Sie sollten diesen Code (↑) vor Ihren Code setzen. __ Dies ist nur meine Lösung (↓).

#import <Foundation/Foundation.h>
#import <Chartboost/Chartboost.h>

Viel Glück!

6
Hirokio

So habe ich es gelöst (und funktioniert!):

  1. Erstellen Sie Ihre Projektname-Bridging-Header.h-Datei im Stammverzeichnis Ihres Projekts
  2. Fügen Sie dieser Datei die .h der Klassen hinzu, die Sie anzeigen und in Ihrem Swift-Projekt verwenden möchten
  3. Gehen Sie zu Projekt-> Build-Einstellungen-> Suchpfade und setzen Sie den Schlüssel "Always Search User Paths" auf Yes.
  4. Setzen Sie "User Header Search Paths" auf den Stammpfad Ihres Projekts.

Das ist es.

Anscheinend versäumt Xcode die Ordner von Drittanbietern, wenn sie in Ihr Projekt kopiert werden 

Ich bin auf Xcode 6.3, Swift 1.2.

6
PacoGV

Die Antwort ist wirklich sehr einfach.

Stellen Sie sicher, dass Sie den Pfad für den Bridging-Header in Swift_OBJC_BRIDGING_HEADER unter dem Zielabschnitt und nicht im Projektabschnitt hinzufügen.

5
Dipesh Patel

Wenn Sie CocoaPods verwenden, kann dies Zeit sparen. 1) Als erstes müssen Sie Ihre Pod-Datei überprüfen:

target 'YourProjTests' do
    inherit! :search_paths
end

target 'YourProjUITests' do
    inherit! :search_paths
end

2) Öffnen Sie die Konfiguration von baseproj und legen Sie für die Testziele die richtige Pods-Proj.debug fest, siehe beigefügtes Bild:  enter image description here

3

Hatte ein fast identisches Problem und fand eine Lösung, die für mich funktionierte.

Mein Problem war, dass der Überbrückungs-Header NICHT ALLEN meinen Zielen entsprach.

 Project Bridging Header


Es war in meinem Projekt aber nicht mein UnitTest-Ziel. Also habe ich es von UITest und UnitTest hinzugefügt und es begann ohne Probleme zu arbeiten.

 Testing Target


Wenn Sie diese Zeilen in Ihrem Bridging-Header haben:

#ifndef Bridging_Header_h
#define Bridging_Header_h

#endif /* Bridging_Header_h */

Löschen Sie sie einfach, um die Probleme von Foundation und UIKit zu lösen.

Ein Fall ist der, wenn import <Chartboost+Extention/Chartboost+Extention.h>,

Der richtige Weg ist import <Chartboost**_**Extention/Chartboost+Extention.h>

Nur weil der Pod-Build den Frameworknamen von Chartboost+Extention in Chartboost_Extention ändert

0
JerryZhou