ios - guide - Cambiando una biblioteca importada usando cocoapods
podfile (5)
Guardando cambios personalizados usando solo Git (sin bifurcación)
Para aquellos que buscan una solución simple, he resuelto este problema con éxito usando git stashes.
Como se mencionó, la pod update
sobrescribirá cualquier cambio que haya realizado. Sin embargo, si está utilizando git, lo que me gusta hacer es confirmar todos mis cambios, excepto los cambios de pod.
Una vez que los únicos cambios que tengo en mi sucursal son los cambios de Pods, escondo esos cambios ejecutando git stash save "Custom Cocoapod changes, apply after every pod update"
. Puede darle cualquier mensaje que desee cambiando el texto entre "".
Este comando tiene el efecto secundario de restablecer su directorio de trabajo al HEAD anterior, por lo que si desea volver a aplicar esos git stash apply
simplemente puede ejecutar git stash apply
para volver a incluir esos cambios, y luego puede confirmarlos para guardarlos.
No uses git stash pop
ya que esto eliminará el alijo después de aplicarlo.
Ahora, en un momento indeterminado en el futuro, cuando actualices tus pods y es el momento de volver a aplicar el alijo, lo que vas a querer hacer es ejecutar la git stash list
. esto devolverá una lista de todos los alijo que haya realizado con el índice de índice más reciente. Probablemente veas algo como esto:
stash@{0}: On featureFooBar: foo bar
stash@{1}: On Master: Custom Cocoapod changes, apply after every pod update
...
Si el alijo de cacao personalizado cambia al stash @ {0} entonces perfecto, puede ejecutar un git stash apply
nuevamente y obtendrá esos cambios en su directorio de trabajo. De lo contrario, una vez que encuentre el número de alijo que cambian sus pods, puede aplicar ese alijo ejecutando el git stash apply stash@{1}
Aplicar escondites es más fácil cuando tiene un directorio de trabajo limpio en la misma rama pero eso no es necesario. Esta página ofrece una buena descripción del git stash y cómo usarlo de otra manera.
Esta no es la solución de prueba más completa, ya que puedo prever algunos problemas cuando tiene varias personas en el mismo proyecto, pero es una forma sencilla de resolver esto sin recurrir a soluciones más complejas.
Estoy trabajando en un proyecto con cocoápodos y de repente me veo haciendo algunos cambios en una de las bibliotecas. ¿Cómo puedo asegurarme de que esos cambios nunca serán anulados por una pod update
? ¿Hay alguna forma de introducir cambios en un pod sin actualizar el proyecto github?
ACTUALIZACIÓN: bifurcando un proyecto.
He tratado de bifurcar el proyecto y crear un nuevo archivo de especificaciones para señalar el nuevo proyecto. Pude instalar las cosas básicas, sin embargo, por alguna razón, hay algunas dependencias que están instaladas pero no se pueden hacer referencia dentro del proyecto de pods. Actualmente tengo esto en mi podsfile:
''WhirlyGlobe'', :podspec => ''https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec''
El tenedor de la biblioteca está en https://github.com/tiagoalmeida/WhirlyGlobe
ACTUALIZACIÓN 2: encabezados que faltan
Descubrí que los encabezados (Pods / Headers) para boost y Eigen (utilizados desde WhrilyGlobe) no se están generando.
ACTUALIZACIÓN 3: tratando de hacer algo acerca de los encabezados
He intentado buscar en algunas de las configuraciones que se encuentran en este hilo y he probado las soluciones en las FAQ pero creo que mi problema es diferente. Los encabezados realmente faltan.
ACTUALIZACIÓN 4: Atacar la versión de los cocoápodos.
He desinstalado cocoapods e instalé la versión 0.20.2 (que estaba funcionando antes de intentar usar mi horquilla) y se mantiene igual: /.
@pgb y wattson me proporcionaron buena información, pero en última instancia, el problema estaba en una combinación de cosas.
No sé por qué, pero parece que cocoapods 0.22 maneja los encabezados de manera diferente. Desinstalé cocoapods e instalé la versión 0.20.2.
Para verificar la versión de cocoapods, utilicé la gem query
y quité los cocoapods con gem uninstall cocoapods
e instalé los cocoapods con gem install cocoapods --version 0.20.2
.
He usado mi podfile de esta manera:
''WhirlyGlobe'', :podspec => ''https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec''
Donde podspec apunta a mi nuevo podspec. Hice esto porque necesito quitar la etiqueta: del archivo pod original (de lo contrario, siempre apunta al mismo lugar) y de esta manera tengo más control sobre el archivo.
En el podspec he cambiado la fuente:
s.source = { :git => "https://github.com/tiagoalmeida/WhirlyGlobe.git"}
Para señalar en mi tenedor y quitar la etiqueta.
Gracias a @pgb y @wattson por los intentos de ayudarme. Upvoted ambos porque ambos fueron útiles.
Está cerca de tenerlo trabajando con su repositorio bifurcado.
Lo probé con el siguiente Podfile
:
pod ''WhirlyGlobe'', :git => ''https://github.com/tiagoalmeida/WhirlyGlobe''
WhirlyGlobe
y luego falló porque faltaba hg
. Simplemente lo instalé usando Homebrew : brew install mercurial
y luego runnning pod install
pudo instalar todas las dependencias.
El proyecto se compila, pero no estoy seguro de que funcione, sigue adelante y pruébalo.
Tenga en cuenta que tomó mucho tiempo descargar y compilar todas las dependencias (en particular, shapelib
).
Puede bifurcar un repositorio y luego agregar su repositorio bifurcado como un pod, así que digamos que ha bifurcado el repositorio a https://github.com/tiago/ThePodProject.git
, luego configure el pod en:
pod ''ThePodProject'', :git => ''https://github.com/tiago/ThePodProject.git''
Consulte here para obtener más detalles (en "Desde un podspec en la raíz de un repositorio de biblioteca")
Solo quiero sumar mis pocos centavos a la respuesta. Me encuentro con el mismo problema. Como alguien sugirió anteriormente, también fui a subclasificar el pod lib. Estaba usando ACEDrawingView y tiene una imagen de propiedad que es de solo lectura. Lo subclase e hice esta propiedad de lectura / escritura. Personalmente creo que ir por subclase es una solución más elegante y sin problemas para este tipo de problema. A menos que haya un gran desarrollo que quiera hacer al lado de su proyecto principal.