Como atualizar um único pod sem tocar em outras dependências

202

Eu entendo que o comando a seguir irá atualizar um único pod: pod update <podname>. No entanto, isso também atualiza as dependências de outros pods (pods que não foram incluídos no comando update) que você instalou anteriormente. Existe uma maneira de atualizar um único pod e deixar todas as outras dependências em paz?

ken
fonte
1
Para entender a diferença, você deve primeiro entender o que podfile.locké. Veja o link e o vídeo que ele faz referência.
Honey

Respostas:

286

Verifique se você tem a versão mais recente do CocoaPods instalada. $ pod update PODfoi introduzido recentemente.

Consulte este tópico de problema para obter mais informações :

$ pod update

Quando você executa pod update SomePodName, o CocoaPods tenta encontrar uma versão atualizada do pod SomePodName, sem levar em conta a versão listada em Podfile.lock. Ele atualizará o pod para a versão mais recente possível (desde que corresponda às restrições de versão no seu Podfile).

Se você executar a atualização do pod sem qualquer nome, o CocoaPods atualizará todos os pods listados no seu Podfile para a versão mais recente possível.

mattt
fonte
19
Obrigado pela resposta @mattt, eu tenho a versão mais recente do CocoaPods (0.34.2) e tentei $ pod update SomePodName. No entanto, há alguns casos em que o CocoaPods também tenta atualizar as dependências de outros pods. Para encurtar a história, SomePodName não é o único pod que será atualizado em alguns casos.
ken
2
@mattt, você não sabe como instalar pod específico sem atualizar os já instalados?
Shamsiddin
1
quando eu próprio modifico alguma dependência e a executo, pod installela volta à sua versão original. Mas eu não quero perder minhas alterações
Shamsiddin
2
@mattt, as dependências às quais eu estava me referindo não eram as dependências do pod que estava sendo atualizado. Acho que não estruturei a pergunta suficientemente bem, mas supondo que atualizamos o pod A, alguns outros pods que não são dependentes do pod A também são atualizados. Esta é uma velha questão pela maneira por isso não tenho certeza se isso foi corrigido desde então ..
ken
8
pod updatetoca tudo. Não faz o que diz na lata, e é muito frustrante. Aleatoriamente remove cabeçalhos de outros pods você não contei a ele para tocar, etc.
Lucas
185

Para instalar um único pod sem atualizar os existentes-> Adicione esse pod ao seu Podfile e use:

pod install --no-repo-update

Para remover / atualizar um pod específico, use:

pod update POD_NAME

Testado!

atulkhatri
fonte
49

É 2015

Então porque pod update SomePod toca em tudo nas versões mais recentes dos cocoapods, encontrei uma solução alternativa.

Siga os próximos passos:

  1. Retire SomePoddoPodfile

  2. Corre pod install

os pods agora serão removidos SomePoddo nosso projeto e do Podfile.lockarquivo.

  1. Coloque de volta SomePodnoPodfile

  2. Corra pod installnovamente

Desta vez, a versão mais recente do nosso pod será instalada e salva no Podfile.lock.

Danpe
fonte
Você também pode usar o truque eu respondo aqui stackoverflow.com/questions/29901337/...
Qiulang
17
Você também pode fazer pod update somepod anotherpod thirdpodpara atualizar vários pods de uma só vez :)
Entea
Isso é muito inteligente. Você as executa em duas etapas independentes e confia no podfile.lock para manter outras dependências intactas. Eu só me pergunto se SomePodé atualizado para suas dependências mais recentes, não atualizaria uma dependência compartilhada anotherPodpara a mais recente? Isso não vai acontecer, independentemente do conteúdo do podlock? Caso contrário, não será capaz de satisfazer os requisitos deSomePod
Honey
29

apenas dizendo:

pod install - para instalar novos pods,

pod update - para atualizar os pods existentes,

pod update podName - para atualizar apenas pod específico sem tocar em outros pods,

pod update podName versionNum - para atualizar / fazer downgrade de um pod específico sem tocar em outros pods

yonivav
fonte
Você quis dizer em podvez de git?
Ken
Às vezes não, não sei por quê. Solução de treino: 1. Remova o pod específico da instalação do Podfile 2 .pod 3. Adicione novamente o pod específico ao Podfile 4. pod install
yonivav
21

Apenas um pequeno aviso.

pod update POD_NAME

funcionará apenas se esse pod já estiver instalado. Caso contrário, você terá que atualizar todos eles com

pod update

comando

Neftanic
fonte
Você ainda pode usar pod installprimeiro, o que instalará apenas os que estão faltando, sem tocar nos outros. Embora não exista nenhum caso de uso para atualizar um pod que você não instalou, existe?
Aramusss
18

tl; dr use:

pod update podName

Por quê? Leia abaixo.

  • pod updateNÃO respeitará o podfile.lock. Ele irá substituí-lo.
  • pod install respeitará o podfile.lock

Este diagrama ajuda a entender melhor as diferenças:

insira a descrição da imagem aqui


O principal problema vem do ~>operador otimista, também conhecido como .

Usar versões exatas no arquivo Podfilenão é suficiente

Alguns podem pensar que, especificando versões exatas de seus pods em seus Podfile , comopod 'A', '1.0.0' , é suficiente para garantir que cada usuário tenha a mesma versão das outras pessoas da equipe.

Eles podem até usar pod update, mesmo quando apenas adicionam um novo pod, pensando que nunca arriscaria atualizar outros pods porque eles estão fixos a uma versão específica noPodfile .

Mas, na verdade, isso não é suficiente para garantir que o usuário1 e o usuário2 em nosso cenário acima sempre obtenham exatamente a mesma versão de todos os seus pods.

Um exemplo típico é se o pod Atem uma dependência do pod A2- declarado em A.podspeccomo dependency 'A2', '~> 3.0'. Nesse caso, o uso do pod 'A', '1.0.0'no seu Podfile forçará o usuário1 e o usuário2 a sempre usar a versão 1.0.0 do pod A, mas:

  • user1 pode acabar com o pod A2na versão 3.4(porque isso foiA2 a versão mais recente da época)
  • enquanto que o user2 é executado pod installao ingressar no projeto posteriormente, eles podem obter o pod A2na versão 3.5(porque o mantenedor de A2pode ter lançado uma nova versão nesse meio tempo). É por isso que a única maneira de garantir que cada trabalho membro da equipe com as mesmas versões de todo o pod em cada computador é usar o Podfile.locke devidamente usar pod installvs. pod update.

O trecho acima foi todo derivado de instalação pod vs. da atualização do pod

Eu também recomendo assistir o que podfile.lockfaz

Mel
fonte
9

Estou usando cocoapods version 1.0.1e usando pod update name-of-podfunciona perfeitamente. Nenhum outro pod é atualizado, apenas o específico que você digita.

user3344977
fonte
2

Isso é um pouco estranho e provavelmente não é com isso que o OP estava lidando, mas pod update <podname> não funcionará em todos os casos se você estiver usando um pod local no seu computador.

Nessa situação, a única coisa que acionará o pod updatetrabalho é se houver uma alteração no arquivo podspec. Entretanto, fazer uma alteração também permitirápod install trabalhar também.

Nessa situação, você pode modificar apenas algo menor, como a descrição ou o resumo, por uma letra e, em seguida, executar o comando de instalação ou atualização com êxito.

CodeBender
fonte