Come aggiornare un singolo pod senza toccare altre dipendenze


202

Capisco che il seguente comando aggiornerà un singolo pod: pod update <podname>. Tuttavia, ciò aggiorna anche le dipendenze di altri pod (pod non inclusi nel comando di aggiornamento) precedentemente installati. C'è un modo per aggiornare un singolo pod e lasciare da sole tutte le altre dipendenze?


1
Per capire la differenza devi prima capire cos'è a podfile.lock. Vedi il link e il video a cui fa riferimento.
Miele,

Risposte:


286

Assicurati di avere installato l'ultima versione di CocoaPods. $ pod update PODè stato introdotto di recente.

Vedi questa discussione per ulteriori informazioni :

$ pod update

Durante l'esecuzione pod update SomePodName, CocoaPods proverà a trovare una versione aggiornata del pod SomePodName, senza tenere conto della versione elencata in Podfile.lock. Aggiornerà il pod all'ultima versione possibile (purché corrisponda alle restrizioni di versione nel tuo Podfile).

Se si esegue l'aggiornamento pod senza alcun nome pod, CocoaPods aggiornerà tutti i pod elencati nel Podfile all'ultima versione possibile.


19
Grazie per la risposta @mattt, ho l'ultima versione di CocoaPods (0.34.2) e ci ho provato $ pod update SomePodName. Tuttavia, ci sono alcuni casi in cui CocoaPods proverà anche ad aggiornare le dipendenze di altri pod. Per farla breve, SomePodName non è l'unico pod che verrà aggiornato in alcuni casi.
Ken,

2
@mattt, non sai come installare pod specifici senza aggiornare quelli già installati?
Shamsiddin,

1
quando io stesso modifico alcune dipendenze ed pod installeseguo ritorna alla sua versione originale. Ma non voglio perdere i miei cambiamenti
Shamsiddin,

2
@mattt, le dipendenze a cui mi riferivo non erano le dipendenze del pod che veniva aggiornato. Penso di non aver strutturato la domanda abbastanza bene, ma supponendo che aggiorniamo il pod A, anche alcuni altri pod che non sono le dipendenze del pod A vengono aggiornati. Questa è una vecchia domanda tra l'altro, quindi non sono sicuro che sia stato risolto da allora ...
Ken

8
pod updatetocca tutto. Non fa quello che dice sulla scatola, ed è molto frustrante. Rimuove casualmente le intestazioni dagli altri pod che non gli hai detto di toccare, ecc.
Luca

185

Per installare un singolo pod senza aggiornare quelli esistenti-> Aggiungi quel pod al tuo Podfile e usa:

pod install --no-repo-update

Per rimuovere / aggiornare un pod specifico utilizzare:

pod update POD_NAME

Provato!


49

È il 2015

Quindi, poiché pod update SomePodtocca tutto nelle ultime versioni dei cocoapodi, ho trovato una soluzione alternativa.

Segui i passaggi seguenti:

  1. Rimuovere SomePoddalPodfile

  2. Correre pod install

i pod verranno ora rimossi SomePoddal nostro progetto e dal Podfile.lockfile.

  1. Rimetti SomePodnelPodfile

  2. Corri di pod installnuovo

Questa volta l'ultima versione del nostro pod verrà installata e salvata in Podfile.lock.


È inoltre possibile utilizzare il trucco rispondo qui stackoverflow.com/questions/29901337/...
Qiulang

17
Puoi anche fare pod update somepod anotherpod thirdpodper aggiornare più pod contemporaneamente :)
Entea

Questo è molto intelligente. Li stai facendo in due passaggi indipendenti e fai affidamento sul podfile.lock per mantenere intatte le altre dipendenze. Mi chiedo solo se l' SomePodaggiornamento alle sue ultime dipendenze non aggiornerebbe una dipendenza condivisa anotherPodcon l'ultima? Non succederà a prescindere da cosa c'è nel podlock? Altrimenti non sarà in grado di soddisfare i requisiti diSomePod
Honey

29

sto solo dicendo:

pod install - per l'installazione di nuovi pod,

pod update - per l'aggiornamento di pod esistenti,

pod update podName - per aggiornare solo un pod specifico senza toccare altri pod,

pod update podName versionNum - per aggiornare / SCARICARE pod specifici senza toccare altri pod


Intendevi podinvece di git?
Ken,

A volte no, non so perché. Soluzione di allenamento: 1. Rimuovere il pod specifico da Podfile 2 .pod install 3. Aggiungere nuovamente pod specifico a Podfile 4. pod install
yonivav

21

Solo un piccolo avviso.

pod update POD_NAME

funzionerà solo se questo pod è già stato installato. Altrimenti dovrai aggiornarli tutti con

pod update

comando


Puoi ancora utilizzare pod installprima, che installerà solo quelli mancanti, senza toccare gli altri. Anche se non c'è alcun caso utile per voler aggiornare un pod che non hai installato, vero?
Aramusss,

18

tl; dr usa:

pod update podName

Perché? Leggere sotto.

  • pod updateNON rispetterà il podfile.lock. Lo sovrascriverà.
  • pod install rispetterà il podfile.lock

Questo diagramma aiuta a comprendere meglio le differenze:

inserisci qui la descrizione dell'immagine


Il problema principale viene dall'operatore ~>ottimista aka .

Utilizzando versioni esatte in Podfile non è abbastanza

Alcuni potrebbero pensare che specificando le versioni esatte dei loro pod nel loro Podfile, comepod 'A', '1.0.0' , è sufficiente per garantire che ogni utente abbia la stessa versione delle altre persone del team.

Quindi potrebbero persino utilizzare pod update, anche quando si aggiunge un nuovo pod, pensando che non rischierebbe mai di aggiornare altri pod perché sono fissi su una versione specifica nelPodfile .

In realtà, ciò non è sufficiente a garantire che user1 e user2 nel nostro scenario sopra ottengano sempre la stessa versione esatta di tutti i loro pod.

Un esempio tipico è se il contenitore Aha una dipendenza da pod A2- ha dichiarato in A.podspeccome dependency 'A2', '~> 3.0'. In tal caso, l'uso del pod 'A', '1.0.0'nel tuo Podfile forzerà effettivamente user1 e user2 a utilizzare sempre la versione 1.0.0 del pod A, ma:

  • user1 potrebbe finire con pod A2nella versione 3.4(perché quello eraA2 l'ultima versione in quel momento)
  • mentre quando user2 viene eseguito pod installquando si uniscono al progetto in un secondo momento, potrebbero ottenere pod A2nella versione 3.5(perché il manutentore di A2potrebbe aver rilasciato una nuova versione nel frattempo). Ecco perché l'unico modo per garantire che ogni membro del team di lavoro con le stesse versioni di tutti i pod su ogni computer è di usare la Podfile.locke corretto usare pod installcontro pod update.

L'estratto sopra è stato derivato dall'installazione pod e dall'aggiornamento pod

Ho anche consigliare vivamente a guardare quello che fa un podfile.lockDo


9

Sto usando cocoapods version 1.0.1e usando pod update name-of-podfunziona perfettamente. Nessun altro pod viene aggiornato, solo quello specifico inserito.


2

Questo è un po 'anomalo e probabilmente non sarà quello con cui stava operando l'OP, ma pod update <podname>non funzionerà in tutti i casi se si utilizza un pod locale sul computer.

In questa situazione, l'unica cosa che si innescherà pod updatedi funzionare è se c'è una modifica nel file podspec. Tuttavia, apportare una modifica consentirà anche pod installdi funzionare.

In questa situazione, puoi semplicemente modificare qualcosa di minore come la descrizione o il riepilogo con una lettera, quindi puoi eseguire correttamente il comando installa o aggiorna.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.