Ich rufe meine Swift-Klassen erfolgreich von Objective C (für das Ziel 'MyApp') über die import-Anweisung auf:
#import "MyApp-Swift.h"
Ich habe jetzt ein neues Ziel namens "MyAppLite" erstellt.
Beim Kompilieren des neuen Ziels werden Fehler angezeigt, da der Code "MyApp-Swift.h" benötigt, der Compiler jedoch "MyAppLite-Swift.h" erstellt.
Daher muss ich einen bedingten Swift / ObjC-Header #import
für das Ziel erstellen, gegen das ich kompiliere.
Wie kann das gemacht werden oder gibt es einen besseren Weg?
quelle
Objective-C Bridging Header
Product Module Name
Willen etwas später beeinflusst, wahrscheinlich beim Einreichen im App Store;) ... das Ändern derObjective-C Generated Interface Header Name
in der anderen Antwort beschriebenen hat keine Auswirkungen.SWIFT_MODULE_NAME
verfügbar war.Der beste Weg, um dieses Problem zu beheben, sind die Einstellungen Ihres freigegebenen Xcode-Projekts. Sie können nach folgender Einstellung suchen:
Name der von Objective-C generierten Schnittstelle Header *
Wenn Sie diesen Wert auf einen allgemeinen Headernamen festlegen, z. B. "MyProject-Swift.h", wird er auf jedes Ihrer Ziele angewendet, und Sie können die Importdeklaration sicher in jeder Ihrer Objective-C-Dateien verwenden. Auf diese Weise können Sie bei Bedarf weiterhin eindeutige Produktmodulnamen für jedes Ziel verwenden.
Ich habe dies in Xcode Version 6.4 (6E35b) getestet.
* Hinweis: Dies wird unter Ihren Swift-Compilereinstellungen angezeigt, die nur sichtbar sind, wenn Sie Swift-Quelldateien zu Ihrem Projekt hinzugefügt haben. Wenn einem Ziel keine Swift-Quelle zugeordnet ist, werden die Swift-Compileroptionen für die Build-Einstellungen dieses Ziels nicht angezeigt.
Viel Glück!
quelle
$(SWIFT_MODULE_NAME)-Swift.h
... also , während diese Antwort ist genial, ich würde gerne wissen , wie das justierenSWIFT_MODULE_NAME
für das Modul.MidiDesignerAllTargets-Swift.h
Danke für diese großartige Antwort, es ist eine großartige Entdeckung.Frühere Antworten haben einige Probleme, wenn Sie Ihre Ziele oder Ihr Projekt umbenennen oder
SWIFT_MODULE_NAME
bestimmungsgemäß verwenden.Die universellste Lösung besteht darin,
SWIFT_OBJC_INTERFACE_HEADER_NAME
unter "Projekt-C-generierter Schnittstellen-Headername" unter "Projektziele, nicht Ziele, Build-Einstellungen" Folgendes zu ändern :$(PROJECT_NAME)-Swift.h
- eine pro Projekt;$(SWIFT_MODULE_NAME)-Swift.h
- eine pro Modul (Standardwert).quelle
Nun, der einzige Weg, den ich reparieren kann, ist ...
#ifdef IS_LITE #import "MyApp_Lite-Swift.h" #else #import "MyApp-Swift.h" #endif
Beachten Sie, dass in meinem Produktmodulnamen "unzulässige" Zeichen durch Unterstriche ersetzt werden müssen.
Hoffentlich hilft das!
quelle
Ich habe die entsprechende Anweisung #import <project> -Swift.h in eine Präfix-Header-Datei (<project> -Prefix.pch) eingefügt, die für jeden Build (Ziel / Schema) definiert / hinzugefügt wurde.
quelle
Die einzige Arbeitsweise ist die folgende:
1- Vom ersten Ziel (mit einer funktionierenden Überbrückung) Build-Einstellung wählen Sie Ziel C Überbrückungs-Header
2- Kopieren Sie Ziel C Überbrückungs-Header
3- Öffnen Sie das andere Ziel Build-Einstellung
4- Fügen Sie es ein 5- Ändern Sie die Header-Datei zu Ihrer neuen Header-Datei (dh Ziel Bh)
(jetzt haben Sie diese Option für zwei Ziele)
quelle