Cómo actualizar un solo pod sin tocar otras dependencias

202

Yo entiendo que el siguiente comando se actualizará una sola vaina: pod update <podname>. Sin embargo, esto también actualiza las dependencias de otros pods (pods que no se incluyeron en el comando de actualización) que haya instalado previamente. ¿Hay alguna manera de actualizar un solo pod y dejar todas las demás dependencias en paz?

conocido
fuente
1
Para entender la diferencia, primero debes entender qué podfile.lockes un . Vea el enlace y el video al que hace referencia.
Miel

Respuestas:

286

Asegúrese de tener instalada la última versión de CocoaPods. $ pod update PODfue introducido recientemente.

Consulte este hilo de problemas para obtener más información :

$ actualización de pod

Cuando ejecute pod update SomePodName, CocoaPods intentará encontrar una versión actualizada del pod SomePodName, sin tener en cuenta la versión que se muestra enPodfile.lock . Actualizará el pod a la última versión posible (siempre que coincida con las restricciones de versión en su Podfile).

Si ejecuta la actualización de pod sin ningún nombre de pod, CocoaPods actualizará cada pod enumerado en su Podfile a la última versión posible.

mattt
fuente
19
Gracias por la respuesta @mattt, tengo la última versión de CocoaPods (0.34.2) y lo intenté $ pod update SomePodName. Sin embargo, hay algunos casos en los que CocoaPods también intentará actualizar las dependencias de otros pods. En pocas palabras, SomePodName no es el único pod que se actualizará en algunos casos.
ken
2
@mattt, ¿no sabes cómo instalar un pod específico sin actualizar los ya instalados?
Shamsiddin
1
cuando yo mismo modifico alguna dependencia y la ejecuto pod installvuelve a su versión original. Pero no quiero perder mis cambios
Shamsiddin
2
@mattt, las dependencias a las que me refería no eran las dependencias del pod que se estaba actualizando. Creo que no estructuré la pregunta lo suficientemente bien, pero suponiendo que actualicemos el pod A, también se actualizan otros pods que no son dependencias del pod A. Por cierto, esta es una vieja pregunta, así que no estoy seguro de si esto se ha solucionado desde entonces ...
Ken
8
pod updatetoca todo No hace lo que dice en la lata, y es muy frustrante. Elimina aleatoriamente los encabezados de otros pods que no le has dicho que toque, etc.
Luke
185

Para instalar un solo pod sin actualizar los existentes-> Agregue ese pod a su Podfile y use:

pod install --no-repo-update

Para eliminar / actualizar un pod específico use:

pod update POD_NAME

Probado

atulkhatri
fuente
49

Es 2015

Entonces, debido a que pod update SomePodtoca todo en las últimas versiones de cocoapods, encontré una solución.

Sigue los siguientes pasos:

  1. Eliminar SomePodde laPodfile

  2. correr pod install

Las vainas ahora se eliminarán SomePodde nuestro proyecto y del Podfile.lockarchivo.

  1. Poner de nuevo SomePoden elPodfile

  2. Corre de pod installnuevo

Esta vez, la última versión de nuestro pod se instalará y guardará en Podfile.lock.

Danpe
fuente
También puede usar el truco que contesto aquí stackoverflow.com/questions/29901337/…
Qiulang
17
También puede hacer pod update somepod anotherpod thirdpodpara actualizar múltiples pods a la vez :)
Entea
Esto es muy inteligente. Los está haciendo en dos pasos independientes y confiando en el podfile.lock para mantener intactas otras dependencias. Me pregunto si SomePodse actualiza a sus últimas dependencias, ¿no actualizaría una dependencia compartida de anotherPodla última? ¿No ocurrirá eso independientemente de lo que haya en el podlock? De lo contrario, no podrá cumplir con los requisitos deSomePod
Honey
29

solo digo:

pod install - para instalar nuevas vainas,

pod update - para actualizar pods existentes,

pod update podName - para actualizar solo un pod específico sin tocar otros pods,

pod update podName versionNum - para actualizar / DESCARGAR un pod específico sin tocar otros pods

yonivav
fuente
¿Quiso decir en podlugar de git?
Ken
A veces no, no sé por qué. Solución de entrenamiento: 1. Elimine el pod específico de Podfile 2 .pod install 3. Vuelva a agregar un pod específico a Podfile 4. pod install
yonivav
21

Solo un pequeño aviso.

pod update POD_NAME

funcionará solo si este pod ya estaba instalado. De lo contrario, deberá actualizarlos todos con

pod update

mando

Neftanico
fuente
Todavía puede usar pod installprimero, que instalará solo los que faltan, sin tocar los otros. Aunque no existe un caso de uso para querer actualizar un pod que no ha instalado, ¿no es así?
aramusss
18

tl; dr uso:

pod update podName

¿Por qué? Lee abajo.

  • pod updateNO respetará el podfile.lock. Lo anulará.
  • pod install respetará el podfile.lock

Este diagrama ayuda a comprender mejor las diferencias:

ingrese la descripción de la imagen aquí


El principal problema proviene del ~>operador optimista aka .

Usar versiones exactas en el Podfileno es suficiente

Algunos podrían pensar que al especificar versiones exactas de sus vainas en su Podfile, comopod 'A', '1.0.0' , es suficiente para garantizar que cada usuario tendrá la misma versión que otras personas en el equipo.

Luego, incluso podrían usar pod update, incluso cuando solo agreguen un nuevo pod, pensando que nunca se arriesgaría a actualizar otros pod porque están fijados a una versión específica en el Podfile.

Pero, de hecho, eso no es suficiente para garantizar que user1 y user2 en nuestro escenario anterior siempre obtengan exactamente la misma versión de todos sus pods.

Un ejemplo típico es si el pod Atiene una dependencia en el pod A2, declarado A.podspeccomo dependency 'A2', '~> 3.0'. En tal caso, el uso de pod 'A', '1.0.0'en su Podfile obligará al usuario1 y al usuario2 a usar siempre la versión 1.0.0 del pod A, pero:

  • user1 podría terminar con pod A2en la versión 3.4(porque eso eraA2 la última versión en ese momento)
  • mientras que cuando user2 se ejecuta pod installal unirse al proyecto más tarde, es posible que obtengan pod A2en la versión 3.5(porque el responsable del mantenimiento A2podría haber lanzado una nueva versión mientras tanto). Es por eso que la única manera de asegurar que cada miembro del equipo de trabajo con las mismas versiones de toda la vaina en cada una de la computadora es utilizar el Podfile.locky utilizar adecuadamente pod installfrente pod update.

El extracto anterior se deriva todo de instalación pod versus la actualización del pod

También recomiendo ver lo que hace un podfile.lockDo

Miel
fuente
9

Estoy usando cocoapods version 1.0.1y usando pod update name-of-podfunciona perfectamente. No se actualizan otros pods, solo el específico que ingresas.

usuario3344977
fuente
2

Esto es un poco atípico y no es probable que sea lo que el OP estaba tratando, pero pod update <podname> no funcionará en todos los casos si está utilizando un pod local en su computadora.

En esta situación, lo único que se activará pod updatees si hay un cambio en el archivo podspec. Sin embargo, hacer un cambio también permitirápod install trabajar también.

En esta situación, puede modificar algo menor, como la descripción o el resumen con una letra, y luego puede ejecutar el comando de instalación o actualización con éxito.

CodeBender
fuente