Ich benutze Xcode 6,
1) Zuerst erstelle ich eine dynamische Bibliothek (CoreLibrary). Diese Bibliothek enthält die Datei RequestPoster.h.
2) Dann erstelle ich ein Cocoa Touch Framework und füge diese dynamische Bibliothek (CoreLibrary) hinzu.
3) Dann wird dieses Framework zu meinem Projekt hinzugefügt und es gibt einen Fehler in der Datei RequestPoster.h (CoreLibrary).
Fehler: Einschließen eines nicht modularen Headers in die Framework-Modulklasse:
ifaddrs.h, arpa / inet.h, sys / types.h>
Diese Datei wurde im Projekt nicht gefunden.
ifaddrs
annimmt, müssen sie ifaddrs.h importieren./usr/include/libproc.h
?Stellen Sie sicher, dass die Header-Dateien als Teil der öffentlichen Header des Frameworks öffentlich verfügbar sind.
Gehen Sie zu Framework -> Ziel -> Phasen erstellen und ziehen Sie, um die relevanten Header-Dateien von Projekt nach Öffentlich zu verschieben. Hoffentlich hilft das!
quelle
Sie können Zulassen, dass nicht modulare Includes in Framework-Modulen in den Build-Einstellungen für das betroffene Ziel für JA festgelegt sind. Dies ist die Build-Einstellung, die Sie bearbeiten müssen:
HINWEIS : Sie sollten diese Funktion verwenden, um den zugrunde liegenden Fehler aufzudecken, der häufig durch das Duplizieren von globalen Includes in spitzen Klammern in Dateien mit einer abhängigen Beziehung verursacht wird, z.
Wenn die Einstellung " Nicht modulare Einschlüsse in Frame-Modulen zulassen" auf " JA" führt und eine Reihe von Fehlern "X ist eine mehrdeutige Referenz" oder ähnliches auftritt, sollten Sie in der Lage sein, die fehlerhaften Duplikate aufzuspüren und zu beseitigen. Nachdem Sie Ihren Code bereinigt haben, setzen Sie "Nicht modulare Einschlüsse in Frame-Modulen zulassen" wieder auf " NEIN" .
quelle
Ich hatte das gleiche Problem und löste es, indem ich nur die Header-Datei öffentlich machte.
Wenn Sie in Ihrem Projekt an mehreren Modulen arbeiten. Dann muss Ihre Header-Datei öffentlich sein, damit sie in anderen Teilen von Projekten verwendet werden kann. Sie müssen diese Header-Datei und in der Ansicht "Projektdienstprogramme" auswählen. Ändern Sie die Datei von Projekt / Privat in Öffentlich. Siehe Bild unten:
quelle
"Einfügen eines nicht modularen Headers in das Framework-Modul"
Wenn Sie diesen Fehler erhalten, kann die Lösung unter bestimmten Umständen darin bestehen, die zu importierende Datei im Dateiinspektor "Zielmitgliedschaft" einfach als "öffentlich" zu markieren. Der Standardwert ist "Projekt". Wenn dies so eingestellt wird, kann dies zu diesem Fehler führen. Dies war bei mir der Fall, als ich beispielsweise versuchte, die Header von Google Analytic in ein Framework zu importieren.
quelle
Eine einfachere Möglichkeit, dies zu beheben, besteht darin, die
#import
Anweisung.m
stattdessen an den Anfang der Datei zu verschieben (anstatt sie in Ihrer.h
Header-Datei zu haben). Auf diese Weise wird nicht beanstandet, dass eine nicht modulare Header-Datei enthalten ist. Ich hatte dieses Problem, bei demAllow non-module includes
eingestellt wurde, dassYES
es NICHT für mich funktioniert. Durch das Verschieben in die Implementierungsdatei hörte es auf, sich zu beschweren. Dies ist in der Tat die bevorzugte Methode zum Importieren und Einfügen von Header-Dateien. Sobald Sie dies getan haben, setzen Sie dies zurück aufNO
funktionieren.Idealerweise sollten wir versuchen, uns darauf
Allow non-module includes
eingestellt zu habenNO
. Wenn Sie diesYES
in den meisten Fällen einstellen, bedeutet dies, dass Sie etwas falsch machen. Die Einstellung bedeutet "Importieren von zufälligen Header-Dateien auf die Festplatte zulassen, die sonst nicht Teil des Moduls sind". Dies gilt in der Praxis für einige wenige Anwendungsfälle. Daher sollte diese Einstellung immer seinNO
(dh der Standardwert).quelle
Für den Fall, dass Sie Ihr eigenes Framework entwickeln:
Warum passiert dies?
Wenn eine der öffentlichen Header-Dateien, die Sie in Ihrer module.modulemap erwähnt haben, Importanweisungen enthält, die in modulemap nicht erwähnt werden, wird der Fehler angezeigt. Da versucht wird, einen Header zu importieren, der nicht als modular deklariert ist (in module.modulemap), wird die Modularität des Frameworks unterbrochen.
Wie kann ich es reparieren?
Fügen Sie einfach den Header hinzu, der den Fehler in Ihrer module.modulemap verursacht hat, und erstellen Sie ihn erneut!
WARUM NICHT einfach nicht modular auf JA setzen lassen?
Da es hier keine wirkliche Lösung ist, sagen Sie Ihrem Projekt: "Dieses Framework sollte modular sein, ist es aber nicht. Verwenden Sie es irgendwie, es ist mir egal." Dies behebt das Modularitätsproblem Ihrer Bibliothek nicht.
Weitere Informationen finden Sie in diesem Blogbeitrag oder in den Clang-Dokumenten .
quelle
Wenn Sie dies für CocoaPods-Ziele benötigen, fügen Sie diese Zeilen hinzu in
Podfile
:quelle
Allow Non-modular Includes in Framework Modules
funktionieren nur im objc code. nicht schnell arbeiten.Nach einer gewissen Zeit der Recherche stellte ich fest, dass Swift den Warnparameter an clang übergeben kann, also so eingestellt
OTHER_SWIFT_FLAGS
,-Xcc -Wno-error=non-modular-include-in-framework-module
dass ein schneller Importfehler verhindert wird.Nur für jemanden, der das gleiche Problem hat
quelle
Ich hatte das gleiche Problem und nichts von oben half mir. Ich hoffe, meine Antwort ist für jemanden hilfreich. In meinem Fall lag das Problem in der Einstellung ALWAYS_SEARCH_USER_PATHS. Als es auf KEIN Projekt gesetzt wurde, wurde es gebaut und funktionierte in Ordnung. Aber soweit einer der Pods die Einstellung auf JA erforderte, erhielt ich einen Fehler
Nach ein paar Tassen Kaffee und den ganzen Tag Recherche fand ich heraus, dass nach bekannten Problemen von Xcode 7.1 Beta 2 Versionshinweise :
Ich habe zwar XCode 7.3 verwendet, aber anscheinend wurde dieser Fehler noch nicht behoben.
quelle
Das gleiche Problem macht verrückt. Schließlich finde ich, dass die Implementierung von 'import xxx.h' anstelle der Schnittstelle das Problem beheben kann. Und wenn Sie Cocoapods verwenden, um Ihr Projekt zu verwalten. Sie können hinzufügen
in Ihrer 'xxx.podspec'-Datei.
quelle
Wenn dieser Fehler beim Erstellen eines dynamischen Frameworks in einem Umbrella-Header angezeigt wird, importieren Sie Ihre Datei wie folgt:
#import "MyFile.h"
und nicht als
#import <MyFramework/MyFile.h>
.quelle
Ich bin auch auf dieses Problem gestoßen und dachte ursprünglich, es sei ein CocoaPods-Problem, aber es war ein Problem in den Einstellungen zum Erstellen von Apps, bei denen jemand (wahrscheinlich ich)
${PODS_ROOT}
in den Header-recursive
Suchpfaden festgelegt und es als Suche festgelegt hat. Auf diese Weise konnten Header gefunden werden, die beim Erstellen der App nicht verwendet werden sollten. Sobald ich dies eingestellt hatte, warnon-recursive
alles in Ordnung. Die Verwendung derrecursive
Suche ist ein schrecklicher Hack, um die richtigen Header zu finden. Lektion gelernt.quelle
Das war ein nerviges Problem für mich. In meinem speziellen Fall schienen keine Vorschläge zu helfen, da ich die "nicht modularen" Header in meine individuelle Datei-Header-Datei aufnehmen musste. Ich habe den Importaufruf in die Präfix-Header-Datei gesteckt.
quelle
Nachdem ich die obigen Lösungen überprüft hatte, verschob ich den Umbrella-Header an den unteren Rand der Header-Liste, und das funktionierte in Xcode 9.3.
quelle
Ich habe es gelöst, indem ich den
Modules
Ordner aus dem Framework entfernt habe.Navigieren Sie mit dem Finder zu Ihrem Framework-Speicherort, der im App-Projekt vorhanden ist
Gehen Sie in den
Test.framework
Ordner (im obigen FallCoreLibrary.framework
) und löschen Sie denModules
Ordner.Bereinigen und neu erstellen Die App wird das Problem lösen.
quelle
In meinem Fall habe ich vergessen, die Dateien .h und .m im Abschnitt "s.source_files" der .podspecs-Datei hinzuzufügen.
nach dem Hinzufügen funktioniert es gut.
quelle
versuche
@import FrameworkName
statt#import "FrameworkName.h"
quelle
Ich konnte Dutzende dieser Fehler mit Git Clean beheben. Hier ist der Befehl:
git clean -dffx && git reset --hard
quelle