Ich habe gerade ein Upgrade auf Xcode 6 Beta 4 durchgeführt und ein Framework erstellt, das ich für Live Views in Beta 2 erstellt habe. Aufgrund eines weiteren schnellen Fehlers musste ich einen Obj-C-Code verwenden. Beim Upgrade wird jedoch die folgende Fehlermeldung angezeigt:
Fehler: Die Verwendung von Bridging-Headern mit Framework-Zielen wird nicht unterstützt
Ich habe in den Versionshinweisen nichts gesehen oder einen anderen Migrationspfad gefunden. Hat jemand dies gesehen und eine Lösung gefunden?
Mir ist klar, dass Beta 3 keine Frameworks für Live-Ansichten mehr benötigt, aber in meinem Fall ist es sinnvoll, wenn ich es zum Laufen bringen kann. Ich kann es zwar als Fallback entfernen, würde aber lieber ein Framework verwenden, wenn sie in Beta 4 nicht vollständig kaputt sind.
quelle
Antworten:
Wie der Fehler besagt, sind Bridging-Header in Frameworks nicht zulässig. Der Abschnitt zum Importieren von Code aus demselben Framework-Ziel in der Mix & Match- Apple-Dokumentation weist darauf hin. Wie sie sagen, müssen Sie "In Ihre Umbrella-Header-Datei importieren Sie jeden Objective-C-Header, den Sie für Swift verfügbar machen möchten".
Ich habe jedoch festgestellt, dass Sie möglicherweise auch diese spezifischen Header veröffentlichen müssen. In dieser Antwort wird erläutert, warum und wie dies zu tun ist: Schneller Compilerfehler: "Nicht modularer Header im Framework-Modul" .
Also mach das:
Hinweis : Die "Umbrella-Header-Datei" ist eine Datei (mit dem Namen [ProductName] .h), die im Allgemeinen alle öffentlichen Header eines Frameworks darstellt. Es ist normalerweise nur eine Liste von # import-Anweisungen für andere im Framework enthaltene Header. Wenn Sie in Xcode UIKit.h öffnen, sehen Sie ein gutes Beispiel für eine Umbrella-Datei.
quelle
Es gibt zwei Möglichkeiten. Das Hinzufügen und Veröffentlichen der erforderlichen Header zur Umbrella-Header-Datei ist eine Möglichkeit. Dies ist jedoch ein Problem, wenn die Header für Swift verfügbar, aber nicht öffentlich sein sollen.
Die zweite Möglichkeit, die Swift interne Header zur Verfügung stellt, wird hier ausführlich beschrieben . Im Wesentlichen muss eine Modulzuordnung erstellt werden, die der folgenden ähnelt:
Dies kann dann mit der Einstellung in XCode aufgenommen werden:
quelle
header
Anweisung akzeptiert einen relativen Pfad. Was tun Sie, wenn Sie die Header eines anderen Frameworks hinzufügen möchten?Siehe Importieren von Objective-C in Swift .
So importieren Sie Objective-C-Code aus demselben Framework in Swift
Importieren Sie in Ihrer Umbrella-Headerdatei jeden Objective-C-Header, den Sie für Swift verfügbar machen möchten. Beispielsweise:
Machen Sie die enthaltenen Dateien im Abschnitt "Header" des Frameworks unter "Build Phases" öffentlich.
Reinigen und wieder aufbauen.
Swift sieht jeden Header, den Sie öffentlich verfügbar machen, in Ihrem Umbrella-Header. Der Inhalt der Objective-C-Dateien in diesem Framework ist in jeder Swift-Datei innerhalb dieses Framework-Ziels automatisch ohne Importanweisungen verfügbar. Verwenden Sie Ihren benutzerdefinierten Objective-C-Code mit derselben Swift-Syntax, die Sie für Systemklassen verwenden.
Wichtig: Die "Umbrella-Header-Datei" bedeutet die Datei {ModuleName} .h. Übrigens lautet der Zielname {ModuleName} .framework.
quelle
In meinem Fall
Objective-C Bridging Header
hat esBuild Settings
geholfen, nur die Einstellungen aus meinem Framework zu entfernen .quelle