Also hier ist meine Vorgehensweise. Ich erstelle ein neues Podfile
im 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 install
und alles geht gut, öffne das xcworkspace
. Ich gehe dann zu ViewController.swift
und 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
AFNetworking
, aber das ist eine andere Geschichte.SwiftyJSON
ist eine Swift-Bibliothek, daher beantwortet dieser Beitrag die Frage nicht. @ Rugmangathan0.37.2
@MichaelDautermannAntworten:
Versuchen Sie, das
Pods
Framework zu Ihrem Build-Schema hinzuzufügen und das Framework zu erstellen. Nachdem Sie es erstellt haben, erstellen Sie Ihr Projekt.Schritte:
Menü Schema> Schemata verwalten> Aktivieren
Pods
> SchließenPods
aus dem Schema-Menü.Pods
.quelle
Sie müssen die .xcworkspace-Projektdatei (nicht .xcodeproj) nach der Installation Ihrer Poddatei erneut öffnen.
Viel Spaß beim Codieren :)
quelle
Sie können auch versuchen, Pods neu zu installieren, indem Sie:
und dann
Dies hat dieses Problem für mich behoben
quelle
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.
quelle
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:
quelle
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
quelle
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
quelle
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:
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.
quelle
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.
quelle
Hatte auch dieses Problem. Ich habe festgestellt, dass der Ordner in
Pods/broken_framework_name
for 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:XCode
vollständigDerivedData
Podfile.lock
. Stellen Sie zuvor sicher, dass Ihre Pods auf bestimmte Versionen eingestellt sind und keine unerwünschten Code-Updates verursacht werdenpod deintegrate
.xcworkspace
Datei entfernenuse_frameworks!
vor allen Zielen geschrieben, sie aber auch in das Ziel aufgenommen, in dem ich einen Fehler hattepod install
Nach allen Schritten bemerkte ich, dass fehlende Framework-Dateien endlich wieder auftauchten und der Build wieder funktionierte.
quelle
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,
quelle
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
quelle
Das Hinzufügen des Links "c ++" in der Datei "module module.modulemap" hat bei mir funktioniert
quelle
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.
quelle
Hatte dieses Problem beim Hinzufügen von CocoaPods zu einem alten Projekt, das bereits zuvor manuell Bibliotheken enthalten hatte.
Framework Search Path
Dies 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:
Kopieren Sie den alten Pfad
Framework Search Path
Klicken Sie auf Löschen, um die Einstellungen in der Zielspalte vollständig zu löschen. Dort wird der von CocoaPods generierte Pfad angezeigtFü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).
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):
quelle
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.
quelle
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 :)
quelle
Stellen Sie sicher, dass Sie den korrekten Framework-Namen importieren,
.podspec
der im Pod definiert ist.quelle
quelle
Normalerweise entferne ich
Pods
Ordner und.xcworkspace
Dateien, führe sie dannpod install
erneut aus und es hilft in fast 100% der Fälle.quelle
Mein Setup
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ühren
pod install
angepasst habe .Wenn Sie Cocoapods direkt nach dem Erstellen eines Xcode-Projekts ausführen, funktioniert dies normalerweise, wenn Sie den generierten Xcode
.xcworkspace
anstelle 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:
$(SRCROOT)/build/$(CONFIGURATION)/$(EFFECTIVE_PLATORM_NAME)
. Also ging ich voran und änderte meinePre-configuration Build Products Path
darauf ... NACHDEMpod install
.Das generierte
Pods
Projekt, 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 code
wann diesNo such module
behoben ist).Die Reparatur:
Pods
Projekt und Arbeitsbereich mitpod install
. Allerdings cocoapods Hardcodes den Build - Produkt Weg${SRCROOT}/../build
undPre-configuration Build Products
zu$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
in meinem Fall, die in der Regel deutet auf einen temporären~/Library/Developer
Unterordner. Immer noch nicht ganz richtig. Dann ....Framework Search Path
undHeader Search Path
meines eigenen Projekts die oben genannten Pfade abdeckt.Pods
Projekteinstellungen und alle Abhängigkeits-Frameworks anPre-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
Locations
Xcode-Einstellungen mit vorgebackenen globalen relativen Pfaden.quelle
Bei der Pod-Installation wird eine Warnung angezeigt: '... Ziel überschreibt die
FRAMEWORK_SEARCH_PATHS
in ...' definierte Build-Einstellung.Repariere es und genieße es.
Referenz: Ziel überschreibt die Build-Einstellungen von FRAMEWORK_SEARCH_PATHS .
quelle
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"
quelle
use_frameworks!
Sie müssen denObj-C
Header nicht importieren , Sie importieren das Modul, und das OP verwendet Swift. Wo sehen Sie die Notwendigkeit zum ImportierenObj-C
?