XCode findet die Swift-Bridging-Header-Datei in einigen Dateien nicht

8

Ich habe ein Problem in meiner iOs-Anwendung mit XCode. Es wurde in Objective-C codiert, und jetzt arbeite ich an der Migration von Dateien in Swift, nacheinander. Der Code wird von Teammitgliedern mit einem Versionssystem (git) geteilt.

Ich habe mit den Kernklassen angefangen und gehe so vor:

  • Ich schreibe die neue Klasse in eine Swift-Datei, z. MyClass.swift (mit @objc Präfix-Schlüsselwort)
  • Ich ersetze #import "MyClass.h" durch @class MyClass; in den Header-Dateien
  • Ich füge #import "MyProject-Swift.h" in Implementierungsdateien (.m) hinzu, die es benötigen
  • Ich lösche die Dateien MyClass.h und MyClass.m
  • Ich reinige und baue das Projekt

Dieser Prozess hat mehrere Male funktioniert, aber aus irgendeinem Grund funktioniert #import "MyProject-Swift.h" nicht und ich erhalte den Fehler: 'MyProject-Swift.h' Datei nicht gefunden .

Je nach den verschiedenen Dateien, die das Problem verursachen, öffnet manchmal Strg + Klick die Datei "MyProject-Swift.h", manchmal nicht (unabhängig von dem "nicht gefundenen Fehler").

Aber die Datei existiert und der übersetzte Swift-Code ist darin enthalten.

Eine andere Sache, die wirklich seltsam ist, ich habe versucht, neue .h und .m Dateien von denen mit #import "MyProject-Swift.h" stuff neu zu erstellen und das Problem, und danach funktioniert es (manchmal nicht, und ich bekomme andere Fehler)!

Da es in einigen Fällen funktioniert, verstehe ich wirklich nicht, warum es Probleme in anderen Fällen verursacht. Natürlich habe ich unter Dutzenden von Themen gesucht, aber niemanden mit dem gleichen Problem gefunden.

Könnte es ein Problem mit der XCode-Einstellung oder verschiedene XCode-Versionen zwischen Teamentwicklern sein?

Irgendeine Idee?

Danke

Bearbeitet:

Ich vervollständige die Problembeschreibung mit einem anderen Gesichtspunkt.

Ich habe das Projekt in einem funktionierenden Zustand: Verwendet einige meiner neuen Swift-Dateien, es baut und läuft gut (einige Objective-C-Dateien verwenden Swift-Dateien).

Ich kenne eine bestimmte .m-Datei mit folgendem Problem:

  • Ich füge #import "MyProject-Swift.h" am Anfang hinzu, sonst nichts
  • XCode sagt, 'MyProject-Swift.h' Datei nicht gefunden , Strg + Klick funktioniert nicht, und das Projekt wird nicht erstellt
  • Aber wenn ich auf die Schaltfläche mit vier kleinen Quadraten (oben links im Editor) klicke, habe ich im angezeigten Menü "Includes", darunter steht "MyProject-Swift.h" und klickt auf " MyProject-Swift.h "öffnet die Datei!

Durch den Austausch von #import "MyProject-Swift.h" by #import <MyProject-Swift.h> wird nichts geändert.

Ich habe auch manchmal diesen Fall: Strg + Klick öffnet "MyProject-Swift.h", aber XCode sagt 'MyProject-Swift.h' Datei nicht gefunden (es wird nicht so gut bauen ).

    
John S. 20.07.2015, 09:56
quelle

4 Antworten

5

Endlich hatte ich die Lösung selbst gefunden: Die Datei project.pbxproj war nach ein paar Gitverschaltungen irgendwie kaputt. Einige Dateien des Projekts wurden in dieser Datei zweimal referenziert, also löschte ich diejenigen, die ich für schlecht hielt (vielleicht ist die Zufallsauswahl näher an der Wahrheit).

Jetzt funktioniert es wie ein Zauber.

Tatsächlich hatte dies keine Auswirkungen auf das Projekt, bis ich versuchte, Dateien nach Swift zu migrieren!

Es wäre eine großartige Idee, ein Werkzeug oder eine Funktion in XCode zu haben, um diese project.pbxproj Datei auf die aktuellen Dinge zurückzusetzen, die wir haben.

    
John S. 21.07.2015, 13:34
quelle
4

basiert auf dem Szenario Ссылка Ich habe dieses Problem auf diese einfache Weise gelöst

Finden Sie eine objektive C-Datei, in der der Compiler behauptet, dass er Ihre YourProject-Swift-Datei dort nicht finden kann. Entfernen Sie die Datei aus dem Projekt und fügen Sie hinzufügen hinzu.

Danach hat mein Projekt erfolgreich kompiliert und ausgeführt

    
Nikolay Shubenkov 10.09.2015 13:28
quelle
2
  1. Fügen Sie Ihrem Projekt eine Header-Datei mit dem Namen [MyProjectName] -Bridging-Header.h hinzu. Dies ist die einzelne Header-Datei, in die Sie einen beliebigen Objective-C-Code importieren Swift-Code, auf den zugegriffen werden kann.

  2. Suchen Sie in Ihren Projektbuildeinstellungen Swift Compiler - Codegenerierung und fügen Sie neben Objective-C Bridging Header den Pfad zu Ihrer Bridging-Headerdatei aus dem Stammordner des Projekts hinzu. So könnte es durch MyProject / MyProject-Bridging-Header.h oder einfach MyProject-Bridging-Header.h sein, wenn sich die Datei im Projektstammordner befindet.

Sie benötigen nur einen Bridging-Header. Fügen Sie dieser Datei Ihre # import-Anweisungen hinzu, und Ihre Klassen sind jetzt in Ihrem Swift-Code ohne zusätzliche Importanweisungen verfügbar.

    
Bhumesh Purohit 20.07.2015 10:22
quelle
0

Wenn Sie zwei Ziele haben und Sie ständig kompilierte / semantische Fehler für neu bearbeitete Swift-Dateien erhalten, die im ObjC-Code verwendet werden, könnte dies das Problem sein -

Sie haben zwei <ProjectName>-swift.h Dateien. Wie in meinem Fall: MyProject-swift.h und MyProjectSandbox-swift.h Dies sind die Dateien mit allen schnellen Klassen und Methoden. (Diese werden geöffnet, wenn Sie bei gedrückter Befehlstaste auf eine schnelle Klasse aus Obj-C-Code klicken) .

Also arbeite ich an dem Sandbox Ziel. Ich habe festgestellt, dass, wenn ich Änderungen an swift-Dateien und clean-build vorgenommen habe, nur MyProjectSandbox-swift.h aktualisiert wurde. Aber das Hauptproblem war, dass sich der ObjC-Code auf MyProject-swift.h datei bezog, der nicht aktualisiert wird, da ich nur das (Sandbox) Ziel neu erstellte, an dem ich gerade arbeitete.

TL; DR;

Die Lösung besteht also darin, sicherzustellen, dass Sie BEIDE Ihre Ziele bereinigen und neu erstellen, sodass beide ( MyProject-swift.h und MyProjectSandbox-swift.h ) mit dem neuesten Swift-Code und den neuesten Klassen aktualisiert werden.

Dadurch werden beide Dateien aktualisiert, und Ihr ObjC-Code zeigt keine irrelevanten Kompilierungsfehler für schnelle Dateien an.

    
prad 27.03.2017 02:48
quelle

Tags und Links