2016-11-21 3 views
7

Ich erstelle einen CocoaPod, sagen wir MyPod, der von einem anderen Cocoapod abhängt, sagen wir RxSwift.Verwenden einer CocoaPod-Abhängigkeit beim Entwickeln eines CocoaPods

So habe ich dies in MyPod.podspec:

s.dependency "RxSwift", "~> 3.0.1" 

Doch während MyPod entwickeln, wie kann ich die Abhängigkeit tatsächlich nutzen?

import RxSwift 
// ^
// No such module 'RxSwift' 

public class MyClass { //... 

Gibt es einen Schritt fehlt mir, oder eine gemeinsame Konvention? Es sieht aus wie einige andere Projekte wie MoyaCarthage verwenden, um Abhängigkeiten während der Entwicklung aufzubauen. Sollte ich das tun, oder vielleicht eine Podfile hinzufügen?

Ich weiß, dass dies kein Problem für eine Beispiel-App innerhalb der Repo sein sollte, die ihre eigene Podfile haben würde. Ich möchte jedoch immer noch Tests auf der obersten Ebene außerhalb der Beispiel-App haben und in der Lage sein, das Framework zu erstellen, während ich daran wiederum außerhalb einer Beispiel-App arbeite.

Antwort

1

Ich endete mit Karthago, um die Framework-Abhängigkeiten aufzubauen. Ich könnte mir vorstellen, dass ich auch CocoaPods hätte verwenden können. Allerdings hätte ich dazu gezwungen, einen Arbeitsbereich zu verwenden, und ich wollte das nicht tun, um die Änderungen so minimal wie möglich zu halten.

Auch mit Karthago, es erfordert nicht, dass ich ein neues Podfile/Podfile.lock, fügen seit Karthago die bestehende Cartfile/Cartfile.resolved nutzen, die bereits vorhanden ist. Das liegt daran, dass Karthago die Cartfile.resolved verwendet, wenn das Framework in einem anderen Projekt verwendet wird, und, wenn er das Framework selbst erstellt. Während bei CocoaPods wird *.podspec verwendet wird, wenn der Rahmen in einem anderen Projekt mit aberPodfile.lock (wenn Sie noch ein Podfile hinzugefügt) ist erforderlich, um abhängig Schoten im Rahmen selbst zu installieren.

6

Ich kann nicht sprechen, ob CocoaPods oder Karthago zu verwenden oder nicht. Beide haben ihre Stärken und Schwächen. Außerdem sollte die Entscheidung unter Berücksichtigung vieler Faktoren getroffen werden, von denen Sie einige möglicherweise nicht kontrollieren können (wie ein Client, der darauf besteht, dass Sie CocoaPods verwenden!) Also überspringe ich diesen Teil.

Wie auch immer, auf Ihre Frage kann ein Pod, das Sie gerade entwickeln, von einem anderen Pod abhängen. Sie haben bereits die richtige s.dependency Linie. Das ist notwendig.

Ich vermute jedoch, dass der Grund, warum Sie nicht in der Lage waren, den abhängigen Pod zu referenzieren, sein könnte, weil Sie keine Poddatei in Ihrem 'tester/example' Projekt hatten und/oder keine pod install nach dem Hinzufügen der Abhängigkeit in deiner Podspec.

Der Grund dafür ist die Anforderung Ich vermute, dass, da die Podspec überhaupt nicht von Xcode verarbeitet wird, Sie nicht tatsächlich die Abhängigkeit herunterladen (oder kompilieren).

Wenn Sie die Pod-Installation durchführen (natürlich über die Befehlszeile), erstellt CocoaPods ein Pods-Projekt mit Ihrem Entwicklungs-Pod, den Pods, auf die Sie angewiesen sind (in Podspec) sowie anderen Pods in Ihrem Podfile.

diese Theorie testen, I:

  • eine neue Hülse geführt (CocoaPod eigenen 'pod lib erstellen' (https://guides.cocoapods.org/making/using-pod-lib-create.html) mit
  • den Arbeitsbereich geöffnet, das CocoaPod für mich erstellt und bearbeitet die Podspec zu. fügen Sie die Abhängigkeit s.dependency 'RxSwift', '~> 3.0.1'.
  • Added andere pod in meinem Beispiel App Podfile (die Differenz zwischen Podfile Abhängigkeiten und Podspec Abhängigkeiten zu demonstrieren.)
  • pod install im Beispiel App folde Performed r.
  • Bearbeitet die Klasse meines Pods, etwas Nützliches zu tun und die import RxSwift Zeile hinzuzufügen.
  • Ich habe meiner Beispiel-App ein Label hinzugefügt ("Hello World" natürlich).
  • Gebrauchte PureLayout alle Autolayoutbeschränkungen für das Label zu tun (und zu zeigen, wie das Beispiel Projekt Zugang zu beiden Hülsen hat -. Die Entwicklung pod sowie der referenzierten pod PureLayout)

Sie können prüfen, aus der Demo ich auf meinem öffentlichen GitHub erstellt: https://github.com/ericwastaken/CocoaPod-Dependency-Demo

Ehrlich gesagt, habe ich mehrere Hülsen mit den pod lib create erstellt und es ist in der Tat eine schöne Struktur schaffen, die immer für mich gearbeitet hat. Aus diesem Grund würde ich empfehlen, es immer zu verwenden, um das Skelett deines Pods zu erstellen.

Xcode 8 Kommentar: pod lib create scheint immer noch ein Swift 1.x Projekt zu erstellen. Direkt nach der Verwendung dieses Tools wird Ihnen beim Öffnen von Xcode angeboten, auf eine neuere Version von Swift zu "konvertieren". Ich würde diese Umwandlung genau dann und dort (das erste Mal) passieren lassen, so dass Sie in Swift 2.x oder 3.x Syntax sein können (Sie wählen).

+0

Danke für die gründliche Antwort. Ich denke jedoch, dass Sie den letzten Teil meiner Frage verpasst haben, wo ich sage, dass ich nicht durch die ExampleApp entwickeln (oder überhaupt eine haben) und meine Tests auf der obersten Ebene im Framework haben möchte selbst. Ich möchte, dass meine ExampleApp (wenn ich überhaupt eine habe) einfach da sein soll, um zu zeigen, wie das Framework genutzt werden kann. Es sollte nichts Wesentliches enthalten, wie Tests. Es sollte in der Lage sein, ohne Sorge entfernt zu werden. – solidcell

+0

Ich ermutige Sie, das von mir erstellte Repo zu klonen. Sie werden feststellen, dass die Beispiel-App für gar nichts benötigt wird und tatsächlich entfernt werden kann. Sie machen die gesamte Entwicklung in den 'Development Pods', wie Sie es nennen. Außerdem kann man tatsächlich Unit-Tests gegen den Pod schreiben. Das Einheitentestziel kann einfach den Pod als Abhängigkeit haben und Sie können TESTABLE verwenden, um private Methoden in den Tests verfügbar zu machen. Fühlen Sie sich frei, es zu klonen und experimentieren Sie mit dem Entfernen des Beispiels. Beachten Sie, dass Sie immer noch eine Poddatei benötigen, aber das könnte für sich alleine sein. – ericWasTaken

+0

Ja, am Ende ist der Hauptgrund, dass Sie noch eine zusätzliche 'Podfile' benötigen, damit sich das Framework selbst aufbauen kann. Was Ihr Repo betrifft, habe ich versucht, es zu bauen, aber ich bekomme eine Menge Xcode-Probleme damit. Dateien nicht gefunden (rot), dann fügt es einen Build-Ordner bei '../ build' hinzu, wenn ich versuche zu bauen. Wenn ich es schließe und wieder öffne, erstellt es ein kopiertes Schema für jedes Schema: "___ 2" für jedes. Es ist aber in Ordnung, da ich bereits zu der gleichen Lösung wie du gekommen bin (die "Podfile"), Projekt Setup Unterschiede beiseite. – solidcell

Verwandte Themen