'Kein solches Modul', wenn ich CocoaPods benutze


73

Also hier ist meine Vorgehensweise. Ich erstelle ein neues Podfileim Projektverzeichnis und habe dann Folgendes hinzugefügt

platform :ios, '9.0'
use_frameworks!

target 'CPod' do
pod 'AFNetworking', '~> 2.5'
pod 'ORStackView', '~> 2.0'
pod 'SwiftyJSON', '~> 2.1'
end 

Ich feuere ab pod installund alles geht gut, öffne das xcworkspace. Ich gehe dann zu ViewController.swiftund wenn ich versuche, einen Pod zu importieren, bekomme ich No such module 'SwiftyJSON', wenn ich es tun würde import SwiftyJSON. Irgendwelche Ideen?

EDIT: SwiftyJSON ist ein Swift-basiertes Modul, nicht Obj-C



Das wäre der Fall AFNetworking , aber das ist eine andere Geschichte. SwiftyJSON ist eine Swift-Bibliothek, daher beantwortet dieser Beitrag die Frage nicht. @ Rugmangathan
Idris

Welche Version von Cocoapods verwenden Sie?
Michael Dautermann

Ich glaube es 0.37.2@MichaelDautermann
Idris

@Idris hatte genau das gleiche Problem. Möglicherweise liegt ein Problem mit Xcode 6.3.2+ vor.
rb612

Antworten:


99

Versuchen Sie, das PodsFramework zu Ihrem Build-Schema hinzuzufügen und das Framework zu erstellen. Nachdem Sie es erstellt haben, erstellen Sie Ihr Projekt.

Schritte:

  1. Menü Schema> Schemata verwalten> Aktivieren Pods> Schließen verwalten

    Geben Sie hier die Bildbeschreibung ein

  2. Wählen Sie Podsaus dem Schema-Menü.
  3. Bauen Pods.
  4. Wählen Sie Ihr Projekt aus demselben Menü aus und erstellen / führen Sie es aus.

Du hast es gerockt! Vielen Dank dafür :)
Mohsin Khubaib Ahmed

4
In Xcode 11.0 ist es jetzt unter Produkt -> Schema -> Schemata verwalten
tschumann

32

Sie müssen die .xcworkspace-Projektdatei (nicht .xcodeproj) nach der Installation Ihrer Poddatei erneut öffnen.

  1. Klonen Sie das Repo mit CocoaPods
  2. Öffnen Sie YourWorkspace / YourApplication.xcworkspace
  3. Wählen Sie die App aus, die Sie ausführen möchten. Fügen Sie SwiftyJSON.framework in eingebetteten Binärdateien für das Projekt Hit Run hinzu

Viel Spaß beim Codieren :)


1
VIELEN DANK!! Das war genau das, was ich brauchte. Ich hatte keine Ahnung von Arbeitsbereichen und hatte immer die xcodeproj-Datei geöffnet.
Ira Herman

21

Sie können auch versuchen, Pods neu zu installieren, indem Sie:

pod deintegrate

und dann

pod install

Dies hat dieses Problem für mich behoben


Manchmal ist es notwendig, diese Befehle zweimal auszuführen ... Zusätzlich habe ich den Befehl rm -rf ~ / Library / Developer / Xcode / DerivedData / * ausgeführt
mkul

Ich habe dies getan und dann das Pod-Schema und das Bibliotheksschema erstellt, dann funktioniert es.
Bhimbim

Eine so einfache Lösung und ich hätte nicht gedacht, dass dies funktionieren wird. Aber es tat es. Danke
shoan

18

Drücken Sie Befehl + Wahl + Umschalt + K und dann starten Sie Ihre App, werden Sie eine Magie sehen.

Oder drücken Sie im Menü -> Produkt die Optionstaste auf Ihrer Tastatur, um den Ordner "Build erstellen" anzuzeigen.

Es sieht komisch aus, wie Xcode diese Dinge mit uns machen konnte, aber das gleiche passierte mir, als ich eine Swift-Bibliothek mit Pod benutzte und nach zu viel Mühe mit Clean Build Folder endete.


1
Von all den Hunderten von Lösungen für den Fehler "Kein solches Modul" nach der Installation von Pods in einem Xcode-Projekt ist dies die einzige, die tatsächlich für mich funktioniert. +1.
Instanz vom

Ich habe das uralte Addendum vergessen, in dem Sie etwas aus- und wieder einschalten und es funktioniert. SEUFZER.
Sharan Duggirala

14

Ich bin mir nicht sicher, ob dies für andere noch hilfreich wäre. In meinem Fall war es jedoch ein dummer Fehler, keine Abhängigkeiten aus der .podspec-Datei zu referenzieren.

Wir haben eine Anwendung mit mehreren internen Bibliotheken, und diese Bibliotheken haben auch Abhängigkeiten voneinander - was wir in den Podfiles berücksichtigt haben ... aber NICHT in den Podspecs.

Also, obwohl unsere Podfiles:

Anwendung / Podfile

# Development Pods
pod 'ConsumingLibrary ', :path => '../ios-consuming-lib'
pod 'DependentLibrary1', :path => '../ios-library-one'
pod 'CommonCoreLibrary', :path => '../ios-common-core-lib'

ConsumingLibrary / Podfile

# Development Pods
pod 'DependentLibrary1', :path => '../ios-library-one'
pod 'CommonCoreLibrary', :path => '../ios-common-core-lib'

Musste es auch in den .podspecs aufrufen:

ConsumingLibrary / ConsumingLibrary.podspec

  # TODO
  # Add here any resources to be exported.

  s.dependency 'DependentLibrary1', '~> 0.1.0-RC'

DependentLibrary1 / DependentLibrary1.podspec

  # TODO
  # Add here any resources to be exported.

  s.dependency 'CommonCoreLibrary', '~> 0.1.0-RC'

Ich glaube, ich habe ungefähr 2 Stunden damit verbracht, herauszufinden, warum ich ConsumingLibrary erstellen und Tests ausführen kann, aber sobald ich die App erstellt habe, die alle drei Bibliotheken verbraucht hat, habe ich immer wieder Folgendes erhalten:

Kein solches Modul 'DependentLibrary1'


7

Versuchen Sie, das Pod-Update nach dem Pod-Installationsbefehl zu verwenden, um das Problem zu lösen, dass kein solches Modul vorhanden ist . Ich habe es gerade versucht und es funktioniert gut.

Danke, Ratneshwar


3

Wenn Sie mit mehreren Zielen arbeiten, vergessen Sie bitte nicht, diese Zeile in Pods einzufügen

def shared_pods
    pod 'SSKeychain', '~> 0.1.4'
    pod 'INAppStoreWindow', :head
    pod 'AFNetworking', '1.1.0'
    pod 'Reachability', '~> 3.1.0'
    pod 'KSADNTwitterFormatter', '~> 0.1.0'
    pod 'MASShortcut', '~> 1.1'
    pod 'MagicalRecord', '2.1'
    pod 'MASPreferences', '~> 1.0'
end

target 'Target_Name' do
    shared_pods
end

target 'Target_Name_Two' do
    shared_pods
end

1
Oh Mann, du hast mein Leben gerettet. Danke ! Hinweis: Wenn Sie seit dem Erstellen Ihrer Ziele keine Pod-Änderungen vorgenommen haben, funktioniert alles einwandfrei, bis Sie ein Pod-Update durchführen, das mir gerade passiert.
Keuha

2

Manchmal passiert es, wenn Sie einen Objekt- Pod innerhalb eines schnellen Projekts haben (selbst wenn Sie den use_frameworks!in verwenden .podfile).

Wenn Sie sicher sind, dass der Pod installiert ist und Sie immer noch kein solches Modul erhalten , versuchen Sie Folgendes:

  • Gehen Sie in Xcode zum Pods- Projekt
  • Pods
  • Klicken Sie mit der rechten Maustaste auf den betroffenen Pod
  • Im Finder anzeigen

Es sollte eine Paketdatei mit dem Suffix .framework vorhanden sein . Erstellen Sie einen Ordner Module darin. Erstellen Sie in diesem Ordner eine Datei namens module.modulemap mit dem folgenden Code:

framework module MODULE_NAME_HERE {
  umbrella header "MODULE_NAME_HERE.h"

  export *
  module * { export * }

  link framework LINKED_FRAMEWORKS_AND_LIBRARIES_THE_POD_NEEDS_HERE
  link framework "AdSupport"
  link "c++"
  link "z"
}

Wiederaufbau und du solltest in Ordnung sein.


2

Wie @ jakub-truhlář schrieb, ist das Hauptproblem die fehlende module.modulemap-Datei aufgrund eines Parallelitätsproblems beim Mischen von Swift- und Objective-C-Bibliotheken. Anstatt diese Dateien manuell zu erstellen, sollten Sie die abgeleiteten Daten und mehrmals mehrmals bereinigen Bauen Sie Ihr Projekt. Wenn das Projekt erfolgreich erstellt wurde, schreiben Sie module.modulemap-Dateien in Ihr Repository, um zu vermeiden, dass diese Dateien verloren gehen, z. B. durch Ändern des aktuellen Zweigs.


2

Hatte auch dieses Problem. Ich habe festgestellt, dass der Ordner in Pods/broken_framework_namefor Framework, der einen Fehler verursacht hat, auch nach der Pod-Installation oder dem Pod-Update leer war. Für mich haben diese Schritte also geholfen:

  1. schließen XCodevollständig
  2. entfernen DerivedData
  3. entfernen Podfile.lock. Stellen Sie zuvor sicher, dass Ihre Pods auf bestimmte Versionen eingestellt sind und keine unerwünschten Code-Updates verursacht werden
  4. Lauf pod deintegrate
  5. .xcworkspaceDatei entfernen
  6. wahrscheinlich optionaler Schritt: Ich hatte eine allgemeine Zeile use_frameworks!vor allen Zielen geschrieben, sie aber auch in das Ziel aufgenommen, in dem ich einen Fehler hatte
  7. Lauf pod install

Nach allen Schritten bemerkte ich, dass fehlende Framework-Dateien endlich wieder auftauchten und der Build wieder funktionierte.


Seien Sie vorsichtig beim Entfernen des Podfile.lock. Wenn Pods nicht für die Verwendung einer bestimmten Version eingestellt sind, können Sie am Ende alle Ihre Pods aktualisieren und müssen dann Ihr Projekt umgestalten. Dies mag bei neuen Projekten in Ordnung sein, bei älteren Projekten kann dies jedoch bedeuten, dass Sie einige zusätzliche Stunden für die Aktualisierung Ihrer Codebasis aufwenden müssen.
Rob B

@RobB, danke für den Hinweis, aber das Entfernen von Podfile.lock ist zu oft eine Operation und darf Ihre Codebasis nicht ruinieren. Es darf niemals passieren, dass Pods-Versionen in Ihrer Podfile so schlecht eingestellt sind. Es sollte nicht auf die nächste Haupt- / Nebenversion aktualisiert werden, ohne dass Sie es speziell ändern müssen.
Eridana

Ich stimme dir vollkommen zu. Dies ist jedoch das beste Szenario. Die meisten Codebasen, auf die ich stoße, folgen nicht den Best Practices und setzen diese Werte nicht richtig. In einer perfekten Welt müssten Sie sich darüber keine Sorgen machen.
Rob B

Hm, ja, hier stimme ich zu. Warnung zum Beitrag hinzugefügt.
Eridana

1

Ich hatte das gleiche Problem in einem schnellen Rahmen, den ich entwickelt hatte. Das Framework hatte eine Abhängigkeit vom Git-Projekt und das Framework selbst wurde als Pod zu meinem Hauptprojekt hinzugefügt. Idealerweise wurde die Abhängigkeit auch in der Podspec-Datei und in der Pod-Datei angegeben.

Ich hatte beim Zugriff über mein Hauptprojekt kein Problem, aber als ich das Framework eigenständig öffnete, wurde der Fehler "Kein solches Modul" ausgegeben.

Die Hauptursache ist, dass die Basiskonfigurationen mit dem Pfad festgelegt werden, der auf mein Hauptprojekt anstatt auf das Framework selbst zeigt, da ich podinstall zuerst in meinem Hauptprojekt und dann im Framework-Projekt ausgeführt habe.

Beispiel: In der Projektdatei war es wie 0091AB0C861D71C94ADD7240 / * Pods-myframework.release.xcconfig * / = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-myframework.release.xcconfig"; path = "../../Apps/MyMainProject/Pods/Target Support Files / Pods-myframework / Pods-myframework.release.xcconfig" ; sourceTree = ""; };

Nach dem unten beschriebenen Fix 4444F5B1B35F066E57F96782 / * Pods-myframework.release.xcconfig * / = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-myframework.release.xcconfig"; path = "Pods / Zielunterstützungsdateien / Pods-myframework / Pods-myframework.release.xcconfig" ; sourceTree = ""; };

Um den Fehler zu beheben,

  1. Projektdatei -> Konfigurationen -> Setzen Sie alle Konfigurationen auf keine.
  2. Entfernen Sie den Pods-Ordner und Podfile.lock.
  3. Führen Sie 'pod install' zuerst im Framework-Projektverzeichnis aus und führen Sie dann die Pod-Installation im Hauptprojektverzeichnis durch.

1

Ich habe gerade bestimmte Abhängigkeiten im Terminal aktualisiert

Gehen Sie zum Projektordner und führen Sie den folgenden Befehl aus

Pod Aktualisieren Sie Ihren Pod-Namen

Für mich muss ich tun

Pod Update ReachabilitySwift


0

Das Hinzufügen des Links "c ++" in der Datei "module module.modulemap" hat bei mir funktioniert


0

Ich hatte dieses Problem, als ich XCode öffnete und dann den Arbeitsbereich meines Projekts über Datei-> Zuletzt geöffnet auswählte.

Ich habe festgestellt, dass ich zwei .xcworkspace-Dateien in meinem Dateisystem für denselben Arbeitsbereich / dasselbe Projekt hatte.

Das Öffnen von XCode durch Doppelklicken auf die richtige .xcworkspace-Datei hat den Trick getan. Der richtige ist derjenige, der funktioniert.

Ich habe später den falschen gelöscht.


0

Hatte dieses Problem beim Hinzufügen von CocoaPods zu einem alten Projekt, das bereits zuvor manuell Bibliotheken enthalten hatte. Framework Search PathDies geschah, weil Xcode aufgrund von Werten, die zuvor in den Einstellungen des Ziels festgelegt wurden, nicht in die von CocoaPods generierten Werte aufgelöst wurde.

Lösung, die mir geholfen hat:

  1. Kopieren Sie den alten Pfad

  2. Framework Search PathKlicken Sie auf Löschen, um die Einstellungen in der Zielspalte vollständig zu löschen. Dort wird der von CocoaPods generierte Pfad angezeigt

  3. Fügen Sie den alten Suchpfad wieder unter dem generierten hinzu (nur erforderlich, wenn Sie noch einige manuell hinzugefügte Frameworks haben, mit denen Sie arbeiten können).

  4. Projekt bereinigen, abgeleitete Daten löschen, erstellen.

Das Ergebnis würde folgendermaßen aussehen (1. Zeile von Xcode hinzugefügt, 2. von CocoaPods hinzugefügt und 3. manuell): Geben Sie hier die Bildbeschreibung ein


0

Bei mehreren Zielen. Zum Beispiel. Ziel1, Ziel2

use_frameworks!

target 'Target1' do
 pod 'Fabric'
 pod 'Crashlytics'

   target 'Target2' do
   end

end

Führen Sie dann die Pod-Installation aus.


0

Ich habe all diese Vorschläge ausprobiert, aber nichts hat bei mir funktioniert. Stattdessen hatte es für mich funktioniert, Pods zu integrieren. Löschen Sie anschließend den Pods-Ordner aus der Xcode-Hierarchie und führen Sie die Pod-Installation durch. Plötzlich hat es funktioniert. Fragen Sie mich nicht warum, denn die meisten dieser Vorschläge sind sowieso gut oder schlecht, aber ich würde mich freuen, wenn es auch für jemand anderen funktioniert :)


0

Stellen Sie sicher, dass Sie den korrekten Framework-Namen importieren, .podspecder im Pod definiert ist.


0
  • sauberes Projekt
  • Xcode schließen
  • Xcode öffnen
  • genießen

0

Normalerweise entferne ich PodsOrdner und .xcworkspaceDateien, führe sie dann pod installerneut aus und es hilft in fast 100% der Fälle.


0

Mein Setup

  • macOS 10.14 Mojave
  • Xcode 10.3
  • Cocoapods 1.7.5

Keine der Antworten funktioniert für mich, obwohl einige teilweise Hinweise gaben. In meinem Fall war die Hauptursache, dass ich meine Build-Produktpfade nach dem Ausführenpod install angepasst habe .

Wenn Sie Cocoapods direkt nach dem Erstellen eines Xcode-Projekts ausführen, funktioniert dies normalerweise, wenn Sie den generierten Xcode .xcworkspaceanstelle des öffnen .xcodeproj.

Lustige Dinge passieren, wenn Sie nach dem Generieren des Arbeitsbereichs damit beginnen, Ihre Build-Produktpfade zu optimieren . Da sich das generierte Pods-Projekt und sein Ziel alle auf Ihre alten Xcode-Projekteinstellungen beziehen.

In meinem Fall kam mein Problem von:

  • Ich bevorzuge alle meine Build-Produkte, die sich unter dem Projektordner befinden $(SRCROOT)/build/$(CONFIGURATION)/$(EFFECTIVE_PLATORM_NAME). Also ging ich voran und änderte meine Pre-configuration Build Products Pathdarauf ... NACHDEMpod install .

Das generierte PodsProjekt, einschließlich des gesamten Framework-Ziels, verweist weiterhin auf den alten Speicherort, sodass sowohl der Header-Import als auch die Verknüpfung Ihres eigenen Projekts fehlschlagen (Sie werden sehen, Command PhaseScriptExecution failed with a nonzero exit codewann dies No such modulebehoben ist).

Die Reparatur:

  • Löschen Sie alle Pods einschließlich des Arbeitsbereichs.
  • Regenerate PodsProjekt und Arbeitsbereich mit pod install. Allerdings cocoapods Hardcodes den Build - Produkt Weg ${SRCROOT}/../buildund Pre-configuration Build Productszu $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)in meinem Fall, die in der Regel deutet auf einen temporären ~/Library/DeveloperUnterordner. Immer noch nicht ganz richtig. Dann ....
  • Stellen Sie sicher, dass das Framework Search Pathund Header Search Pathmeines eigenen Projekts die oben genannten Pfade abdeckt.
  • Passen Sie die PodsProjekteinstellungen und alle Abhängigkeits-Frameworks an Pre-configuration Build Products Path, um meine bevorzugten Pfade zu verwenden.

Die moralische Lehre: Generieren Sie Pods immer neu und überprüfen Sie die wichtigsten Ergebnispfade, wenn Sie Pfade in den Xcode-Projekteinstellungen berühren.

AKTUALISIEREN

Mit Xcode 11 entfernte Apple schließlich den verwirrenden "Vorkonfigurationspfad für Build-Produkte". Verwenden Sie zum Anpassen der Build-Produktpfade die LocationsXcode-Einstellungen mit vorgebackenen globalen relativen Pfaden.



-5

Für die Verwendung von Swift in Objective-C sollten Sie eine Header-Datei importieren, die Xcode in der Kompilierungszeit automatisch generiert (NameOfModule + Swift.h). In diesem Fall sollten Sie versuchen, SwifityJSON wie folgt in Ihre Header-Datei zu importieren:

#import "SwiftyJSON-Swift.h" 

2
use_frameworks!Sie müssen den Obj-CHeader nicht importieren , Sie importieren das Modul, und das OP verwendet Swift. Wo sehen Sie die Notwendigkeit zum Importieren Obj-C?
Sbarow
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.