En este post vamos a explorar el concepto de CocoaPods para un proyecto XCode.
¿Qué encontrarás en este post?
Toggle¿Usamos CocoaPods para un proyecto XCode?
Cuando nos ponemos a trabajar en nuevo proyecto, es difícil, por lo menos en mi caso, creer que no vamos a utilizar ninguna librería externa.
Los frameworks (por simplificar, cualquier código, utilidad, librería ajena a nosotros), sobre todo los que tienen detrás a grandes equipos de desarrollo, a la comunidad o a “Chuck Norris” del código, nos ayudan a agilizar el proceso de desarrollo de nuestras apps, nos garantizan (en muchos casos) la creación de un código optimizado y nos evitan estar pendientes de cómo cambios en otras piezas que conforman nuestro proyecto puede afectar al correcto funcionamiento de éste.
Para gestionar estas librerías de terceros, como CocoaPods para un proyecto XCode, existen los gestores de dependencias, herramientas encargadas de descargar, añadir y gestionar frameworks que muy amablemente otras personas han desarrollado para nuestro disfrute.
Existen diferentes “dependency managers” para Xcode:
- CocoaPods: El primer gestor en aparecer para proyectos en Cocoa (Objective-C y Swift). Muy simple y con gran cantidad de librerías disponibles (casi 50.000).
- Carthage: Gestor para proyectos en escrito completamente en Swift que nos propone gestión más actual y “limpia” de nuestras dependencias.
- Swift Package Manager: El gestor “official” de Apple disponible desde Swift 3.0 (más vale tarde que nunca…)
Nos es fácil decantarse por uno de ellos, aunque es posible que la el futuro sea Swift Package Manager, por tratarse de la opción respaldada por Apple, la realidad es que la lucha actual se libra entre Carthage y CocoaPods para un proyecto XCode, con gran aceptación por la comunidad y miles de librerías y equipos dispuestos a compartir su trabajo en sus repos.
Por hacer un resumen rapidísimo de las diferencias entre los dos gestores más usados, diremos que el uso de CocoaPods es muy simple pero “modifica” nuestro proyecto base para hacer su magia, en cambio, Carthage evita ese tipo de cambios a costa de un manejo que puede resultar más complejo.
La mejor opción es conocer cada una de las opciones y decidir nosotros mismos el que mejor se adapta a nuestra filosofía de trabajo, en este artículo nos centraremos en el más veterano, CocoaPods para Xcode y Swift.
Instalación de CocoaPods
CocoaPods se instala mediante una gema de Ruby, bastará con abrir nuestro terminal y escribir. De esta manera, vamos a instalar CocoaPods en Mac.
sudo gem install cocoapods
De esta forma ya tendremos disponible y preparada para usar en Xcode la última versión de CocaPods, ya que hemos podido instalar CocoaPods en Mac.
Versión
Si queremos conocer en un futuro la versión que tenemos hemos de instalar CocoaPods en Mac en nuestro equipo, simplemente ejecutaremos en el terminal.
pod --version
Instalar CocoaPods en nuestro proyecto de Xcode
Para dotar a nuestro proyecto con los “superpoderes” de install CocoaPods, nos situaremos con el terminal en la raíz del mismo y ejecutaremos
pod init
Creando de esta manera el archivo Podfile, encargado de gestionar versiones de frameworks que deseamos añadir y parte de la configuración de CocoaPods a utilizar por nuestro proyecto en Xcode.
En el momento que ya tenemos nuestro Podfile e install CocoaPods, podremos ejecutar:
pod install
instrucción encargada de instalar CocoaPods en nuestro proyecto y generar toda la estructura necesaria para, ahora sí, aprovecharnos de nuestro nuevo gestor de dependencias.
Finalizado este proceso, veremos que nuestro proyecto, a parte de nuestro Podfile, ha añadido los siguientes ficheros:
- Pods: directorio que contendrá principalmente los frameworks que deseemos descargar y utilizar en nuestro proyecto.
- lock: a modo de fichero de integridad de dependencias gestionadas.
- [nuestro_proyecto].xcworkspace: nuevo ejecutable de proyecto que fusiona nuestro proyecto de Xcode y CocoaPods. Desde este momento, abriremos únicamente este ejecutable (de color blanco) en Xcode y olvidándonos del creado por defecto [nuestro_proyecto].xcodeproj (de color azul).
Gestión de dependencias
Si abrimos nuestro .xcworkspace en Xcode veremos que a parte del target de nuestro proyecto, tendremos uno más llamado “Pods”.
En este nuevo target podremos encontrar nuestro Podfile y las dependencias gestionadas por CocoaPods (al margen de los ficheros internos necesarios para el correcto funcionamiento de nuestro gestor de dependencias).
Por supuesto, también podremos visualizar nuestro Podfile con cualquier editor de texto.
Nuestro Podfile consta de 3 partes esenciales:
- El target (scope) de nuestras dependencias: define el entorno al que afectarán las dependencias gestionadas. Representado por “target ‘[nuestro_target]’ do … end”. Como contenido del target, añadiremos las dependencias (pods) que deseemos descargar.
- platform: para definir plataforma y versión global de nuestro proyecto de Xcode junto con CocoaPods. De esta manera, limitaremos los frameworks no soportados.
- use_frameworks!: utilizado en proyectos con Swift que quieran hacer uso de frameworks dinámicos (nuestro caso).
Para añadir una nueva dependencia a nuestro proyecto, simplemente añadiremos dentro de nuestro target una nueva línea que contenga
pod '[nombre_del_pod]'
En nuestro caso utilizaremos para el ejemplo “SVProgressHUD”, una librería que nos proporciona un HUD (componente visual para mostrar un “cargando”).
Una vez añadimos al Podfile nuestro nuevo pod y guardamos su contenido, podremos ejecutar en el terminal de nuevo
pod install
para instalar las nuevas dependencias.
Hecho esto, la nueva librería aparecerá en el target Pods de nuestro proyecto.
A continuación procederemos a realizar un “build” de nuestra app de Xcode para comenzar a utilizar la nueva dependencia dentro de nuestro código.
Uso de dependencias
Algo común al uso de dependencias gestionadas por CocoaPods, es que tendremos que importarlas en donde queramos utilizarlas.
import [nombre_framework]
Cada framework funcionará de una forma diferente, para ello tendremos que revisar la documentación proporcionada por el equipo de desarrollo.
Gestión de versiones
En el momento que añadimos un pod a nuestro Podfile y lo instalamos, se descargará la última versión disponible en el repo. Esto puede no ser siempre el comportamiento deseado, ya que por requisitos del proyecto (versionado, funcionalidades, compatibilidad…) podemos llegar a necesitar una versión o versiones concretas de nuestra librería de terceros.
Para ello, CocoaPods posee una gran cantidad de operadores para gestionar versiones de Pods, simplemente tendremos que añadir nuestra dependencia siguiendo el formato
pod '[nombre_del_pod]', '[modificador][versión]'
Aquí podéis ver el listado completo
Actualización de pods
Siempre que modifiquemos un pod ya existente (como ha sido el caso anterior en el que hemos modificado la versión) deberemos actualizarlo. Para ello podremos actualizar un pod concreto o forzar a actualizar todos los definidos en nuestro Podfile.
Únicamente tendremos que ejecutar en nuestro terminal
pod update # Para actualizar todos los pods pod update [nombre_del_pod] # Para actualizar un único pod en concreto
Destacar que ejecutar un “pod install” no actualiza los pods ya descargados.
Extras
Descargar versiones fuera del repositorio de CocoaPods
Podremos mapear una url que apunte a un pod alojado en un repositorio externo al de CocoaPods. Para esto, nuestro pod deberá definirse de la siguiente manera dentro del Podfile
pod '[nombre_del_pod]', :git => 'url_del_pod'
La ¡Ayuda!
Básico para cualquier herramienta. Basta con ejecutar en el terminal
pod --help
Desinstalar CocoaPods de un proyecto Xcode
Realizaremos 2 pasos. El primero situándonos en la raíz de nuestro proyecto y ejecutando en el terminal
pod deintegrate
Esto eliminará los pods del proyecto.
Restará borrar “a mano” los siguientes archivos:
- [nuestro_proyecto].xcworkspace
- Podfile
- lock
De esta manera, nuestro proyecto quedará “libre” de CocoaPods.
Hay que tener en cuenta que este proceso no elimina el uso en nuestro propio código de los frameworks que anteriormente gestionaba CocoaPods.
Por último, hablar de que disponemos de muchas más posibilidades para trabajar con CocoaPods. Este artículo solo refleja las que, a mi parecer, son los usos más comunes de las características de este gran gestor de dependencias.
Si echáis un ojo a la web oficial de CocoaPods podréis encontrar en detalle toda la potencia de esta herramienta.
Por otra parte, si queréis ver en vídeo todo este tutorial, podéis hacerlo en mi canal de YouTube. Dejarme por comentarios cualquier duda o apreciación y, si os gusta el contenido, compartir, suscribiros y enseñarme levantado ese dedo de “darle al espacio”.
Muchas gracias por vuestro tiempo.
¡Hasta otra Hackermen!
Por: Brais Moure
Mouredev Founder & Pilbeo Co-Founder | iOS Developer Mr. Jeff App| Freelance Software Developer | Android Developer | Emprendedor | Geek & Friki en general.
Estudiante del Bootcamp de desarrollo Mobile de KeepCoding