Bibliotheken, die nicht gefunden werden, wenn CocoaPods mit iOS-Logiktests verwendet werden
Bin ich zu schreiben versucht, einige iOS-logic-tests gegen Klassen in meinem Projekt, dass die Nutzung der Funktionalität von einigen der Bibliotheken, die in meinem podspec. Ich bin mit dem standard-unit-test-bundle zur Verfügung gestellt in Xcode (obwohl nicht-Anwendung Tests, nur Unit-Tests).
Verwende ich zum Beispiel Magische Scheibe, und ich habe, dass die library linked in meinem podspec. Es ist in dem Pods-Projekt in meinem workspace, und funktioniert wie erwartet, wenn die app läuft im simulator oder auf dem Gerät. Wenn ich versuche den link zu dem test, das Objekt, das verwendet Magische Aufnehmen, allerdings bekomme ich einen linker Fehler, der besagt, dass es nicht finden können, die Selektoren von Magisches Aufnehmen. Ich habe versucht, die Aktualisierung meiner HEADER_SEARCH_PATH in meiner Logik testen bundle, auch schwer mit der Programmierung der Header-Verzeichnis erstellt, die von CocoaPods, aber kein Glück.
Kann ich unit-tests für Klassen, die nicht mit CocoaPods-Bibliotheken mit kein problem.
Werde ich über das falsch? Sollte ich etwas anderes tun um den compiler zu sehen, die CocoaPods-Bibliotheken?
InformationsquelleAutor der Frage Mark Struzinski | 2013-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
CocoaPods 1.0 hat sich die syntax für diese. Es sieht nun wie folgt aus:
Pre CocoaPods 1.0 Antwort
Was Sie verwenden möchten,
link_with
von IhremPodfile
. So etwas wie:Führen
pod install
wieder.InformationsquelleAutor der Antwort Keith Smiley
Ich dachte, dies aus, indem Sie schauen, wie die Haupt-Zielgruppe meiner app wurde empfangen von Einstellungen von der CocoaPods-Bibliothek. CocoaPods umfasst eine .xcconfig-Datei mit dem Namen "Pods".xcconfig. Diese Datei enthält alle header-Suchpfade.
Wenn Sie bei Ihrem Projekt in der Projekt-navigator und klicken Sie auf die Registerkarte "Info", sehen Sie Ihre build-Konfigurationen auf dem oberen Abschnitt. Wenn Sie klicken Sie auf das Dreiecksymbol für die verschiedenen Konfigurationen, werden Sie sehen, Hülsen aufgelistet, die unter Ihrem Haupt-Ziel. Ich hatte auf klicken Sie auf das drop-down-und Pods hinzufügen, um die Logik-test-target auch.
Hatte ich auch die Einstellungen kopieren von
$(inherited)
und${PODS_HEADERS_SEARCH_PATHS}
aus meiner Hauptzielgruppe, und kopieren Sie Sie auf, um die Logik-test-target unter Build Settings/HEADER_SEARCH_PATHS.Schließlich, ich hinzufügen musste libPods.ein in der Link-Binary mit Bibliotheken, build-phase für meine Logik-tests Ziel.
Hoffe, das in der Lage ist, jemand anderem zu helfen.
InformationsquelleAutor der Antwort Mark Struzinski
Gibt es eine Lösung, die ich hier gefunden Unit-Tests Mit CocoaPods:
Öffnen Sie das Projekt-Datei in Xcode und wählen Sie dann das Projekt (nicht das Ziel), in der rechten Seite, dort ist ein Abschnitt genannten Konfigurationen. Wählen Sie "Pods" in "Based on Configuration file" - Spalte für Ihre test-target.
InformationsquelleAutor der Antwort Mingming
Ich Stimme mit den anderen Antworten sagen, dass es notwendig ist, um den Bibliotheken verknüpft, um die test-Ziele. Aber keiner der Vorschläge so weit mir geholfen. @Fabb schreibt in einem Kommentar: "bei den Tests
isSubclassOfClass:
ruft NICHT zurück, wo Sie zurückkehren sollte, JA. Der einzige Grund, der mir erklären kann, ist, dass die Abhängigkeiten richtig verlinkt werden sowohl die Haupt-und die test-target, und wenn die test-target - bundle loader lädt das Haupt-bundle kann nicht entscheiden, welche Klasse zu nehmen." Ich bekomme das gleiche problem mit allen bisherigen Vorschläge in diesem thread.Die Lösung, die ich habe zu arbeiten, war zu aktualisieren, meine Podfile, um bestimmte Pods, für mein Ziel und mein test target:
War es notwendig , geben Sie einen Pod für meine test-target, obwohl ich nicht verwenden Sie jeden test bestimmte Pods. Ansonsten CocoaPods würde nicht legen Sie die erforderlichen Verknüpfung von Logik in meinem Projekt.
Dieser link ist das, was mir geholfen, zu diesem Schluss kommen.
InformationsquelleAutor der Antwort JRV
Fügte ich
:exclusive => true
zu vermeiden duplizierte symbol Fehler in der Anwendung test-target.Wenn ich änderte die Anwendung test-target, um die Logik-Einheit testen, die linker-Fehler Auftritt.
Nachdem ich entfernen
:exclusive => true
funktioniert alles wieder.:exclusive => true
besagt, dass alles, was außerhalbdo...end
sollte NICHT mitmyProjectTests
was ist sinnvoll in der Anwendung von test-Ziele, aber es wird dazu führen, linker Fehler in der Logik-test-targets.InformationsquelleAutor der Antwort Hai Feng Kao
Können Sie link_with nach @Keith Smiley-Lösung.
In den Fall, Sie haben gemeinsame pods und Besonderheiten für jedes Ziel, Sie möchten möglicherweise verwenden Sie die "def" - option, um zu definieren, Gruppe von Hülsen. und verwenden Sie den "def" später im ausschließlichen Ziel.
im Beispiel oben, ich habe 'SSKeychain', um die beiden Ziele, und 'Taifun' nur 'MyProject' target
InformationsquelleAutor der Antwort Elihay
Meine Lösung für dieses problem war die änderung meiner Podfile die Bibliothek in beiden Ziele, wie diese
Und da bin ich mit swift hatte ich auch zum konfigurieren der test-target enthalten die
MyApp-Bridging-Header.h
- Datei. (In der Swift-Compiler-Gruppe unter der Build Registerkarte "Einstellungen")InformationsquelleAutor der Antwort Qw4z1
Hatte ich eine ähnliche Begebenheit, wenn ich verlor einige library-Dateien während einige der Versionskontrolle. Ich sah noch die Bibliothek-Datei in meine Pods, die aber mit dem eigentlichen code fehlt, XCode sagte, es war verschwunden. Zu meinem Entsetzen läuft "pod install" war nicht sofort bringen die verlorenen Dateien wieder.
Ich hatte zu entfernen und ersetzen Sie den pod manuell, indem Sie Folgendes tun:
Dies sollte die Bibliothek in Frage, wieder in die ursprüngliche form.
InformationsquelleAutor der Antwort Maxwell
Es ist auch erwähnenswert, dass, wenn Sie
libPods.a
zweimal Hinzugefügt, Sie erhalten einige böse Fehler wie folgt:Um es zu beheben, löschen Sie einfach eine der
libPods.a
Referenzen im Projekt-Explorer.InformationsquelleAutor der Antwort Mat Ryer
Als von CocoaPods 1.x, es ist eine neue Art zu erklären, gemeinsame Abhängigkeiten zwischen einem Ziel und den entsprechenden test-target. Ich hätte mit der akzeptierten Lösung durch Mark Struzinski zu diesem Punkt, aber mit dieser Methode ergab eine massive Anzahl von Warnungen, wenn die Ausführung meiner tests:
Mit CocoaPods 1.x können wir erklären -Test-target als Erben über das übergeordnete Ziel ist die Suche nach Pfaden wie so:
Dadurch wird das -Test-target ist der Zugang zu den Abhängigkeiten der app Ziel, ohne mehrere binary kopiert. Dies hat ernst beschleunigt und die test-build-Zeiten für mich.
InformationsquelleAutor der Antwort Darren Black
Arbeite ich mit GoogleMaps Objective-C-POD-integration auf iOS mit meinem Swift app und so für mich das Problem war, dass die Test-target nicht über einen Verweis auf der Brücke Header-Datei (SWIFT_OBJC_BRIDGING_HEADER) in den Build-Einstellungen. Stellen Sie sicher, dass Ihre app und testen Sie die app Ziele zeigen Sie auf, so dass die 3rd-party-API-Aufrufe (Google maps API, etc.,) verwendet werden können im swift-unit-tests.
InformationsquelleAutor der Antwort appledevguru
Next syntax gibt beste Ergebnis für mich (getestet unter cocoapod v. 1.2.1):
https://github.com/CocoaPods/CocoaPods/issues/4626#issuecomment-210402349
Ohne diese habe ich Warnungen während des Testlaufs über doppelte Symbole.
Nach diesem wurden die Warnungen verschwinden.
InformationsquelleAutor der Antwort Speakus
Versuchen Sie Dies, es ist für mich arbeiten ,
Wir müssen Hülsen in Konfigurationen ,
Das Projekt->Info->Konfigurationen in das Xcode-Projekt (Ihr Projekt) sollte auf 'Pods' für Debug, Release (und was Sie sonst noch haben). Sehen "- Header nicht gefunden – such-Pfade nicht im Lieferumfang enthalten"
Hoffe, das wird helfen, einige .
InformationsquelleAutor der Antwort Jaywant Khedkar