Die Datei ModuleName-Swift.h wurde in xcode8 nicht gefunden
Ich versuche, die Arbeit auf eine gemischte Swift und ObjectiveC Projekt mit kein Glück.
Mein Projekt besteht aus 6 Ziele:
- App
- Core
- CoreTest
- Zusammenfassung
- WatchKit Extension
- WatchKit App
Ich habe in der Lage, fügen Sie eine Swift-Klasse, hat ein Ziel-Mitgliedschaft (App) und verwendet ObjectiveC-code, indem Sie von den App-Bridging-Header.h
Die "ObjectiveC in Swift-code" - Paradigma funktioniert wie ein Charme.
Statt, ich habe Mühe mit dem "Swift in ObjectiveC-code" - Paradigma.
In dem speziellen Fall brauche ich eine neue Swift-Klasse in ein ObjectiveC .m-Datei, ist Mitglied von vier Ziele.
Was ich getan habe, so weit ist diese:
- Hinzufügen eines neuen Swift-Datei in das Core-Projekt der Angabe der vier Mitgliedschaften (App, Core, Zusammenfassung, WatchKit Extern)
- XCode fragt, zu erstellen -Bridging-Header.h für drei Projekte Core, Zusammenfassung und WatchKit Extern (App-Bridging-Header.h ist bereits vorhanden, da es bereits verwendet wurde), und ich willige ein (weiß nicht, warum es erstellt die Dateien innerhalb der gleichen Gruppe Ordner, wo ich meine Swift Klasse, aber nevermind)
- Ich erstellen, die der Swift-Klasse hinzufügen, die @objc - Taste, bevor Klasse
- Gehe ich prüfen, ob Objective-C Erzeugt-Interface-Header-Namen für alle Module, und ja, es ist
- Gehe ich prüfen, ob Definiert Modul eingestellt ist Keine in allen Modulen und zu ja in der Haupt-Projekt, und ja, es ist
- Schreibe ich den Einfuhren für die -Swift.h Dateien für alle vier Ziele
- In meinem Objective-C-Klasse-ich versuche, mit meinem neuen Swift-Klasse, offenbar scheint es zu funktionieren (sogar autocompletion)
- Ich versuchen, das Projekt erstellen, aber es funktioniert nicht sagen, dass die -Swift.h Datei nicht gefunden
Habe ich folgte die Mix und Match-guide von Apple und SO viele threads, einschließlich diese eine , scheint offenbar zu Adresse das gleiche problem von mir aber es funktioniert nicht.
Haben auch gesehen diese und diese aber hat nicht funktioniert.
Haben auch versucht zu Löschen, Abgeleitete Daten, sowie die Reinigung des gesamten Projekts mehrmals mit kein Glück.
EDIT 1 : Weitere details
Dies ist die Erklärung von meinem Swift Klasse
import RealmSwift
@objc class MyClass: Object {}
Dies ist die snippet-Nutzung der Swift-Klasse in ObjectiveC
MyClass *app = [[MyClass alloc] init];
Wenn ich vermeiden Sie die Verwendung von #import ...-Swift.h der build fehlschlägt sagen, dass ich die Verwendung eines nicht Deklarierten idenfier "MyClass" und das ist sound.
Wenn ich #import ...-Swift.h-Dateien, die es sagt, dass Modul X nicht finden kann-Modul Y und so weiter.
EDIT 2 : Swift-Modul name
Durch die Betrachtung der SWIFT_OBJC_INTERFACE_HEADER_NAME Eigenschaft jedes Ziel hab ich gesehen, dass es gebaut ist die Verwendung dieser syntax $(SWIFT_MODULE_NAME)-Swift.h muss ich ändern, SWIFT_MODULE_NAME zu MODULNAME?
EDIT 3 : Importe
Dies ist die Menge der Importe für Swift-Header .m ObjectiveC-Datei.
Ich bin mit dem Modulnamen angegeben in relativen Build-Einstellungen Eigenschaften. Beachten Sie, dass jeder ' _ ' - Zeichen, da WatchKit Extension target ein Leerzeichen im Zielnamen.
#import "ProjectName_App-Swift.h"
#import "ProjectName_Core-Swift.h"
#import "ProjectName_Summary-Swift.h"
#import "ProjectName_WatchKit_Extension-Swift.h"
EDIT 4 : Cross-Sichtbarkeit -Swift.h-Dateien
Ich habe tryed die folgenden:
- Hinzugefügt Swift-Klasse nur in der Ziel-App
- XCode erstellt die Bridging-Header
- Eingefügt #import "ProjectName_App-Swift.h" in ObjectiveC-Datei verwendet, nur durch die App
- Gemacht Verwendung von Swift-Klasse in dieser Datei
- Es kompiliert! Und ich bin in der Lage, verwenden Sie die Swift-Klasse
Wenn der Swift-Klasse definiert ist, für mehrere Ziele und ObjectiveC-Datei verwendet, von denen mehrere Ziele funktioniert es nicht. Die build-Fehler sind wie diese: Target X -> "ProjectName_TargetY-Swift.h" Datei nicht gefunden.
Scheint wie ein Ziel nicht sehen können, andere Ziele -Swift.h-Dateien.
Was mache ich falsch?
Vielen Dank für Ihre Hilfe
InformationsquelleAutor der Frage LucioB | 2016-11-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Annahme, die ich bei Edit 4 stellte sich heraus, der richtige zu sein.
Wenn für ein Projekt mehrere Ziele "-Swift.h" - Dateien können nicht importiert werden .m ObjectiveC-Datei.
Also es gibt eine Lösung, die verabschiedet werden müssen, und es ist die änderung der SWIFT_OBJC_INTERFACE_HEADER_NAME build-Einstellung und machen es auf unterschiedliche Ziele.
Zu tun, so ändern Sie die Anweisung, die Sie erzeugt diese Eigenschaft von $(SWIFT_MODULE_NAME)-Swift.h zu $(PROJECT_NAME)-Swift.h wie erklärt hier
Danach Sauber Aufzubauen Ordner durch drücken von Alt und geht in die Produkt-Menü. Da die Namen der header-gemeinsam Ziele jetzt kann es importiert werden, sobald in den .m ObjectiveC-Datei und alle Ziele profitieren von Swift-Klassen.
Wenn nach Gebäude, es zeigt immer noch den Fehler, sicherstellen, dass der header kann erreicht werden, von XCode durch Cmd-Klick auf seinen Namen. Es soll eine Datei öffnen, die code enthält, ähnlich wie diese:
Wenn nötig, um sicherzustellen, dass diese Header generiert werden, öffnen Sie ein terminal und verwenden Sie diesen Befehl,
Sollten Sie sehen eine überschrift für jedes Ziel
Weiteres Problem, das mir passiert ist, nachdem diese änderungen ist, dass Sie begannen, die Fehler auf ObjectiveC-code, den ich nicht berühren. Das problem war aufgrund der position der import, der-wie berichtet -hier:
Ganz am Ende der code wird kompiliert und läuft auf dem Gerät und den simulator!
InformationsquelleAutor der Antwort LucioB
Ich hatte ähnliche Problem und fast am Ende einen ganzen Tag zu verbringen, herauszufinden, die Ausgabe während der folgenden Vorschläge aus anderen Entwickler auf StackOverflow und paar anderen Quellen.
War ich ein Upgrade von XCode 7.3.1 zu XCode 8.2.1 und Swift 2.2 Swift 3.0.1.
In meinem Fall habe ich herausgefunden, das
PROJECT_NAME-Swift.h
Datei nicht erstellt am:~/Library/Developer/Xcode/DerivedData/PRODUCT-NAME-hdkrxixrxbiorwesffpqvefxsrzl/Build/Intermediates/PRODUCT-NAME.build/Debug/PRODUCT-NAME.build/Objects-normal/x86_64/PRODUCT-NAME-Swift.h.
Ich denke, es irgendwie versucht, um auf diese header-Datei aus dem oben angegebenen Pfad und daher der Fehler. Ich manuell kopiert. Nicht "sauber" aufzubauen, nach diesem.
Dieser mein Problem gelöst und die swift-header-Datei getting started erstellt für die weitere Zusammenstellung und baut.
InformationsquelleAutor der Antwort retrocoder84
Ist dies keine Lösung für die Frage, aber da viele vielleicht am Ende auf dieser Seite auf der Suche nach dem problem, dass die
<ModuleName>-Swift.h
Datei nicht gefunden wird (genau wie ich) möchte ich hinzufügen, eine weitere mögliche Ursache:Wenn es ein compiler-Problem in einer swift-Datei der header nicht erzeugt von xCode und somit die Datei nicht vorhanden ist.
Zumindest in meinem Fall die
<ModuleName>-Swift.h not found
war Weg, sobald ich der compile-Fehler in der Swift-Datei.InformationsquelleAutor der Antwort Jens
Die Lösung für mich war der import der generierten swift header über
<>
syntax:InformationsquelleAutor der Antwort cornr
Für meinen Fall, es läuft gut in Xcode 8, aber die Dateien mit
fehlen Importe, wie beschrieben, durch LucioB
Mit Xcode 9 entfernt diese Fehler
InformationsquelleAutor der Antwort Ted
In meinem Fall, habe ich mir einen Arbeitsplatz mit einer iOS-app Teilprojekt, einen Rahmen Teilprojekt und CocoaPods-Pods Teilprojekt. Die "ModuleName-Swift.h-Datei nicht gefunden" - Fehler ist aufgetreten, in meinem Rahmen Teilprojekt, weil die Datei noch nicht erstellt wurde, indem Sie die Schoten Teilprojekt.
Ich bin mir nicht sicher, ob es ist ein Weg, zu sagen, Xcode, über die Abhängigkeiten zwischen den Teilprojekten, aber ich habe einfach neu bestellt Sie im linken Projekt-Navigator:
Arbeitete Super nach!
InformationsquelleAutor der Antwort ScottyB