Fehler "Kein solches Modul" mit Xcode erhalten, aber das Framework ist da

344

Ich codiere derzeit in Swift und habe einen Fehler:

Kein solches Modul Social

Aber ich verstehe nicht, weil sich das Modul in meinem Projekt befindet, das in "Verknüpfte Frameworks und Bibliotheken" und in "Eingebettete Binärdateien" deklariert ist.

Das Framework befindet sich in Objective-C, daher habe ich einen Bridge-Header dafür geschrieben.

Wie kann ich Xcode das Framework erkennen lassen?

Fehlermodul

Projekt

Verknüpft Frameworks, Bibliotheken

Header-Brücke

alexandresecanove
quelle
20
Nicht zu mr sein. offensichtlich, aber haben Sie versucht, eine vollständige Reinigung und Build?
Kalel Wade
28
Wenn der Framework-Header bereits in der Bridging-Header-Datei enthalten ist, müssen Sie ihn nicht in die Swift-Quelldatei importieren.
Martin R
2
Außerdem müssen Sie möglicherweise Anführungszeichen für den Import verwenden:#import "Social/Social.h"
Martin R
3
gleicher Fehler mit CocoaPods 'kein solcher Modulfehler' in xcode.
AsimRazaKhan
1
Ich habe das Bereitstellungsziel von 11 auf 10 geändert, es aber in Podfile vergessen platform :ios, '10.0'. Das war eine Lösung.
Artur Guseynov

Antworten:

320

Ich bin nicht sicher, warum dies passiert, aber eine Möglichkeit, Ihr Problem zu lösen, besteht darin, in Ihre Build-Einstellungen zu gehen und die Framework-Suchpfade für einen Ordner zu definieren, der die betreffenden Frameworks enthält. Wenn sich die Frameworks in Ihrem Projektverzeichnis befinden, setzen Sie einfach den Framework-Suchpfad auf $(SRCROOT)und setzen Sie ihn auf rekursiv.

terhechte
quelle
5
Vielen Dank. Ich musste dies in meinen Projekt-Build-Einstellungen tun und nicht in meinen Ziel-Build-Einstellungen
Pulsar
8
Der Trick für mich bestand darin, einen Pfad zum Framework zu finden, der in den Framework-Suchpfaden verwendet werden kann. $ {TARGET_BUILD_DIR} /YourFrameworkName.framework funktioniert gut für mich. Siehe auch stackoverflow.com/questions/32816507/…
Chris Prince
11
Musste dies in Project Build Settingsstatt tun Target Build Settings.
Maxim Mikheev
378
Ich habe das behoben, indem ich auf die Toilette gegangen bin. Als ich zurückkam, funktionierte es. Ich bin mir ziemlich sicher, dass ich alles in diesem Thread ausprobiert habe, weiß nicht genau, was den Job gemacht hat. Ich habe auch irgendwann gebetet.
nmdias
2
HINWEIS ZUM FIX: $ (SRCROOT) hat nur bei mir funktioniert, als ich es dem Framework-Suchpfad für das PODS-Projekt hinzugefügt habe.
Addzo
546

Falls es Freitagnachmittag oder jederzeit nach 1 Uhr morgens ist:

Das Öffnen xcodeprojstatt xcworkspaceverursacht einen Fehler wie diesen ...

Capikaw
quelle
2
Ich habe es als heiliger Gral versucht. Komisch. Wer weiß, aber das Beenden und Wiedereröffnen des Arbeitsbereichs hat auch funktioniert. Reinigen, dann bauen.
Mondousage
3
21 Uhr mit Fastlane, spezifizierte das Fitnessstudio (Projekt: ---) anstelle von Fitnessstudio (Arbeitsbereich: ----) Danke!
RickiG
1
Dies passierte mir, nachdem Xcode abgestürzt war und ich die Anwendung "Wieder öffnen" aus dem Fehlerbericht ausgewählt hatte. Ich werde es beim nächsten Mal besser wissen.
Stempel
Ich habe XCODE neu installiert und habe diesen Fehler erhalten, weil ich die App über die kürzlich geöffneten Projekte geöffnet habe. Schließen Sie das Projekt, Datei -> Öffnen -> wählen Sie die xcworkspace-Datei aus und alles hat funktioniert.
Dpedrinha
Gilt auch für das Erstellen auf der Befehlszeile (unser Problem): xcodebuild -workspace yourproject.workspace.
Ben Butzer
57

Stellen Sie sicher, dass die Benennung Ihrer Konfigurationen in den Unterprojekten mit der des "übergeordneten" Projekts übereinstimmt. Wenn die Konfigurationsnamen nicht genau übereinstimmen (Groß- und Kleinschreibung beachten), bricht Xcode den Archivierungsvorgang ab und zeigt den Fehler "Kein solches Modul ..." an.

Das heißt, wenn Sie ein "übergeordnetes" Projekt mit einer Konfiguration namens "AppStore" haben, müssen Sie sicherstellen, dass alle Teilprojekte auch diesen Konfigurationsnamen haben.

Siehe meine angehängten Screenshots.

Konfigurationssetup im "übergeordneten" Projekt

Konfigurationssetup im 1. Teilprojekt

Konfigurationssetup im 2. Teilprojekt

Groot
quelle
1
In meinem Fall hatte das Teilprojekt nur Debugund Distributionund sein übergeordnetes Projekt versuchte zu bauen Release. Die Lösung bestand darin, eine Kopie Distributionim untergeordneten Projekt zu erstellen und diese Kopie umzubenennen Release.
OlivaresF
2
Dies führte dazu, dass ich das Problem fand, aber ich löste es, indem ich die Framework-Suchpfade in meinen benutzerdefinierten Konfigurationen hinzufügte, da ich kein Teilprojekt eines Drittanbieters berühren wollte :)
DeFrenZ
Das hat das Problem behoben! Gut gemacht :)
Alicanbatur
Vielen Dank! Ich hatte 3 Konfigurationen in meinem Hauptprojekt. Also habe ich das gleiche für Framework getan und es hat geholfen.
daxh
Gibt es Hinweise, wie Xcode eine bestimmte Konfiguration eines verschachtelten Teilprojekts erstellen kann? Ich möchte keine Teilprojektkonfigurationen umbenennen, da dies zu eng mit dem Hinzufügen neuer Konfigurationen zum Hauptprojekt verbunden ist
Dren
44

Ich bin mir nicht ganz sicher, warum die Antwort von Martin R in den Kommentaren zur Frage so ignoriert wird:

Stellen Sie sicher, dass Sie versucht haben , den Import des Frameworks einfach zu überspringen, da es bereits mit dem Bridging-Header hinzugefügt wurde .

Hoffe das hilft

Mike K.
quelle
37

Ich hatte das gleiche Problem mit Cocoapods und Swift . Die folgenden Zeilen im Podfile sind mir nicht aufgefallen:

# Uncomment this line if you're using Swift
# use_frameworks!

Also musste ich es nur ändern in:

# Uncomment this line if you're using Swift
use_frameworks!

... aaund es hat funktioniert :)

nburk
quelle
Ja, für mich war use_frameworks nicht einmal in meinem Podfile, also habe ich es hinzugefügt
PhoenixB
22

Bitte vergleichen Sie diesen Screenshot mit Ihrer Build-Einstellung. Es kann diese Arbeit. Gehen Sie zum Framework-Suchpfad:

Geben Sie hier die Bildbeschreibung ein

Krutarth Patel
quelle
Auch von Chris Prince erwähnt .
Franklin Yu
18

Ich hatte auch dieses Problem. Die Lösung für mich war, dass die Archivierungsschemata zwischen den beiden Projekten nicht übereinstimmten. Ich habe einen xcworkspace mit einem Framework-Projekt und einem App-Projekt. Das Problem war, dass ich im Archivierungsschema für meine App eine andere Build-Konfiguration verwendete als das Framework für das Archivierungsschema. Ich habe beide Build-Konfigurationen auf Release gesetzt, wodurch das Problem behoben wurde.

mikepj
quelle
Das hat bei mir funktioniert. Ich habe mein Hauptprojekt Build Config wieder auf Release (von Distribution) gesetzt und jetzt stimmt es mit dem Unterprojekt überein. Alles funktioniert. Vielen Dank!
Charlie Seligman
1
Unser Framework hatte nicht die AdHoc-Konfiguration, die wir für das Projekt verwendet haben - was bedeutete, dass es nicht zusammen mit dem Projekt erstellt wurde.
Johan
15

Die folgenden Schritte haben bei mir funktioniert.

  1. Beenden Sie xcode
  2. Führen Sie "pod update"in Terminal
  3. Öffnen .xcworkspaceund erneut erstellen.
John Raja
quelle
1
Diese Schritte haben bei mir funktioniert ... Danke ... Ich habe "Pod install" ausgeführt, aber nicht "Modul XXX nicht gefunden ..." erhalten, aber beim Beenden von XCode und anschließendem erneuten Öffnen von Workspace hat mir geholfen ...
Aks
Mein Problem ist, dass ich nach dem Hinzufügen einer neuen Build-Konfiguration und eines neuen Build-Schemas "Modul nicht gefunden ..." erhalten habe. Das Beenden von Xcode funktioniert nicht, nachdem pod installes funktioniert hat.
William Hu
Das hat bei mir funktioniert. Gibt es eine Erklärung, warum dies das Problem behebt?
Nico Cernek
Es hat bei mir funktioniert. Nach dem erneuten Öffnen von projectname.xcworkspace müssen Sie bereinigen und erneut erstellen, damit es funktioniert.
Prashant
14

In meinem Fall stellte ich nach vielen Versuchen, herauszufinden, was ich beim Importieren eines Frameworks falsch gemacht hatte, schließlich fest, dass das Framework selbst das Problem war. Wenn Sie Ihr Framework nicht von einer vertrauenswürdigen Quelle beziehen, sollten Sie das Framework überprüfen und sicherstellen, dass es einen Modulordner mit einer darin enthaltenen Datei module.modulemap enthält. Wenn module.modulemap nicht vorhanden ist, wird der Fehler "Kein solches Modul 'MyFramework'" angezeigt.

Beispiel für die Verzeichnisstruktur von SwiftyJSON.framework

Wenn im Ordner "Module" der Ordner "MyFramework.swiftmodule" fehlt, wird das Framework gefunden, aber Xcode kennt den Inhalt nicht, sodass Sie unterschiedliche Fehler erhalten.

mcsheffrey
quelle
2
Aus irgendeinem Grund wird dies in xcode 9.1 nicht angezeigt, selbst wenn es vorhanden ist. Klicken Sie mit der rechten Maustaste auf Ihr Framework> Im Finder anzeigen> und stellen Sie sicher, dass Ihre Modulkarte vorhanden ist. Wenn Sie ein manuelles Framework in einem Pods-Projekt verwenden, erstellen Sie Ihre Pods neu, wenn Sie gerade ein neues manuelles Framework hinzugefügt oder ein vorhandenes aktualisiert haben.
Christopher Larsen
1
Vielen Dank! Ich habe die Datei selbst erstellt und es hat funktioniert: Framework-Modul NAME {Umbrella-Header "NAME.h" export * module * {export *}}
Sjoerd Perfors
12

Angenommen, das Framework ist wirklich vorhanden und im Pfad usw. Löschen Sie das Verzeichnis ~ / Library / Developer / Xcode / DerivedData / ModuleCache (und bereinigen Sie das Projekt und löschen Sie die projektspezifisch abgeleiteten Daten für ein gutes Maß).

Wenn Sie die Standardbereinigung durchführen, wird das ModuleCache-Verzeichnis nicht neu erstellt.

Brad Brighton
quelle
1
Ich habe es einfach so gemacht, wie du es mir gesagt hast, und es funktioniert nicht: /
alexandresecanove
1
Dann haben Sie möglicherweise ein anderes Problem, das genauso aussah wie das, auf das ich gestoßen bin. : - /
Brad Brighton
Ich hatte das gleiche Problem mit einem Cocoapod und das Löschen der Dateien in ModuleCache hat den Trick für mich getan.
HolySamosa
10

Was für mich funktioniert hat, ist diese Lösung für eine andere Frage. Schließen von Xcode und erneutes Öffnen des Projekts als Arbeitsbereich.
Gehen Sie zu Ihrem Projektordner und öffnen Sie die .xcodeworkspace Datei.
Sobald Sie den Arbeitsbereich (anstelle des Projekts) geöffnet haben, sollten Pods im Projektnavigator als Projekt der obersten Ebene angezeigt werden.

Cenkarioz
quelle
9

Stellen Sie sicher, dass Find implicit Dependenciesin Build-Optionen in Schema aktiviert ist!

Nik Kov
quelle
Das hat bei mir funktioniert ..
Abhinav Dobhal
7

Ich habe vor ein paar Tagen auch den gleichen Fehler festgestellt. So habe ich das Problem gelöst:

Der Fehler lautet "Modul nicht gefunden"

  • Erstellen Sie eine Poddatei in Ihrem Stammprojektverzeichnis
  • Installieren Sie Cocoapods (ein Abhängigkeitsmanager für Swift- und iOS-Projekte)
  • Führen Sie die Pod-Installation aus
  • Gehen Sie zu Project Build Settings:

    • Suchen Sie den Objective-c-Bridging-Header unter Swift-Compiler - Codegenerierung (Wenn Sie den Swift-Compiler hier nicht finden, fügen Sie dem Projekt wahrscheinlich eine neue Swift-Datei hinzu.)
    • Ziehen Sie die Bibliotheksheaderdatei per Drag & Drop von der linken Seite in den Bridging-Header (siehe Bild im Anhang).Geben Sie hier die Bildbeschreibung ein
  • Erstellen Sie eine neue Bridging-Header-Datei: z. B. TestProject-Bridging-Header.h und fügen Sie sie unter Swift Compiler → Objective-C Generated Interface Header Name ein (siehe Abbildung oben).

  • Schreiben Sie in die Datei TestProject-Bridging-Header.h #import "Mixpanel / Mixpanel.h".
  • In Ihrer Swift-Datei sollte der Code lauten: Mixpanel importieren (dh Name der Bibliothek)

Das ist alles.

vikram jeet singh
quelle
Diese Antwort hat geholfen. Beim Versuch, es für MBProgress einzurichten, folgte ich den Anweisungen unter ios-support.blogspot.com/2017/04/… , die sehr ähnlich waren.
Vette
6

Ok, das gleiche Problem wurde für mich gelöst, indem der abgeleitete Datenspeicherort relativ zum Arbeitsbereichsverzeichnis festgelegt wurde, anstatt ihn als Standard beizubehalten. Gehen Sie zu den Einstellungen in xcode. Gehen Sie in den Einstellungen zur Registerkarte "Standorte" und setzen Sie "Abgeleitete Daten" auf "Relativ". Ich hoffe es hilft.

harditpthk
quelle
Es hat nur einmal funktioniert, dann, wenn ich laufe, geht es um das gleiche Problem, das Modul nicht zu finden.
Nycdanie
5

Ich bekam den gleichen Fehler für

import Firebase

Dann bemerkte ich jedoch, dass ich dem Hauptzielbereich keinen Pod hinzufügte, sondern nur Test- und TestUI-Ziele in Podfile hinzufügte.

Mit dem Befehl

pod init

Für ein xcode swift-Projekt wird das folgende Podfile generiert

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'MyApp' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for MyApp

  target 'MyAppTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'MyAppUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

Stellen Sie also sicher, dass Sie Pods zu jedem geeigneten Platzhalter hinzufügen.

Zeeawan
quelle
5

Wenn Sie für eine Plattform wie tvOS bauen, stellen Sie sicher, dass Sie einen Apple TV-Simulator (dh einen passenden Simulator) ausgewählt haben.

Das Erstellen einer tvOS-App mit einem ausgewählten iOS-Simulator gab mir genau diesen Fehler. Verbrachte den größten Teil einer Stunde damit, nach allen möglichen Build-Problemen zu suchen ... doh.

Jordan Smith
quelle
1
Gleiches gilt, wenn Sie beim Erstellen eines iOS-Projekts "Mein Mac" wählen. Ich weiß nicht, warum Xcode dies überhaupt erlaubt ... 😒
Klaas
Vielen Dank! So offensichtlich jetzt, aber der Fehler ließ mich nach komplizierteren Lösungen suchen!
Dan Messing
5

In meinem Fall wurde die App IPHONEOS_DEPLOYMENT_TARGET auf 9.3 gesetzt, während sie in meinem neu erstellten Framework auf 10.2 gesetzt wurde

Der Resolver für implizite Abhängigkeiten hat mein neues Framework ignoriert, da die Anforderungen der Zielplattform höher sind als die Anforderungen der App.

Nach dem Anpassen des iOS-Bereitstellungsziels für das Framework an mein Anwendungsbereitstellungsziel wurde das Framework erfolgreich kompiliert und verknüpft.

berbie
quelle
Vielen Dank. Nachdem ich mehrere Stunden verschwendet hatte, stellte ich fest, dass das Bereitstellungsziel das Problem war.
Niks
4

Ich habe den gleichen Fehler erhalten, als ich einige Frameworks mit hinzugefügt habe Cocoapods. Wenn wir in unserem Projekt Pods verwenden, sollten wir xcodeworkspacestattdessen Pods verwenden xcodeproject. Um das Projekt über xcodebuild auszuführen, habe ich -workspace <workspacename>Parameter im xcodebuildBefehl hinzugefügt und es hat perfekt funktioniert.

Pawan Singh
quelle
Wenn Sie eine neue Frage haben, fragen Sie es bitte durch Klicken Frage stellen Taste. Wenn Sie einen ausreichenden Ruf haben, können Sie die Frage positiv bewerten . Alternativ können Sie es als Favorit "markieren" und Sie werden über neue Antworten informiert.
Alessandro Cuttin
@pawan singh du hast mehrere Stunden für mich gespart, danke!
Dmitry Senkovich
3

Ich fand, dass das Import Pathsin der Build Settingsfür ein benutzerdefiniertes (MySQL) Modul falsch war. Nachdem ich das in die richtige Richtung gezeigt hatte, war die Nachricht verschwunden.

qwerty_so
quelle
@rplankenhorn Nun, genau dort, wo Sie sie auf Ihre Maschine gestellt haben. Führen Sie eine aus, findwenn Sie es nicht wissen.
QWERTY_SO
3

Ich habe das mit behoben

Ziele -> Allgemein -> Verknüpfte Frameworks und Bibliotheken

Fügen Sie das Framework hinzu, das sich oben im WorkspaceOrdner befinden soll. Schmerzen im Arsch.

Magoo
quelle
3

Ich habe gerade meinen Cocoapod gelöscht. Dann habe ich eine Pod-Installation durchgeführt, um sie zu entfernen. Dann habe ich es einfach wieder in mein Podfile eingefügt und neu installiert. Das hat funktioniert. Nicht sicher warum.

Daniel Jones
quelle
3

Ich hatte bereits Pods installiert. Das Erstellen funktionierte problemlos, als ich eine Anwendung auf meinem Gerät erstellte, aber das Archiv funktionierte nicht. Ich renne einfach:

pod install

Es wurden keine neuen Pods installiert, nur die .xcodeproj-Datei wurde neu generiert und das Archiv begann zu funktionieren

Vojta
quelle
3

In Xcode 10.1 bestand die Lösung für mich darin, das Build-System in den Arbeitsbereichseinstellungen im Menü Datei zu ändern . Es ist standardmäßig auf New Build System eingestellt , hat dies in Legacy Build System geändert und das hat den Trick gemacht.

Geben Sie hier die Bildbeschreibung ein

MFA
quelle
Danke Kumpel, du hast meinen Tag gerettet! +1
DungeonDev
3

Es gibt mehrere mögliche Fehlkonfigurationen, für die das Problem auftreten kann:

  1. Bitte bestätigen Sie, dass Sie die Datei geöffnet haben, .xcworkspacejedoch nicht .xcodeproj. Stellen Sie außerdem sicher, dass Sie zuerst erstellt haben, Socialbevor Sie erstellen TriviaApp.
  2. Stellen Sie sicher, dass das iOS-Bereitstellungsziel für alle Module mit Haupt-App gleich festgelegt ist. Wenn beispielsweise das TriviaAppBereitstellungsziel festgelegt ist, 9.0muss auch das SocialBereitstellungsziel festgelegt werden 9.0.
  3. Stellen Sie sicher, dass Ihr Hauptmodul ( TriviaApp) und Ihr verwendetes Framework ( Social) dieselben Konfigurationen haben. dh Wenn Ihr Projekt drei Konfigurationen hat, Debug, Release, ReleasePremiumals der Sozial Rahmen müssen auch drei Konfigurationen haben Debug, Release, ReleasePremium. Stellen Sie außerdem sicher, dass die Archivkonfiguration für TriviaAppund gleich ist Social. Wenn also das TriviaAppArchivierungsschema Ihres Archivierungsschemas festgelegt ist, ReleasePremiummuss auch das SocialArchivierungsschema Ihres Archivierungsschemas festgelegt werden ReleasePremium.
  4. Bitte stellen Sie sicher, dass Sie nicht Socialin jede .swiftDatei importieren müssen , wenn diese bereits in der Datei hinzugefügt wurde Bridging-Header.h.
  5. Im Falle der Ausgabe von Pod - Dateien kam, stellen Sie sicher , dass Sie unkommentiert #use_frameworks!in use_frameworks!von Ihnen Podfile. Manchmal funktioniert die Neuinstallation des Pods, wenn Socialeine Abhängigkeit von Pods besteht.
  6. Wenn keiner der oben genannten Schritte funktioniert, löschen Sie Ihren abgeleiteten Datenordner und versuchen Sie, ihn neu zu erstellen.
Sazzad Hissain Khan
quelle
Wow, ich hätte es ohne deine Hilfe nie herausgefunden. In der Tat wurde meinem Hauptprojekt eine benutzerdefinierte Konfiguration hinzugefügt, die jedoch im Framework fehlte.
Iulian Onofrei
@lulian froh zu wissen, dass es geholfen hat
Sazzad Hissain Khan
2

Wenn Sie Karthago verwenden, bleiben die Frameworks in der Gebäudeumgebung normalerweise erhalten

$(PROJECT_DIR)/Carthage/Build/iOS

Wenn Sie carthage update --platform ios --no-builddie Dateien im Build-Ordner ausführen (um Zeit zu sparen), werden sie nicht neu erstellt, und die Module stehen XCode nicht zur Verfügung.

In meinem Fall bin ich gelaufen carthage update --platform ios, dann wurde mein Problem gelöst.

Ronaldo Albertini
quelle
2

In Allgemein => Verknüpfte Frameworks und Bibliotheken habe ich meine hinzugefügt ./Pods/Pods.xcodeprojund es hat den Trick gemacht

michel
quelle
2

Für mich wurde Build Active Architecture Only für die ausgewählte Konfiguration auf Ja gesetzt. Das hat den Trick gemacht:

Wählen Sie im linken Projektnavigator "Pods" aus.> Wählen Sie "Build Settings"> Build Active Architecture Only to No

boa_in_samoa
quelle
1

Wenn alle oben genannten Methoden bei Ihnen nicht wie in meinem Fall funktioniert haben. Am Vortag gab es kein Problem, aber am nächsten Morgen hatte ich den gleichen Fehler. Ich habe gerade die Frameworks durch Entfernen von Referenzen entfernt und sie erneut hinzugefügt. Ich weiß, das klingt vielleicht albern, aber voila, es hat funktioniert.

Soham Ray
quelle
1

Ich hatte ein ähnliches Problem beim Laden von FacebookSDK. Ich habe ~ / Documents / FacebookSDK (Suche, wo sich Ihre Frameworks befinden) zu den Framework-Suchpfaden in den Build-Einstellungen hinzugefügt. Danach konnte ich das FBSDKShareKit-Modul importieren

Kalafun
quelle
1

Für das, was es wert ist (ich bin neu in diesem Bereich mit Xcode 7.2 / Swift 2), aber ich habe festgestellt, dass Sie automatisch Zugriff darauf haben, wenn Sie nur die .swift-Datei aus der Bibliothek im Projektverzeichnis haben und die using-Anweisung nicht benötigen.

Beispiel: Ich verwende SwiftyJSON und nur die Datei SwiftyJSON.swift im Projekt zu haben, war alles, was ich brauchte. Die usingAnweisung gab mir tatsächlich den Fehler "Kein solches Modul" und das Herausnehmen löste ihn auf, und es funktioniert einwandfrei.

Markiyanm
quelle