So aktualisieren Sie einen einzelnen Pod, ohne andere Abhängigkeiten zu berühren

201

Ich verstehe, dass der folgende Befehl einen einzelnen Pod aktualisiert : pod update <podname>. Dadurch werden jedoch auch die Abhängigkeiten anderer Pods (Pods, die nicht im Update-Befehl enthalten waren) aktualisiert, die Sie zuvor installiert haben. Gibt es eine Möglichkeit, einen einzelnen Pod zu aktualisieren und alle anderen Abhängigkeiten in Ruhe zu lassen?

Ken
quelle
1
Um den Unterschied zu verstehen, müssen Sie zuerst verstehen, was a podfile.lockist. Siehe den Link und das Video, auf das verwiesen wird.
Honey

Antworten:

285

Stellen Sie sicher, dass Sie die neueste Version von CocoaPods installiert haben. $ pod update PODwurde vor kurzem eingeführt.

Weitere Informationen finden Sie in diesem Problem-Thread :

$ pod update

pod update SomePodNameWährend der Ausführung versucht CocoaPods, eine aktualisierte Version des Pods SomePodName zu finden, ohne die in aufgeführte Version zu berücksichtigen Podfile.lock. Der Pod wird auf die neueste Version aktualisiert (sofern er den Versionsbeschränkungen in Ihrer Pod-Datei entspricht).

Wenn Sie ein Pod-Update ohne Pod-Namen ausführen, aktualisiert CocoaPods jeden in Ihrer Pod-Datei aufgeführten Pod auf die neueste mögliche Version.

matt
quelle
19
Vielen Dank für die Antwort @mattt, ich habe die neueste Version von CocoaPods (0.34.2) und habe es versucht $ pod update SomePodName. In einigen Fällen versucht CocoaPods jedoch auch, die Abhängigkeiten anderer Pods zu aktualisieren. Kurz gesagt, SomePodName ist nicht der einzige Pod, der in einigen Fällen aktualisiert wird.
Ken
2
@mattt, wissen Sie nicht, wie Sie einen bestimmten Pod installieren können, ohne bereits installierte zu aktualisieren?
Shamsiddin
1
Wenn ich selbst eine Abhängigkeit ändere und ausführe pod install, wird die ursprüngliche Version wiederhergestellt. Aber ich möchte meine Änderungen nicht verlieren
Shamsiddin
2
@mattt, die Abhängigkeiten, auf die ich mich bezog, waren nicht die Abhängigkeiten des Pods, der aktualisiert wurde. Ich glaube, ich habe die Frage nicht gut genug strukturiert, aber vorausgesetzt, wir aktualisieren Pod A, werden auch einige andere Pods aktualisiert, die nicht die Abhängigkeiten von Pod A sind. Dies ist übrigens eine alte Frage, also nicht sicher, ob dies seitdem behoben wurde ..
Ken
8
pod updateberührt alles. Es macht nicht das, was es verspricht, und es ist sehr frustrierend. Entfernt zufällig Header aus anderen Pods, von denen Sie nicht gesagt haben, dass sie sie berühren sollen usw.
Luke
185

So installieren Sie einen einzelnen Pod, ohne vorhandene zu aktualisieren-> Fügen Sie diesen Pod zu Ihrer Poddatei hinzu und verwenden Sie:

pod install --no-repo-update

So entfernen / aktualisieren Sie einen bestimmten Pod:

pod update POD_NAME

Geprüft!

atulkhatri
quelle
49

Es ist 2015

Da pod update SomePodin den neuesten Versionen von Cocoapods alles berührt wird, habe ich eine Problemumgehung gefunden.

Befolgen Sie die nächsten Schritte:

  1. SomePodAus dem entfernenPodfile

  2. Lauf pod install

Pods werden nun SomePodaus unserem Projekt und aus der Podfile.lockDatei entfernt.

  1. Setzen Sie zurück SomePodin diePodfile

  2. Führen Sie pod installerneut aus

Dieses Mal wird die neueste Version unseres Pods installiert und im gespeichert Podfile.lock.

Danpe
quelle
Sie können auch den Trick verwenden, den ich hier beantworte stackoverflow.com/questions/29901337/…
Qiulang
17
Sie können auch pod update somepod anotherpod thirdpodmehrere Pods gleichzeitig aktualisieren :)
Entea
Das ist sehr klug. Sie führen sie in zwei unabhängigen Schritten aus und verlassen sich auf podfile.lock, um andere Abhängigkeiten intakt zu halten. Ich frage mich nur, ob SomePodeine aktualisierte Abhängigkeit von anotherPodden neuesten Abhängigkeiten nicht eine gemeinsame Abhängigkeit von den neuesten aktualisiert . Wird das nicht passieren, unabhängig davon, was sich im Podlock befindet? Andernfalls kann es die Anforderungen vonSomePod
Honey
28

nur sagen:

pod install - zum Installieren neuer Pods,

pod update - zum Aktualisieren vorhandener Pods,

pod update podName - zum Aktualisieren nur bestimmter Pods, ohne andere Pods zu berühren,

pod update podName versionNum - zum Aktualisieren / DOWNGRADEN eines bestimmten Pods, ohne andere Pods zu berühren

yonivav
quelle
Meinten Sie podstatt git?
Ken
Manchmal nicht, ich weiß nicht warum. Trainingslösung: 1. Entfernen Sie den spezifischen Pod aus Podfile 2 .pod install 3. Fügen Sie den spezifischen Pod erneut zu Podfile 4 hinzu. Pod install
yonivav
21

Nur eine kleine Notiz.

pod update POD_NAME

funktioniert nur, wenn dieser Pod bereits installiert wurde. Andernfalls müssen Sie alle mit aktualisieren

pod update

Befehl

Neftanic
quelle
Sie können weiterhin pod installzuerst verwenden, wodurch nur die fehlenden installiert werden, ohne die anderen zu berühren. Obwohl es keinen Anwendungsfall gibt, einen Pod zu aktualisieren, den Sie nicht installiert haben, gibt es einen?
Aramusss
18

tl; dr verwenden:

pod update podName

Warum? Lesen Sie unten.

  • pod updatewird das NICHT respektieren podfile.lock. Es wird es überschreiben.
  • pod install wird die respektieren podfile.lock

Dieses Diagramm hilft, die Unterschiede besser zu verstehen:

Geben Sie hier die Bildbeschreibung ein


Das Hauptproblem kommt vom ~>alias optimistischen Operator .

Es Podfilereicht nicht aus, genaue Versionen in der zu verwenden

Einige denken möglicherweise, dass die Angabe genauer Versionen ihrer Pods in ihrem PodfileBeispiel pod 'A', '1.0.0'ausreicht, um sicherzustellen, dass jeder Benutzer dieselbe Version wie andere Personen im Team hat.

Dann könnten sie sogar verwenden pod update, selbst wenn sie nur einen neuen Pod hinzufügen, und denken, dass es niemals riskieren würde, andere Pods zu aktualisieren, da sie auf eine bestimmte Version in der festgelegt sind Podfile.

Tatsächlich reicht dies jedoch nicht aus, um sicherzustellen, dass Benutzer1 und Benutzer2 in unserem obigen Szenario immer genau die gleiche Version aller ihrer Pods erhalten.

Ein typisches Beispiel ist, wenn der Pod Aeine Abhängigkeit vom Pod hat A2- deklariert A.podspecals dependency 'A2', '~> 3.0'. In diesem Fall 'A', '1.0.0'zwingt die Verwendung von pod in Ihrer Poddatei tatsächlich Benutzer1 und Benutzer2, beide immer Version 1.0.0 von Pod A zu verwenden, aber:

  • Benutzer1 hat möglicherweise einen Pod A2in der Version 3.4(da dies zu diesem Zeitpunkt A2die neueste Version war).
  • Wenn Benutzer2 ausgeführt wird, pod installwenn er später dem Projekt beitritt , wird möglicherweise ein Pod A2in der Version angezeigt 3.5(da der Betreuer von A2möglicherweise in der Zwischenzeit eine neue Version veröffentlicht hat). Deshalb ist die einzige Möglichkeit , jedes Teammitglied der Arbeit mit den gleichen Versionen aller pod , um sicherzustellen , auf dem Computer jedes ist zu verwenden Podfile.lockund richtig verwenden pod installvs. pod update.

Der obige Auszug wurde alle von Pod-Installation vs. Pod-Update abgeleitet

Ich empfehle auch sehr zu beobachten, was ein podfile.lockmacht

Honig
quelle
9

Ich benutze cocoapods version 1.0.1und benutze pod update name-of-podfunktioniert perfekt. Es werden keine anderen Pods aktualisiert, nur die von Ihnen eingegebenen.

user3344977
quelle
2

Dies ist ein Ausreißer und wahrscheinlich nicht das, womit sich das OP befasst hat, pod update <podname>funktioniert jedoch nicht in allen Fällen, wenn Sie einen lokalen Pod auf Ihrem Computer verwenden.

In dieser Situation wird nur ausgelöst pod update, wenn sich die Podspec-Datei ändert. Wenn Sie jedoch Änderungen vornehmen, können Sie auch pod installarbeiten.

In dieser Situation können Sie nur geringfügige Änderungen wie die Beschreibung oder Zusammenfassung um einen Buchstaben ändern und anschließend den Befehl install oder update erfolgreich ausführen.

CodeBender
quelle