Ich habe in den letzten Tagen meinen Kopf damit gegen eine Wand geschlagen, aber trotz mehrfacher Google / SO / Github-Suchen kann ich keine Lösung für die Probleme finden, die ich habe!
Ich versuche nur, einige Komponententests für meine App zu erstellen, bei denen Firebase-Pods verwendet werden.
Ich verwende Xcode 7.3.1 & Cocoapods 1.0.1. Update: Das Problem bleibt bei Xcode 8.0
Mit dieser Poddatei:
platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
target 'MyApp' do
pod 'Firebase'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
target 'MyAppTests' do
inherit! :search_paths
end
end
In meiner XCTest-Klasse bekomme ich
Fehlendes erforderliches Modul 'Firebase'
Fehler bei @testable import MyApp
Alternativ mit dieser Poddatei:
platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
def common_pods
pod 'SwiftyTimer'
pod 'Firebase'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
end
target 'MyApp' do
common_pods
end
target 'MyAppTests' do
common_pods
end
Die Tests werden erstellt, aber meine Konsole ist mit Warnungen übersät, z.
Die Klasse <-FirebaseClassName-> ist in beiden ... MyApp ... und ... MyAppTests ... implementiert. Eine der beiden wird verwendet. Welches ist undefiniert
Antworten:
Ich hatte das gleiche Problem. Ich habe es gelöst, indem ich
pod 'Firebase'
mich zu meinem Testziel bewegt habe. Ändern Sie Ihr Podfile wie folgt:quelle
pod install
.pod install
um die Projektabhängigkeiten zu aktualisieren;)Versuchen Sie, die Vererbung wie folgt zu ändern
:complete
:Wichtig ist, dass jeder andere, der Ihr Repo auscheckt,
pod update
wie gewohnt ein Repo ausführen kann, ohne.xcconfig
Dateien oder andere Hackerangriffe kopieren zu müssen, um sie zu erstellen.quelle
Beispiel
quelle
Das Problem ist, dass Firebase mit den Header-Suchpfaden etwas Besonderes macht, nachdem CocoaPods einen eigenen Wert für die Einstellung generiert hat, sodass CocoaPods diese Änderung nicht übernimmt, um sie auf das Testziel zu übertragen. Sie können dies auf zwei Arten lösen:
Suchen Sie
MyAppTests.<configuration>.xcconfig
im Datei-Navigator und fügen Sie Folgendes hinzuHEADER_SEARCH_PATHS
:${PODS_ROOT}/Firebase/Analytics/Sources
[*]Suchen Sie die Einstellung für Header-Suchpfade in den Build-Einstellungen und fügen Sie der Liste denselben Wert wie in Option 1 hinzu. Sie sollten es nicht als rekursiv festlegen müssen.
*
${PODS_ROOT}/Firebase/Core/Sources
Gemäß dem Kommentar von AKM wurde dies in Version 3.14.0 geändertquelle
${PODS_ROOT}/Firebase/Core/Sources
inherit! :search_paths
das Testziel in der hinzufügen musstePodfile
.Drei Schritte, bevor ich das zum Laufen bringen konnte:
CocoaPods: 1.5.0 Swift 4 Firebase: 4.13.0
Schritt 1: Stellen Sie sicher, dass Sie den folgenden Zielblock zu Ihrer Poddatei hinzufügen.
Schritt 2: Auf der Registerkarte Build-Einstellungen von YourAppTests Project Navigator. Suchen Sie die Zeile Header Search Path und fügen Sie die folgende Zeile zum Debuggen hinzu
Schritt 3: Im Terminallauf:
quelle
Das Problem wird hier im Firebase-Projekt aufgezeichnet:
https://github.com/firebase/firebase-ios-sdk/issues/58
Es gibt eine Problemumgehung:
Dies wird jedoch auch durch ein Upgrade auf CocoaPods 1.4.0 oder höher behoben, was eine bessere Lösung darstellt.
Zum Zeitpunkt des Schreibens (November 2017) befindet sich cocoapods 1.4.0 noch in der Beta. Um es zu installieren, müssen Sie die Beta explizit anfordern:
Dies und dann ein
pod install
Problem zu lösen, das meine Tests ausführt.quelle
pod install
nach dem Upgrade gelaufen ?pod install
mein Problem gelöst! Vielen Dank!Die Lösung für mich war, Cocoapods auf Version 1.1.0.rc.2 zu aktualisieren.
sudo gem install cocoapods --pre
quelle
Ich habe alles oben Genannte ausprobiert und bin auf verschiedene Fehler gestoßen, die ursprünglich damit begannen
Missing required module 'Firebase'
, dann"Class ... is implemented in both ... "
Probleme mit dem Linker zu bekommen oder zu verknüpfen, wenn ich versuchte, meinem Testziel Firebase-Pods hinzuzufügen.Die Lösung, die für mich funktioniert hat, war:
$(inherited) non-recursive
$(SRCROOT)/Pods/Headers/Public recursive
$(SRCROOT)/Pods/Firebase recursive
Zu diesem Zeitpunkt hat es für mich funktioniert, den Build-Ordner zu bereinigen, neu zu erstellen und dann die Tests erneut auszuführen. Hoffe das hilft jemandem!
quelle
Das Hinzufügen
${SRCROOT}/Pods/Firebase/CoreOnly/Sources
der "Header-Suchpfade" des Unit-Test-Ziels hat das Problem behoben. Schritte:Danach können die Tests ausgeführt werden und der Fehler verschwindet.
quelle
Ich hatte ein ähnliches Problem. In Bezug auf Ihre Frage habe ich den Inhalt meiner
MyApp.<configuration>.xcconfig
Datei in meineMyAppTests.<configuration>.xcconfig
Datei kopiert . Ich habe die Tests gereinigt und gebaut, und es hat funktioniert.quelle
Fügen Sie "$ {PODS_ROOT} / Firebase / Core / Sources" nur unter Build-Einstellungen -> Header- Suchpfade zu Ihrem Testziel hinzu
quelle
Wie @Will erwähnte, gab es nach der Installation von CocoaPods ein Problem mit Header- Suchpfaden.
Ich habe ein Projekt mit mehreren Zielen, bei dem der Pod 'Firebase' beispielsweise in ein separates Modul eingebettet ist
MyProject-Shared
. Firebase-Pod unter 'Podfile' nur für das Ziel 'MyProject-Shared' installiert. Andere Module, die 'MyProject-Shared' verwenden möchten, können aufgrund eines Fehlers nicht kompiliert werden:'fehlendes erforderliches Modul "Firebase"'
In meinem Fall bestand der Trick darin, den folgenden fehlenden Header-Suchpfad in den Build-Einstellungen jedes Ziels hinzuzufügen, die auf Analytics-Framework verweisen :
"${PODS_ROOT}/Firebase/CoreOnly/Sources"
Bitte siehe Bild unten:
Hoffe, es wird Ihre Zeit sparen.
quelle
Eine einfachere Methode, die auch funktioniert:
quelle
Missing required module Firebase
KEINE CocoaPods-LösungFür diejenigen, die auf dasselbe Problem stoßen, aber KEINE CocoaPods verwenden:
Wenn Sie Firebase verwenden, haben Sie einen Ordner mit
Firebase.h
undmodule.modulemap
Datei. Zum Beispiel -YOUR_PROJECT_DIR/Linking
Wenn Ihr Hauptprojektziel ordnungsgemäß funktioniert, gehen Sie zu ProjectSettings -> Targets. Testziel auswählen. Suchen Sie nach
User headers
dem Pfad und fügen Sie ihn hinzuYOUR_PROJECT_DIR/Linking
. Wählen Sie dierecursive
Option und Sie sollten bereit sein zu gehen.Weitere Details finden Sie im Screenshot:
quelle