In einem benutzerdefinierten Framework, das sowohl Objective-C- als auch Swift- Code enthält, gibt der Swift-Compiler den folgenden Fehler aus:
[build_path]/unextended-module.modulemap:2:19: error: umbrella header 'bugtest.h' not found
umbrella header "bugtest.h"
^
<unknown>:0: error: could not build Objective-C module 'bugtest'
ios
swift
ios-frameworks
Tim Bodeit
quelle
quelle
In Xcode 7 Beta mit Swift 2 passiert es auch, wenn Ihr Framework-Header nicht als "Öffentlich" deklariert ist.
Zum Beispiel hatte ich ein Cocoa Touch Framework mit einer "Projekt" -Sichtbarkeit für die Header-Datei und dem Fehler "Umbrella Header ... nicht gefunden" für alle Swift-Dateien in meinem Projekt, sobald ich den Header "Public" hatte Fehler ging weg
quelle
Dies kann auf vier verschiedene Arten geschehen, wobei Fehler in früheren Versionen von Xcode ignoriert werden
DEFINES_MODULE
ist nicht auf eingestelltYES
CLANG_ENABLE_MODULES
ist nicht auf eingestelltYES
quelle
Dies geschieht, wenn die
Always Search User Paths
Einstellung für das Framework-Ziel aktiviert ist.Wenn Sie es auf
No
einstellen, wird dieser Fehler behoben.IMHO ist dies ein Fehler im Swift Compiler und ich habe ein Radar bei Apple eingereicht.
Siehe rdar: // 21038443
quelle
Für mich war die Zugriffsebene öffentlich, aber sie schlägt auch auf dem nicht gefundenen Regenschirm fehl. Ich habe den Abschnitt "Header" der "Build-Phasen" nach oben verschoben und es begann zu funktionieren. Skript zum Podfile:
Habe keine Ahnung warum es passiert. Versucht an Dummy-Projekten - passiert nicht. Nur bei großen mit mehreren Abhängigkeiten. Etwas mit Kompilieren, BEVOR Sie Regenschirm-Header kopieren.
quelle
Podfile
Datei: Syntaxfehler, unerwartetes Ende der Eingabe, erwartete keyword_end.Auf jeden Fall müssen Sie Ihr Framework öffentlich machen:
quelle
Wenn ich "Header-Karten verwenden" auf "NEIN" setze, wurde das Problem behoben
quelle
Eine weitere Lösung: Nach dem Umbenennen eines Ordners wird der alte Speicherort möglicherweise weiterhin in der Projektdatei für die .h-Datei aufgeführt, selbst wenn Sie den Speicherort über die Seitenleiste von Xcode aktualisiert haben. Dieser alte Speicherort verursacht den Umbrella-Header-Fehler.
Einfache Lösung: Entfernen Sie den Verweis auf die .h-Datei und fügen Sie ihn erneut hinzu. (und dann denken Sie daran, es wieder öffentlich zu machen!)
quelle
Ich stellte fest, dass ich mit dem aktivierten Schema New Swift Build System und Parallelize Build Fehler wie in dieser Frage erhalten würde. Die Lösung bestand darin, eine Verknüpfung zu Frameworks herzustellen, die in die schnellen Quelldateien importiert wurden. (Ich denke, zuvor wurde die App erstellt, weil es einfach passiert ist, dass die Frameworks mit etwas verknüpft waren, das zuvor in der seriellen Build-Warteschlange erstellt wurde.)
Ich habe ein Skript geschrieben, um alle Importe in allen Zielen in einem Arbeitsbereich zu durchlaufen und sicherzustellen, dass ihre Frameworks in diesem Ziel verknüpft sind.
https://github.com/Jon889/SwiftImportChecker
quelle
Hier gibt es bereits einige ausgezeichnete Antworten. @ Shadow_x99's war sehr hilfreich. Wenn ich jedoch meine eigenen Erfahrungen ergänzen dürfe.
Ein Umbrella-Header wird im Erstellungsprozess automatisch identifiziert. Es ist nicht in den Build-Einstellungen des Ziels angegeben oder von den Projekteinstellungen geerbt.
Um diesen Fehler zu vermeiden, lautet dieser ab XCode 7 wie folgt:
warning: no umbrella header found for target 'MyTarget', module map will not be generated
Es müssen zwei wichtige Schritte unternommen werden.
Erstens muss der Dachkopf den gleichen Namen wie das Ziel haben . Wenn Ihr Ziel also ein Framework mit dem Namen ist
MyTarget
, muss ein Header mit dem Namen vorhanden seinMyTarget.h
.Zweitens muss in den Erstellungsphasen für
MyTarget
- wie in dieser Antwort erwähnt - diese Header-Datei wie oben beschrieben im öffentlichen Bereich aufgeführt werden .quelle
Ich hatte das gleiche Problem und keine der vorgeschlagenen Antworten hat in meinem Fall geholfen, also lasse ich dies hier, falls jemand das gleiche Problem hat.
Ich hatte in "Build-Phasen" ein "Skript ausführen" hinzugefügt, es jedoch entfernt, und dann bekam ich den Fehler.
Meine Lösung musste schließlich das Projekt bereinigen, mein Framework neu erstellen und dann mein App-Projekt korrekt erstellen.
quelle
Nach meiner Erfahrung müssen Sie auf den Zielen das Framework auswählen, das Ihnen den Fehler gibt, nicht das Projektziel.
Kompilieren Sie dann und nach dem Kompilieren ist es auf dem Projektziel verfügbar.
quelle
Wenn Sie Xcode 7.1 und CocoaPods 0.39 verwenden, scheint es eine schnelle Änderung des Compilers zu geben, die sich auf einige CocoaPods auswirkt (flink, schnell usw.). Probieren Sie einige der in diesem Thread angegebenen Lösungen aus: https://github.com/ CocoaPods / CocoaPods / Issues / 4420 Wenn jedoch keiner von beiden funktioniert, versuchen Sie, Xcode 7.0.1 oder 7.2 Beta zu verwenden. Sie können beide hier herunterladen : https://developer.apple.com/downloads/ .
Bearbeiten: In meinem Fall musste ich CocoaPods auf 0.38.2 herunterstufen, um das Problem zu beheben.
Spätere Bearbeitung: Es scheint nicht mit Xcode 7.1 verwandt zu sein. Nur ein Downgrade von CocoaPods auf 0.38.2 sollte helfen:
quelle
Ihre Header-Datei muss sich im Abschnitt [Build Phases / Headers / Public] befinden.
Wenn sich Ihre Header-Datei bereits im Abschnitt [Build Phases / Headers / Public] befindet, wurde mein Problem häufig durch Ausführen der folgenden Informationen gelöst:
quelle
Ich habe dieses Problem gelöst, indem ich meine module.modulemap in moduleXYZ.modulemap umbenannt und den Namen der modulemap-Datei in den Projekteinstellungen geändert habe
quelle
In meinem Fall habe ich gerade das spezifische Framework mit seinem Schema erstellt. Erstellen Sie dann das gesamte Projekt neu, und das Problem wurde behoben
quelle
Entfernen Sie diese Dateien aus dem Projektverzeichnis.
.xcworkspace
pods/
undpodfile.lock
Aktualisieren Sie den Pod und erstellen Sie das Projekt.
quelle
Ich habe es behoben, indem ich den Kompilierungsmodus der problematischen Framework-Build-Einstellungen auf Inkremental gesetzt habe.
quelle
In meinem Fall wurde das Problem durch das Skript zum Entfernen von Headern in Build-Phasen verursacht
Das Löschen dieses Skripts hat das Problem behoben.
quelle
Keine der 9 Antworten hat mir geholfen, deshalb habe ich versucht, ein neues Projekt zu erstellen, das ich an Apple senden konnte, um einen Fehler zu melden. Ich war überrascht, dass ich das Problem nicht reproduzieren konnte. Ich habe die Build-Einstellungen überprüft und sie waren gleichwertig. Anscheinend ist dies eine Art Fehler.
Wenn nichts anderes hilft , versuchen Sie, ein neues Projekt zu erstellen und mindestens einige Objective C & Swift-Klassen aus Ihrem aktuellen Projekt zu importieren, vergleichen Sie Ihre Framework-bezogenen Build-Einstellungen mit den Standardwerten aus dem neuen Projekt und verschieben Sie schließlich alle Dateien in das neues Projekt.
quelle
Ich habe einen ganzen Tag daran gearbeitet, aber es lohnt sich. Ich habe alle Möglichkeiten hier ausprobiert , aber ich habe es nicht gelöst. Ich habe ein neues Projekt, ein Experiment, und ich fand heraus User Header - Suchpfad wurde gefasster $ {SRCROOT} rekursiv , und ich änderte es zu $ {SRCROOT} nicht-rekursive , den Brückenkopfpfad geändert (zB
#import "SVProgressHUD.h"
->#import "Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"
), das Fehler ging weg.quelle