Comment mettre à jour un seul pod sans toucher à d'autres dépendances

202

Je comprends que la commande suivante mettra à jour un pod: pod update <podname>. Cependant, cela met également à jour les dépendances des autres modules (modules qui n'étaient pas inclus dans la commande de mise à jour) que vous avez précédemment installés. Existe-t-il un moyen de mettre à jour un seul pod et de laisser toutes les autres dépendances tranquilles?

ken
la source
1
Pour comprendre la différence, vous devez d' abord comprendre ce qu'est un podfile.lock. Voir le lien et la vidéo auxquels il fait référence.
Honey

Réponses:

286

Assurez-vous que la dernière version de CocoaPods est installée. $ pod update PODa été introduit récemment.

Consultez ce fil de discussion pour plus d'informations :

$ pod update

Lorsque vous exécutez pod update SomePodName, CocoaPods essaiera de trouver une version mise à jour du pod SomePodName, sans prendre en compte la version répertoriée dans Podfile.lock. Il mettra à jour le pod vers la dernière version possible (tant qu'il correspond aux restrictions de version de votre Podfile).

Si vous exécutez la mise à jour du pod sans aucun nom de pod, CocoaPods mettra à jour chaque pod répertorié dans votre Podfile vers la dernière version possible.

mattt
la source
19
Merci pour la réponse @mattt, j'ai la dernière version de CocoaPods (0.34.2) et j'ai essayé $ pod update SomePodName. Cependant, dans certains cas, CocoaPods tentera également de mettre à jour les dépendances des autres pods. Pour faire court, SomePodName n'est pas le seul pod qui sera mis à jour dans certains cas.
ken
2
@mattt, ne savez-vous pas comment installer un pod spécifique sans mettre à jour ceux déjà installés?
Shamsiddin
1
lorsque je modifie moi-même une dépendance et l'exécute, pod installil revient à sa version d'origine. Mais je ne veux pas perdre mes changements
Shamsiddin
2
@mattt, les dépendances auxquelles je faisais référence n'étaient pas les dépendances du pod en cours de mise à jour. Je pense que je n'ai pas bien structuré la question, mais en supposant que nous mettons à jour le pod A, certains autres pods qui ne sont pas les dépendances du pod A sont également mis à jour. C'est une vieille question d'ailleurs, donc
ken
8
pod updatetouche tout. Il ne fait pas ce qu'il dit sur l'étain et c'est très frustrant. Supprime au hasard les en-têtes des autres pods auxquels vous ne lui avez pas dit de toucher, etc.
Luke
185

Pour installer un seul pod sans mettre à jour les pods existants-> Ajoutez ce pod à votre Podfile et utilisez:

pod install --no-repo-update

Pour supprimer / mettre à jour un pod spécifique, utilisez:

pod update POD_NAME

Testé!

atulkhatri
la source
49

C'est 2015

Donc, parce que pod update SomePodtout touche dans les dernières versions des cocoapods, j'ai trouvé une solution de contournement.

Suivez les étapes suivantes:

  1. Supprimer SomePodduPodfile

  2. Courir pod install

les pods seront désormais supprimés SomePodde notre projet et du Podfile.lockfichier.

  1. Remettre SomePoddans lePodfile

  2. Courez à pod installnouveau

Cette fois, la dernière version de notre pod sera installée et enregistrée dans le Podfile.lock.

Danpe
la source
Vous pouvez également utiliser l'astuce à laquelle je réponds ici stackoverflow.com/questions/29901337/…
Qiulang
17
Vous pouvez également faire pod update somepod anotherpod thirdpodpour mettre à jour plusieurs pods à la fois :)
Entea
C'est très intelligent. Vous les effectuez en deux étapes indépendantes et vous vous fiez au podfile.lock pour garder intactes les autres dépendances. Je me demande simplement si la SomePodmise à jour de ses dernières dépendances ne mettrait-elle pas à jour une dépendance partagée de anotherPodla dernière? Cela ne se produira-t-il pas quel que soit le contenu de podlock? Sinon, il ne pourra pas satisfaire aux exigences deSomePod
Honey
29

juste dire:

pod install - pour l'installation de nouveaux pods,

pod update - pour la mise à jour des pods existants,

pod update podName - pour mettre à jour uniquement un pod spécifique sans toucher à d'autres pods,

pod update podName versionNum - pour mettre à jour / DOWNGRADING pod spécifique sans toucher à d'autres pods

yonivav
la source
Voulez-vous dire podau lieu de git?
ken
Parfois non, je ne sais pas pourquoi. Solution d'entraînement: 1. Retirez le pod spécifique de l'installation de Podfile 2 .pod 3. Ré-ajoutez le pod spécifique à Podfile 4. Installation du pod
yonivav
21

Juste un petit avis.

pod update POD_NAME

ne fonctionnera que si ce module a déjà été installé. Sinon, vous devrez tous les mettre à jour avec

pod update

commander

Neftanic
la source
Vous pouvez toujours utiliser en pod installpremier, qui n'installera que le (s) manquant (s), sans toucher les autres. Bien qu'il n'y ait aucun cas d'utilisation pour vouloir mettre à jour un pod que vous n'avez pas installé, y a-t-il?
aramusss
18

tl; dr utiliser:

pod update podName

Pourquoi? Lire ci-dessous.

  • pod updatene respectera PAS le podfile.lock. Il la remplacera.
  • pod install respectera la podfile.lock

Ce diagramme permet de mieux comprendre les différences:

entrez la description de l'image ici


Le problème majeur vient de l' ~>opérateur aka optimiste .

L'utilisation de versions exactes dans le Podfilen'est pas suffisante

Certains pourraient penser qu'en spécifiant les versions exactes de leurs pods dans leur Podfile, comme pod 'A', '1.0.0', c'est suffisant pour garantir que chaque utilisateur aura la même version que les autres personnes de l'équipe.

Ensuite, ils pourraient même utiliser pod update, même lors de l'ajout d'un nouveau pod, pensant que cela ne risquerait jamais de mettre à jour d'autres pods car ils sont fixés sur une version spécifique dans le Podfile.

Mais en fait, cela ne suffit pas pour garantir que user1 et user2 dans notre scénario ci-dessus obtiendront toujours la même version exacte de tous leurs pods.

Un exemple typique est si le pod Aa une dépendance sur le pod A2- déclaré en A.podspectant que dependency 'A2', '~> 3.0'. Dans ce cas, l'utilisation de pod 'A', '1.0.0'dans votre Podfile forcera en effet user1 et user2 à toujours utiliser la version 1.0.0 du pod A, mais:

  • user1 pourrait se retrouver avec pod A2dans la version 3.4(parce que c'était A2la dernière version de l'époque)
  • tandis que lorsque user2 s'exécute pod installen rejoignant le projet plus tard, ils peuvent obtenir le pod A2dans la version 3.5(car le responsable de A2peut avoir publié une nouvelle version entre-temps). C'est pourquoi la seule façon de s'assurer que chaque membre de l'équipe travaille avec les mêmes versions de tous les pods sur l'ordinateur de chacun est d'utiliser Podfile.locket d'utiliser correctement pod installvs pod update..

L'extrait ci-dessus est dérivé de l' installation du pod contre la mise à jour du pod

Je recommande également fortement de regarder ce que podfile.lockfait

Mon chéri
la source
9

J'utilise cocoapods version 1.0.1et utilise des pod update name-of-podœuvres parfaitement. Aucun autre module n'est mis à jour, juste celui que vous entrez.

user3344977
la source
2

C'est un peu aberrant et ce n'est probablement pas ce à quoi l'OP était confronté, mais pod update <podname>ne fonctionnera pas dans tous les cas si vous utilisez un pod local sur votre ordinateur.

Dans cette situation, la seule chose qui va se déclencher pod updateest s'il y a un changement dans le fichier podspec. Cependant, faire un changement permettra également pod installde travailler également.

Dans cette situation, vous pouvez simplement modifier quelque chose de mineur tel que la description ou le résumé par une lettre, puis vous pouvez exécuter la commande d'installation ou de mise à jour avec succès.

CodeBender
la source