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:
@objc
Präfix-Schlüsselwort) #import "MyClass.h"
durch @class MyClass;
in den Header-Dateien #import "MyProject-Swift.h"
in Implementierungsdateien (.m) hinzu, die es benötigen 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:
#import "MyProject-Swift.h"
am Anfang hinzu, sonst nichts 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 ).
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.
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
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.
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.
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.
Tags und Links objective-c ios git xcode swift