He estado desarrollando iOS durante un par de meses y acabo de enterarme de la prometedora biblioteca CocoaPods para la gestión de dependencias.
Lo probé en un proyecto personal: agregué una dependencia a Kiwi a mi Podfile, corrí pod install CocoaPodsTest.xcodeproj
y listo , funcionó muy bien.
Lo único que me queda por preguntarme es: ¿qué registro y qué ignoro para el control de versiones? Parece obvio que quiero revisar el Podfile mismo, y probablemente también el archivo .xcworkspace; pero ignoro el directorio Pods /? ¿Hay otros archivos que se generarán más adelante (cuando agregue otras dependencias) que también debería agregar a mi .gitignore?
fuente
Podfile.lock
: Cocoapods lo llama como recomendado para estar bajo control de versión.Confirmo mi directorio de Pods. No estoy de acuerdo con que el directorio Pods sea un artefacto de compilación. De hecho, diría que definitivamente no lo es. Es parte de la fuente de su aplicación: ¡no se compilará sin ella!
Es más fácil pensar en CocoaPods como una herramienta de desarrollo en lugar de una herramienta de compilación. No construye su proyecto, simplemente clona e instala sus dependencias por usted. No debería ser necesario tener instalados CocoaPods para poder simplemente construir su proyecto.
Al hacer que CocoaPods sea una dependencia de su compilación, ahora debe asegurarse de que esté disponible en todas partes donde necesite construir su proyecto ... un administrador del equipo lo necesita, su servidor CI lo necesita. Como regla general, siempre debe poder clonar su repositorio de origen y compilar sin ningún esfuerzo adicional.
No comprometer el directorio de Pods también crea un gran dolor de cabeza si cambias de sucursal con frecuencia. Ahora debe ejecutar la instalación de pod cada vez que cambie de rama para asegurarse de que sus dependencias sean correctas. Esto puede ser menos complicado ya que sus dependencias se estabilizan, pero al principio de un proyecto, esto es un sumidero de tiempo masivo.
Entonces, ¿qué ignoro? Nada. Podfile, el archivo de bloqueo y el directorio Pods se comprometen. Confía en mí, te ahorrará muchos problemas. ¿Cuáles son las desventajas? ¿Un repositorio un poco más grande? No es el fin del mundo.
fuente
Pods
directorio le causará dolor, cuando registrarlo también viene con su propio conjunto de problemas. por ejemplo, un desarrollador topa una versión de una dependencia en unPodfile
sin recordar revisar las fuentes actualizadas en Pods. Ley de murphy.pod install
cada vez que cambia de sucursal le cuesta un valor precioso ... DEcenas de segundos, pero elimina esa clase de problemas por completo.It won't build without it!
También podrías cometer XCodeRecomiendo usar el gitignore Objective-C de GitHub . En detalle, las mejores prácticas son:
Podfile
debe estar bajo control de la fuente.Podfile.lock
debe estar bajo control de la fuente.:path
opción debe mantenerse bajo control de origen../Pods
carpeta se puede mantener bajo control de origen.Para más información puedes consultar la guía oficial .
fuente: Soy miembro del equipo central de CocoaPods, como @alloy
Aunque la carpeta Pods es un artefacto de compilación, hay razones que puede considerar al decidir si mantenerla bajo control de origen:
:head
las:git
opciones y actualmente no están utilizando los commits almacenados en elPodfile.lock
).fuente
archivo .gitignore
Ninguna respuesta realmente ofrece un
.gitignore
, así que aquí hay dos sabores.Comprobación en el directorio de Pods ( Beneficios )
Xcode / iOS amigable git ignore, omitiendo archivos del sistema Mac OS, Xcode, compilaciones, otros repositorios y copias de seguridad.
.gitignore:
Ignorar el directorio Pods ( Beneficios )
.gitignore: (agregar a la lista anterior)
Si
Pods
no está registrado,Podfile
probablemente debería solicitar números de versión explícitos para cada Cocoapod. Discusión de Cocoapods.org aquí .fuente
Generalmente trabajo en aplicaciones de clientes. En ese caso, también agrego el directorio Pods al repositorio, para asegurarme de que en cualquier momento cualquier desarrollador pueda realizar un pago y compilar y ejecutar.
Si fuera una aplicación propia, probablemente excluiría el directorio Pods hasta que no esté trabajando en él por un tiempo.
En realidad, debo concluir que podría no ser la mejor persona para responder a su pregunta, en comparación con las opiniones de los usuarios puros :) Enviaré un tweet sobre esta pregunta desde https://twitter.com/CocoaPodsOrg .
fuente
Reviso todo. (
Pods/
yPodfile.lock
)Quiero poder clonar el repositorio y saber que todo funcionará como lo hizo la última vez que utilicé la aplicación.
Prefiero vender cosas que arriesgarme a tener resultados diferentes que podrían ser causados por una versión diferente de la gema, o alguien que reescribe el historial en el repositorio del Pod, etc.
fuente
La respuesta a esto se da directamente en los documentos de Cocoapod. Puede consultar " http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control "
fuente
Estoy en el campo de los desarrolladores que no registran las bibliotecas, suponiendo que tengamos una buena copia disponible en otra ubicación. Entonces, en mi .gitignore incluyo las siguientes líneas específicas para CocoaPods:
Luego me aseguro de tener una copia de las bibliotecas en un lugar seguro. En lugar de (mal) usar el repositorio de código de un proyecto para almacenar dependencias (compiladas o no), creo que la mejor manera de hacerlo es archivar compilaciones. Si utiliza un servidor CI para sus compilaciones (como Jenkins), puede archivar permanentemente cualquier compilación que sea importante para usted. Si realiza todas sus compilaciones de producción en su Xcode local, tenga la costumbre de tomar un archivo de su proyecto para cualquier compilación que necesite conservar. Algo así como: 1. Producto -> Archivo
Distribuir ... Enviar a la tienda de aplicaciones iOS / Guardar para Enterprise o Implementación Ad-hoc / ¿Qué tienes?
Revela tu carpeta de proyecto en Finder
Haga clic derecho y comprima "Cualquiera que sea el proyecto"
Esto proporciona una imagen del proyecto completo, incluida la configuración completa del proyecto y del espacio de trabajo utilizada para compilar la aplicación, así como las distribuciones binarias (como Sparkle, SDK patentados como TestFlight, etc.) ya sea que usen o no CocoaPods.
Actualización: he cambiado de opinión sobre esto y ahora comprometo el
Podfile.lock
control de fuente. Sin embargo, todavía creo que los pods en sí mismos son artefactos de construcción y deben administrarse como tales fuera del control de la fuente, a través de otro método, como su servidor CI o un proceso de archivo como describí anteriormente.fuente
Podfile.lock
: docs.cocoapods.org/guides/working_with_teams.htmlPodfile.lock
hornea en los caminos hacia las cápsulas locales, no había considerado agregarlo al control de versiones. Sin embargo, ahora que lo pienso, no es diferente de los cambios locales que hagoPodfile
pero que nunca me comprometo. Gracias por señalar esto.Podfile.lock
archivo.Prefiero comprometer el
Pods
directorio junto conPodfile
yPodfile.lock
asegurarme de que cualquier persona de mi equipo pueda verificar la fuente en cualquier momento y que no tengan que preocuparse por nada o hacer cosas adicionales para que funcione.Esto también ayuda en un escenario en el que ha solucionado un error dentro de uno de los pods o modificado algún comportamiento según sus necesidades, pero estos cambios no estarán disponibles en otras máquinas si no se confirman.
Y para ignorar directorios innecesarios:
fuente
Debo decir que soy fanático de enviar Pods al repositorio. Seguir un enlace ya mencionado le dará un buen archivo .gitignore para recuperar sus proyectos Xcode para iOS para permitir Pods, pero también para que pueda excluirlos fácilmente si lo desea: https://github.com/github/gitignore/ blob / master / Objective-C.gitignore
Mi razonamiento para ser un fanático de agregar Pods al repositorio es por una razón fundamental que nadie parece estar aprendiendo, ¿qué sucede si una biblioteca de la que nuestro proyecto depende tanto se elimina repentinamente de la web?
NB ... tenga en cuenta que la rama 'maestra' para el desarrollo es solo para ejemplos, obviamente las ramas 'maestras' en los sistemas de control de versiones, deben mantenerse limpias y desplegables / construibles en cualquier momento
Creo que a partir de estos, las instantáneas en sus repositorios de código son ciertamente mejores que ser estrictos en cuanto al tamaño del repositorio. Y como ya se mencionó, el archivo podfile.lock, mientras que la versión controlada le dará un buen historial de sus versiones de Pod.
Al final del día, si tiene una fecha límite apremiante, un presupuesto ajustado, el tiempo es esencial: debemos ser lo más ingeniosos posible y no perder el tiempo en ideologías estrictas, y en su lugar aprovechar un conjunto de herramientas para trabajar juntos - para hacer nuestras vidas más fáciles, más eficientes.
fuente
Al final, depende de usted el enfoque que adopte.
Esto es lo que el equipo de Cocoapods piensa al respecto:
Personalmente, me gustaría mantener los Pods fuera, como node_modules si estuviera usando Node o bower_components si estuviera usando Bower . Esto se aplica a casi cualquier Dependency Manager, y también es la filosofía detrás de los submódulos de git .
Sin embargo, a veces es posible que desee estar realmente seguro acerca de estado de la técnica de una determinada dependencia, de esa manera usted es el propietario de la dependencia dentro de su proyecto. Por supuesto, hay varios inconvenientes que se aplican si lo hace, pero las preocupaciones no solo se aplican a Cocoapods, sino también a cualquier Gerente de dependencia.
Abajo hay un buen lista de pros / contras hecha por el equipo de Cocoapods, y el texto completo de la cita mencionada anteriormente.
Equipo de Cocoapods: ¿Debería verificar el directorio de Pods en el control de fuente?
fuente
Depende, personalmente:
Por qué los pods deberían ser parte del repositorio (bajo control de fuente) y no deberían ser ignorados
pods.xcodeproj
la configuración también forma parte del control de fuente. Esto significa, por ejemplo, si tiene el proyectoswift 4
, pero algunos pods deben estar enswift 3.2
ya que aún no están actualizados, esta configuración se guardará. De lo contrario, el que clonó el repositorio terminaría con errores.pod install
, no se puede hacer lo contrario.Algunas desventajas: repositorio más grande, diferencias confusas (principalmente para los miembros del equipo), potencialmente más conflictos.
fuente
Para mí, la mayor preocupación es el futuro a prueba de su fuente. Si planea que su proyecto dure un tiempo y CocoaPods desaparezca o la fuente de una de las cápsulas se caiga, no tiene suerte si intenta construir desde un archivo nuevo.
Esto podría mitigarse con archivos periódicos de fuente completa.
fuente
Compruebe en las vainas.
Creo que esto debería ser un principio del desarrollo de software
¿Por qué?
CocoaPods o cualquier otra biblioteca externa pueden cambiar, lo que puede romper las cosas. O podrían moverse, cambiar de nombre o eliminarse por completo. No puede confiar en Internet para almacenar cosas para usted. Su computadora portátil podría haber muerto y hay un error crítico en la producción que debe corregirse. El desarrollador principal podría ser atropellado por un autobús y su reemplazo debe comenzar rápidamente. Y desearía que el último fuera un ejemplo teórico, pero en realidad sucedió en una startup con la que estaba. Q.E.P.D.
Ahora, de manera realista, realmente no puede verificar TODAS las dependencias. No puede registrar una imagen de la máquina que utilizó para crear compilaciones; no puede verificar la versión exacta del compilador. Y así. Hay límites realistas. Pero registre todo lo que pueda, no hacerlo solo hace que su vida sea más difícil. Y no queremos eso.
Palabra final: las vainas no son artefactos de construcción. Los artefactos de compilación son los que se generan a partir de tus compilaciones. Tu construcción usa Pods, no los genera. Ni siquiera estoy seguro de por qué esto tiene que ser debatido.
fuente
Ventajas de no registrarse en el
Pods/
control de versiones (en orden subjetivo de importancia):pod install
podría ocluir los cambios.Podfile
y elPods/
directorio se encuentran más rápido entre los compañeros de equipo. Si se registraPods/
y, por ejemplo, actualiza una versión en elPodfile
, pero se olvida de ejecutarpod install
o registrar los cambiosPods/
, le resultará mucho más difícil notar la fuente de la discrepancia. SiPods/
no está registrado, siempre debe ejecutar depod install
todos modos.JAR
archivos.venv/
(entornos virtuales) ynode_modules/
nunca se incluyen en el control de versiones. Si fuéramos completamente agnósticos acerca de la pregunta, no registrarsePods
sería el predeterminado basado en el precedente.Contras de no registrarse en el
Pods/
pod install
al cambiar de sucursal o revertir confirmaciones.pod install
.pod install
, y la fuente de los pods debe estar disponible.En resumen, no incluir el
Pods
directorio es una barrera de protección contra más malas prácticas. Incluir elPods
directorio facilita la ejecución del proyecto. Prefiero el primero sobre el segundo. No necesitará informar a cada nueva persona en un proyecto sobre "qué no hacer" si no existe la posibilidad de cometer ciertos errores en primer lugar. También me gusta la idea de tener un control de versión separado para elPods
que alivia las desventajas.fuente
En teoría, debería verificar en el directorio Pods. En la práctica, no siempre va a funcionar. Muchos pods superan con creces el límite de tamaño de los archivos github, por lo que si usa github tendrá problemas para verificar en el directorio Pods.
fuente
Aunque la organización Cocoapods nos anima a rastrear el
Pods/
directorio, dicen que depende de los desarrolladores decidir si lo hacen o no en base a estos pros y contras: http://guides.cocoapods.org/using/using-cocoapods.html # should-i-check-the-pods-directory-into-source-controlPersonalmente, suelo rastrear la
Pods/
carpeta solo para proyectos en los que ya no trabajaré por un tiempo. De esa manera, cualquier desarrollador puede aprender rápidamente y continuar el trabajo utilizando la versión adecuada de los cocoapods.Por otro lado, creo que el historial de confirmación se vuelve más limpio y es más fácil fusionar el código y revisar el código de otra persona cuando no está rastreando la
Pods/
carpeta. Por lo general, configuro la versión de la biblioteca de cocoapod cuando la instalo para asegurarme de que cualquiera pueda instalar el proyecto usando las mismas versiones que yo.Además, cuando
Pods/
se rastrea el directorio, todos los desarrolladores tienen que usar la misma versión de Cocoapods para evitar que cambie docenas de archivos cada vez que ejecutamospod install
para agregar / eliminar un pod.En pocas palabras : cuando realiza un seguimiento de la
Pods/
carpeta, el proyecto es más fácil de recoger. Cuando no lo rastreas, es más fácil mejorarlo.fuente
Parece que una buena manera de estructurar esto realmente sería tener el directorio "Pods" como un submódulo git / proyecto separado, aquí está el por qué.
Tener vainas en el repositorio de su proyecto, cuando trabaja con varios desarrolladores, puede causar diferencias MUY GRANDES en las solicitudes de extracción donde es casi imposible ver el trabajo real que fue cambiado por las personas (piense que varios cientos de miles de archivos cambiaron para bibliotecas, y solo un pocos cambiaron en el proyecto real).
Veo el problema de no comprometer nada con git, ya que la persona propietaria de la biblioteca podría eliminarlo en cualquier momento y usted es esencialmente SOL, esto también resuelve eso.
fuente
Depende o no de su carpeta Pods, ya que los flujos de trabajo varían de un proyecto a otro. Recomendamos que mantenga el directorio de Pods bajo control de origen y no lo agregue a su .gitignore. Pero en última instancia, esta decisión depende de usted:
Beneficios de registrarse en el directorio Pods
Beneficios de ignorar el directorio Pods
fuente