Ich mache jetzt seit ein paar Monaten iOS-Entwicklung und habe gerade von der vielversprechenden CocoaPods- Bibliothek für das Abhängigkeitsmanagement erfahren .
Ich habe es an einem persönlichen Projekt ausprobiert: Kiwi wurde eine Abhängigkeit zu meinem Podfile hinzugefügt, lief pod install CocoaPodsTest.xcodeproj
und voila , es hat großartig funktioniert.
Ich frage mich nur noch: Was checke ich ein und was ignoriere ich für die Versionskontrolle? Es scheint offensichtlich, dass ich die Pod-Datei selbst und wahrscheinlich auch die .xcworkspace-Datei einchecken möchte. Aber ignoriere ich das Pods / -Verzeichnis? Gibt es andere Dateien, die später generiert werden (wenn ich andere Abhängigkeiten hinzufüge), die ich auch meinem .gitignore hinzufügen sollte?
quelle
Podfile.lock
: Es wird von Cocoapods als empfehlenswert bezeichnet, unter Versionskontrolle zu stehen.Ich habe mein Pods-Verzeichnis festgeschrieben. Ich bin nicht der Meinung, dass das Pods-Verzeichnis ein Build-Artefakt ist. Tatsächlich würde ich sagen, dass dies definitiv nicht der Fall ist. Es ist Teil Ihrer Anwendungsquelle: Ohne sie wird es nicht erstellt!
Es ist einfacher, sich CocoaPods als Entwicklertool vorzustellen, als als Build-Tool. Es erstellt Ihr Projekt nicht, es klont und installiert einfach Ihre Abhängigkeiten für Sie. Es sollte nicht erforderlich sein, CocoaPods zu installieren, um Ihr Projekt einfach erstellen zu können.
Indem Sie CocoaPods zu einer Abhängigkeit Ihres Builds machen, müssen Sie jetzt sicherstellen, dass es überall verfügbar ist, wo Sie Ihr Projekt erstellen müssen. Ein Teamadministrator benötigt es, Ihr CI-Server benötigt es. Sie sollten in der Regel immer in der Lage sein, Ihr Quell-Repository zu klonen und ohne weiteren Aufwand zu erstellen.
Wenn Sie Ihr Pods-Verzeichnis nicht festschreiben, entstehen Ihnen auch massive Kopfschmerzen, wenn Sie häufig zwischen Zweigen wechseln. Jetzt müssen Sie die Pod-Installation jedes Mal ausführen, wenn Sie die Zweige wechseln, um sicherzustellen, dass Ihre Abhängigkeiten korrekt sind. Dies ist möglicherweise weniger problematisch, da sich Ihre Abhängigkeiten stabilisieren, aber zu Beginn eines Projekts ist dies eine massive Zeitsenke.
Also, was ignoriere ich? Nichts. Podfile, die Sperrdatei und das Pods-Verzeichnis werden festgeschrieben. Vertrauen Sie mir, es wird Ihnen viel Ärger ersparen. Was sind die Nachteile? Ein etwas größeres Repo? Nicht das Ende der Welt.
quelle
Pods
Verzeichnisses Ihnen Schmerzen bereiten wird, wenn das Einchecken auch mit einem eigenen Bündel von Problemen verbunden ist. Beispiel: Ein Entwickler stößt eine Version einer Abhängigkeit in a an,Podfile
ohne daran zu denken, die aktualisierten Quellen in Pods einzuchecken. Murphys Gesetz.pod install
Jedes Mal, wenn Sie den Zweig wechseln, kostet Sie wertvolle ... ZEHN Sekunden - aber es beseitigt diese Klasse von Problemen insgesamt.It won't build without it!
Sie können auch XCode festlegenIch empfehle, den Objective-C-Gitignore von GitHub zu verwenden . Im Detail sind die Best Practices:
Podfile
muss immer unter Quellcodeverwaltung sein.Podfile.lock
muss immer unter Quellcodeverwaltung sein.:path
Option verwiesen wird, sollte unter Quellcodeverwaltung gehalten werden../Pods
Ordner kann unter Quellcodeverwaltung gehalten werden.Weitere Informationen finden Sie im offiziellen Leitfaden .
Quelle: Ich bin Mitglied des CocoaPods-Kernteams wie @alloy
Obwohl der Pods-Ordner ein Build-Artefakt ist, gibt es Gründe, die Sie berücksichtigen sollten, wenn Sie entscheiden, ob Sie ihn unter Quellcodeverwaltung halten möchten:
:head
und die:git
Optionen derzeit nicht die in der gespeicherten CommitsPodfile.lock
).quelle
.gitignore-Datei
Keine Antwort bietet tatsächlich eine
.gitignore
, also hier sind zwei Geschmacksrichtungen.Einchecken im Pods-Verzeichnis ( Vorteile )
Xcode / iOS-freundliche Git ignorieren, Mac OS-Systemdateien, Xcode, Builds, andere Repositorys und Backups überspringen.
.gitignore:
Ignorieren des Pods-Verzeichnisses ( Vorteile )
.gitignore: (an vorherige Liste anhängen)
Wenn Sie
Pods
nicht eingecheckt sind,Podfile
sollten Sie wahrscheinlich explizite Versionsnummern für jeden Cocoapod anfordern. Cocoapods.org Diskussion hier .quelle
Ich arbeite im Allgemeinen an Apps von Kunden. In diesem Fall füge ich das Pods-Verzeichnis ebenfalls zum Repo hinzu, um sicherzustellen, dass jeder Entwickler jederzeit eine Prüfung durchführen und erstellen und ausführen kann.
Wenn es eine eigene App wäre, würde ich wahrscheinlich das Pods-Verzeichnis ausschließen, bis ich eine Weile nicht mehr daran arbeite.
Eigentlich muss ich zu dem Schluss kommen, dass ich möglicherweise nicht die beste Person bin, um Ihre Frage zu beantworten, im Gegensatz zu Ansichten reiner Benutzer :) Ich werde über diese Frage von https://twitter.com/CocoaPodsOrg twittern .
quelle
Ich checke alles ein. (
Pods/
undPodfile.lock
.)Ich möchte in der Lage sein, das Repository zu klonen und zu wissen, dass alles genauso funktioniert wie beim letzten Mal, als ich die App verwendet habe.
Ich würde lieber Dinge verkaufen, als zu riskieren, dass andere Ergebnisse erzielt werden, die durch eine andere Version des Edelsteins verursacht werden könnten, oder dass jemand den Verlauf im Repository des Pods neu schreibt usw.
quelle
Die Antwort darauf finden Sie direkt in den Cocoapod-Dokumenten. Sie können sich " http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control " ansehen.
quelle
Ich bin im Lager der Entwickler, die keine Bibliotheken einchecken, vorausgesetzt, wir haben eine gute Kopie an einem anderen Ort. Daher füge ich in meinen .gitignore die folgenden Zeilen ein, die für CocoaPods spezifisch sind:
Dann stelle ich sicher, dass wir eine Kopie der Bibliotheken an einem sicheren Ort haben. Anstatt das Code-Repository eines Projekts (falsch) zum Speichern von Abhängigkeiten (kompiliert oder nicht) zu verwenden, ist es meiner Meinung nach am besten, Builds zu archivieren. Wenn Sie für Ihre Builds einen CI-Server verwenden (z. B. Jenkins), können Sie alle für Sie wichtigen Builds dauerhaft archivieren. Wenn Sie alle Ihre Produktions-Builds in Ihrem lokalen Xcode ausführen, machen Sie es sich zur Gewohnheit, ein Archiv Ihres Projekts für alle Builds zu erstellen, die Sie behalten müssen. So etwas wie: 1. Produkt -> Archiv
Verteilen ... An den iOS App Store senden / Für Unternehmen speichern oder Ad-hoc-Bereitstellung / Was haben Sie?
Zeigen Sie Ihren Projektordner im Finder an
Klicken Sie mit der rechten Maustaste und komprimieren Sie "WhateverProject".
Auf diese Weise erhalten Sie ein erstelltes Image des gesamten Projekts, einschließlich der vollständigen Projekt- und Arbeitsbereichseinstellungen, die zum Erstellen der App verwendet wurden, sowie Binärdistributionen (wie Sparkle, proprietäre SDKs wie TestFlight usw.), unabhängig davon, ob CocoaPods verwendet werden oder nicht.
Update: Ich habe es mir anders überlegt und verpflichte mich jetzt
Podfile.lock
zur Quellcodeverwaltung. Ich bin jedoch immer noch der Meinung, dass die Pods selbst Build-Artefakte sind und als solche außerhalb der Quellcodeverwaltung durch eine andere Methode wie Ihren CI-Server oder einen Archivierungsprozess wie oben beschrieben verwaltet werden sollten.quelle
Podfile.lock
: docs.cocoapods.org/guides/working_with_teams.htmlPodfile.lock
ich Pfade zu lokalen Pods backe, hatte ich nicht daran gedacht, sie der Versionskontrolle hinzuzufügen. Jetzt, wo ich darüber nachdenke, unterscheidet es sich jedoch nicht von den lokalen Änderungen, die ich vornehme,Podfile
aber niemals festschreibe. Vielen Dank für den Hinweis.Podfile.lock
Datei erwähnt.Ich bevorzuge es, ein
Pods
Verzeichnis zusammen mitPodfile
undPodfile.lock
um sicherzustellen, dass jeder in meinem Team die Quelle jederzeit auschecken kann und sich um nichts kümmern oder zusätzliche Dinge tun muss, damit es funktioniert.Dies hilft auch in einem Szenario, in dem Sie einen Fehler in einem der Pods behoben oder ein Verhalten gemäß Ihren Anforderungen geändert haben. Diese Änderungen sind jedoch auf anderen Computern nicht verfügbar, wenn sie nicht festgeschrieben werden.
Und um unnötige Verzeichnisse zu ignorieren:
quelle
Ich muss sagen, ich bin ein Fan davon, Pods in das Repository zu schreiben. Wenn Sie einem bereits erwähnten Link folgen, erhalten Sie eine gute .gitignore-Datei, mit der Sie Ihre Xcode-Projekte für iOS aufrufen können, um Pods zuzulassen, aber Sie können sie auch einfach ausschließen, wenn Sie dies wünschen: https://github.com/github/gitignore/ blob / master / Objective-C.gitignore
Meine Argumentation, ein Fan des Hinzufügens von Pods zum Repository zu sein, ist aus einem fundamentalen Grund, den niemand zu verstehen scheint. Was passiert, wenn eine Bibliothek, von der unser Projekt so abhängig ist, plötzlich aus dem Web entfernt wird?
NB ... Bitte beachten Sie, dass der 'Master'-Zweig für die Entwicklung nur Beispiele sind. Offensichtlich sollten' Master'-Zweige in Versionskontrollsystemen jederzeit sauber und bereitstellbar / baubar gehalten werden
Ich denke, aus diesen Gründen sind Snapshots in Ihren Code-Repositorys sicherlich besser als eine strenge Größe des Repositorys. Und wie bereits erwähnt, gibt Ihnen die Datei podfile.lock - während die Versionskontrolle erfolgt - einen guten Verlauf Ihrer Pod-Versionen.
Letztendlich ist Zeit von entscheidender Bedeutung, wenn Sie eine dringende Frist und ein knappes Budget haben. Wir müssen so einfallsreich wie möglich sein und keine Zeit mit strengen Ideologien verschwenden und stattdessen eine Reihe von Tools für die Zusammenarbeit nutzen - um unser Leben effizienter zu gestalten.
quelle
Am Ende liegt es an Ihnen, welchen Ansatz Sie wählen.
Das denkt das Cocoapods-Team darüber:
Persönlich möchte ich Pods als node_modules fernhalten, wenn ich Node oder bower_components verwende, wenn ich Bower verwende . Dies gilt für fast jeden Abhängigkeitsmanager da draußen und ist auch die Philosophie hinter Git-Submodulen .
Es gibt jedoch manchmal Fälle, in denen Sie sich über den Stand der Technik einer bestimmten Abhängigkeit wirklich sicher sein möchten. Auf diese Weise tragen Sie die Abhängigkeit in Ihrem Projekt. Natürlich gibt es einige Nachteile, die auftreten, wenn Sie dies tun, aber Bedenken gelten nicht nur für Cocoapods, sondern auch für jeden Abhängigkeitsmanager da draußen.
Unten finden Sie eine gute Vor- / Nachteile- Liste des Cocoapods-Teams sowie den vollständigen Text des zuvor erwähnten Zitats.
Cocoapods-Team: Soll ich das Pods-Verzeichnis in die Quellcodeverwaltung einchecken?
quelle
Es kommt persönlich darauf an:
Warum Pods Teil des Repos sein sollten (unter Quellcodeverwaltung) und nicht ignoriert werden sollten
pods.xcodeproj
Einstellungen sind ebenfalls Teil der Quellcodeverwaltung. Dies bedeutet , dass diese Einstellungen gespeichert werden, wenn Sie beispielsweise das Projekt in habenswift 4
, aber einige Pods in sein müssen,swift 3.2
da sie noch nicht aktualisiert wurden. Andernfalls würde derjenige, der das Repo geklont hat, Fehler haben.pod install
, das Gegenteil ist nicht möglich.Einige Nachteile: größeres Repository, verwirrende Unterschiede (hauptsächlich für Teammitglieder), möglicherweise mehr Konflikte.
quelle
Für mich ist die größte Sorge die Zukunftssicherung Ihrer Quelle. Wenn Sie vorhaben, dass Ihr Projekt eine Weile dauert und CocoaPods jemals verschwinden oder die Quelle eines der Pods ausfällt, haben Sie kein Glück, wenn Sie versuchen, frisch aus einem Archiv zu erstellen.
Dies könnte durch regelmäßige vollständige Quellarchive gemildert werden.
quelle
Überprüfen Sie die Pods.
Ich denke, dies sollte ein Grundsatz der Softwareentwicklung sein
Warum?
CocoaPods oder andere externe Bibliotheken können sich ändern, was zu Problemen führen kann. Oder sie können verschoben oder umbenannt oder ganz entfernt werden. Sie können sich nicht auf das Internet verlassen, um Dinge für Sie zu speichern. Ihr Laptop ist möglicherweise gestorben und es gibt einen kritischen Fehler in der Produktion, der behoben werden muss. Der Hauptentwickler könnte von einem Bus angefahren werden und sein Ersatz muss in Eile starten. Und ich wünschte, das letzte wäre ein theoretisches Beispiel, aber es geschah tatsächlich bei einem Startup, mit dem ich zusammen war. RUHE IN FRIEDEN.
Realistisch gesehen können Sie nicht ALLE Abhängigkeiten einchecken. Sie können kein Image des Computers einchecken, mit dem Sie Builds erstellt haben. Sie können die genaue Version des Compilers nicht einchecken. Und so weiter. Es gibt realistische Grenzen. Aber checken Sie alles ein, was Sie können - wenn Sie dies nicht tun, wird Ihr Leben nur schwieriger. Und das wollen wir nicht.
Letztes Wort: Pods sind keine Artefakte. Build-Artefakte werden aus Ihren Builds generiert. Ihr Build verwendet Pods und generiert sie nicht. Ich bin mir nicht mal sicher, warum dies diskutiert werden muss.
quelle
Vorteile, nicht in
Pods/
die Versionskontrolle einzuchecken (in subjektiver Reihenfolge der Wichtigkeit):pod install
die Änderungen verschließen könnte.Podfile
und demPods/
Verzeichnis werden bei Teammitgliedern schneller festgestellt. Wenn Sie eincheckenPods/
und beispielsweise eine Version in der aktualisierenPodfile
, aber vergessen,pod install
die Änderungen an auszuführen oder einzuchecken,Pods/
fällt es Ihnen viel schwerer, die Ursache der Diskrepanz zu erkennen. WennPods/
nicht eingecheckt, müssen Siepod install
trotzdem immer ausführen .JAR
Dateien.venv/
(virtuelle Umgebungen) undnode_modules/
werden niemals in die Versionskontrolle einbezogen. Wenn wir völlig agnostisch über die Frage waren, nicht eincheckenPods
wäre der Standard auf Präzedenzfall basiert.Nachteile von nicht in der Kontrolle
Pods/
pod install
wenn Sie Zweige wechseln oder Commits zurücksetzen.pod install
.pod install
, und die Quelle der Pods muss verfügbar sein.Zusammengefasst ohne das
Pods
Verzeichnis ist eine Leitplanke gegen weitere schlechte Praktiken. Das Einfügen desPods
Verzeichnisses erleichtert das Ausführen des Projekts. Ich bevorzuge das erstere gegenüber dem letzteren. Sie müssen nicht jede neue Person in einem Projekt darüber informieren, was nicht zu tun ist, wenn es überhaupt keine Möglichkeit gibt, bestimmte Fehler zu machen. Ich mag auch die Idee, eine separate Versionskontrolle für die zu haben,Pods
die die Nachteile lindert.quelle
Theoretisch sollten Sie im Pods-Verzeichnis nachsehen. In der Praxis wird es nicht immer funktionieren. Viele Pods überschreiten die Größenbeschränkung von Github-Dateien bei weitem. Wenn Sie also Github verwenden, treten Probleme beim Überprüfen des Pods-Verzeichnisses auf.
quelle
Obwohl die Cocoapods-Organisation uns ermutigt, das
Pods/
Verzeichnis zu verfolgen , liegt es an den Entwicklern, anhand dieser Vor- und Nachteile zu entscheiden, ob sie dies tun oder nicht: http://guides.cocoapods.org/using/using-cocoapods.html # sollte-ich-das-Pods-Verzeichnis-in-Quellcodeverwaltung überprüfenPersönlich verfolge ich den
Pods/
Ordner normalerweise nur für Projekte, an denen ich eine Weile nicht mehr arbeiten werde. Auf diese Weise kann jeder Entwickler schnell darauf zugreifen und die Arbeit mit der richtigen Version der Cocoapods fortsetzen.Andererseits denke ich, dass der Commit-Verlauf sauberer wird und es einfacher ist, den Code zusammenzuführen und den Code einer anderen Person zu überprüfen, wenn Sie den
Pods/
Ordner nicht verfolgen . Normalerweise stelle ich die Version der Cocoapod-Bibliothek bei der Installation ein, um sicherzustellen, dass jeder das Projekt mit denselben Versionen wie I installieren kann.Wenn das
Pods/
Verzeichnis verfolgt wird, müssen alle Entwickler dieselbe Version von Cocoapods verwenden, um zu verhindern, dass jedes Mal, wenn wirpod install
einen Pod hinzufügen / entfernen, Dutzende von Dateien geändert werden .Fazit : Wenn Sie den
Pods/
Ordner verfolgen , ist es einfacher, das Projekt abzurufen. Wenn Sie es nicht verfolgen, ist es einfacher, es zu verbessern.quelle
Ein guter Weg, dies zu strukturieren, wäre es, das Verzeichnis "Pods" als Git-Submodul / separates Projekt zu haben. Hier ist der Grund dafür.
Wenn Sie Pods in Ihrem Projekt-Repo haben, kann dies bei der Arbeit mit mehreren Entwicklern zu SEHR GROSSEN Unterschieden bei Pull-Anforderungen führen, bei denen es fast unmöglich ist, die tatsächliche Arbeit zu sehen, die von Personen geändert wurde (denken Sie an mehrere Hunderttausende von Dateien, die für Bibliotheken geändert wurden, und nur an a wenige haben sich im eigentlichen Projekt geändert).
Ich sehe das Problem, nichts für Git zu tun, da die Person, die die Bibliothek besitzt, sie jederzeit herunterfahren kann und Sie im Wesentlichen SOL sind. Dies löst auch das Problem.
quelle
Ob Sie Ihren Pods-Ordner einchecken oder nicht, liegt bei Ihnen, da die Workflows von Projekt zu Projekt unterschiedlich sind. Wir empfehlen, dass Sie das Pods-Verzeichnis unter Quellcodeverwaltung halten und es nicht zu Ihrem .gitignore hinzufügen. Aber letztendlich liegt diese Entscheidung bei Ihnen:
Vorteile der Überprüfung im Pods-Verzeichnis
Vorteile des Ignorierens des Pods-Verzeichnisses
quelle