CocoaPods, tu gestor de dependencias favorito

, iOS, Swift, CocoaPods

CocoaPods es un gestor de dependencias para tu proyecto de Xcode. Es tan fácil como especificar qué dependencias necesitas en un sencillo archivo de texto plano. Es capaz de mantener las dependencias entre las distintas librerías que añades y ‘mergear’ el código fuente de las distintas dependencias. A fecha de escribir esto va por la versión 1.2.0 (rama estable).

¿Por qué necesitas un gestor de dependencias en tu vida? Bueno, no es obligatorio su uso, pero, podrías dedicar tu valioso tiempo a mejorar tu código en lugar de, sencillamente, malgastar tiempo en escribir cientos de líneas de código que no necesitarías escribir. También es cierto que puedes hacer uso de terceras librerías sin necesidad de usar un gestor de dependencías, pero eso te seguiría haciendo perder mucho tiempo tanto en la búsqueda, instalación y en el mantenimiento de dichas librerías (o eliminación de las mismas). Por tanto, la razón principal es obiva: por tiempo. Y como todos sabemos, el tiempo es oro, así que no lo malgastes ;)

Tiempo

Instalando…

CocoaPods está hecho con Ruby, y por tanto, para instalarlo necesitamos tener instalado Ruby en nuestro Max OS X; pero no sufras, que viene por defecto instalado con todas las versiones de OS X desde la versión 10.7.

Abre una terminal e introduce el siguiente comando (necesitarás introducir tu password para dar permisos de instalación)

    
    sudo gem install cocoapods

Ruby instalará todas las gemas que sean necesarias para lograr la correcta instalación de CocoaPods.

Tiempo

Si nos diera algún tipo de error, o si incluso de quedara congelada la instrucción, sería súper recomendable actualizar a la versión mas reciente de Ruby Gems:

    
    sudo gem update --system

Además, desde la propia CocoaPods nos recomiendan tener instalada la Command Line Tools (Xcode » Preferences » Downloads » Command Line Tools)

¡Instalado!

Configurando un nuevo proyecto con CocoaPods…

Para nuestro proyecto de ejemplo, tan sólo le añadiremos una divertida librería con la ayuda de CocoaPods, más que suficiente para ver como es su configuración y funcionamiento en tiempo de ejecución. Aquí cabe mencionar que todos los Pods que podemos usar en nuestro proyecto deben de estar “dados de alta” en el repositorio de Github que CocoaPods tiene.

La librería permite soltar confetti por toda la pantalla de nuestro dispositivo, a modo de celebración de algún logro o día festivo. Tan bonito como simple.

Confetti

Vamos allá! Nuevamente en una terminal deberemos situarnos en la carpeta raíz de nuestro proyecto (justo donde tenemos el archivo .xcodeproj)

    
    cd ~/Path/To/Project/Folder

Y desde allí ejecutamos el siguiente comando:

    
    pod init

esto creará nuestro Podfile en el directorio raíz del proyecto. Comenzaremos a editarlo (podéis editarlo con vuestro editor de texto plano favorito, yo suelo usar vi):

    
    vi Podfile

y por defecto veremos algo parecido a esto:

    
    # Uncomment this line to define a global platform for your project
	platform :ios, '8.0'

	target 'CocoaPodsDemo' do
  		# Comment this line if you're not using Swift and don't want to use dynamic frameworks
  	use_frameworks!

  	# Pods for CocoaPodsDemo
	pod "SAConfettiView"

	end

la primera línea indica a CocoaPods que tu librería funcionará a partir de la versión 8.0 de iOS. La línea use_frameworks! es obligatoria si vienes programando en Swift, de lo contrario, obtendrás un error al intentar usar el Pod sin esta línea. Y con la línea pod SAConfettiView le decimos a CocoaPods que busque, compile e instale la librería llamada SAConfettiView.

Buzz

Un alto en el camino…

Referirse a las librerías de Swift como librerías propiamente dicho, es un error. Cuando escribo librerías refiriendo al lenguaje Swift en verdad estoy refiriéndome a framworks, o para ser más exactos “Swift dynamic framework”, porque las librerías (estáticas) en Swift simplemente no están permitidas. Entonces, ¿Cuál es la diferencia entre una librería, un framework y un CocoaPod? Bien, espero arrojar algo de luz sobre este asunto:

– CocoaPod (o ‘Pod’, usado de forma abreviada) se refiere indistintamente a una librería o un framework que se ha añadido a tu proyecto mediante la herramienta CocoaPods.

– “dynamic frameworks” (o framworks, simple y llanamente) fueron introducidos con la llegada de iOS 8, permitiendo además de código, adjuntar imágenes y otros tipos de assets que hasta entonces, no se podía. Otra sustancial diferencia es que en los frameworks tenemos “namespace classes” que viene a lograr que Xcode use dos clases con nombres idénticos (de distintos frameworks) sin dar errores de símbolos duplicados en proyecto. Esto es debido a que, a diferencia de Objetive-C, los frameworks escritos en Swift no están incluidos en iOS evitando duplicados como bien ya sabes.

Y de todo esto se encarga CocoaPods por ti, en las sombras, sin que tú te enteres lo más mínimo. Genial, ¿eh?

Volviendo a nuestro proyecto

Hemos especificado la librería el framework que queremos importar sin indicarle la versión, eso hará que CocoaPods nos instale la última versión estable disponible. Si quisiéramos indicarle una versión en concreto, deberíamos colocarla en el pod de la siguiente manera:

    
    pod 'SAConfettiView', '~> 1.0'

Y eso le indicaría a CocoaPods que descargase únicamente la versión 1.0 o cualquier otra versión superior hasta la 1.1 sin incluir la 1.1 del pod que le estamos indicando. Todo el tema de las versiones lo tienen muy bien explicado los compañeros de kodigoswift.com, échale un vistazo ;) .Guarda y cierra. Ahora es el momento de decirle a CocoaPods que descargue e instale las dependencias de tu proyecto. Para eso, nuevamente en la terminal, cerciorándonos de que estamos en el directorio raíz del proyecto, escribimos el siguiente comando:

    
    pod install

Verás algo parecido a esto:

Final

Ahora, en la carpeta raíz del proyecto CocoaPods te ha creado un archivo .xcworkspace además de una carpeta Pods donde guardará todas las dependencias de tu proyecto. A partir de ahora, para abrir el proyecto en Xcode usaremos este archivo .xcworkspace en lugar del original que nos creó el propio Xcode, de lo contrario, obtendremos varios errores.

¡Perfecto, acabas de instalar tu primer Pod!

Drac

Programando con nuestro primer Pod

Si tenías abierto el proyecto en Xcode, ciérralo y ahora abre el archivo .xcworkspace en su lugar. Sólo necesitaremos usar la clase ViewController que viene por defecto en el proyecto, en ella definiremos una variable del tipo "SAConfettiView":

    
    var confettiView: SAConfettiView!

Y dentro del método viewDidLoad iniciaremos la variable, la adjuntaremos a la vista y ejecutaremos su método para que la lluvia de confetti comience.

    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        confettiView = SAConfettiView(frame: self.view.bounds)
        self.view.addSubview(confettiView)
        confettiView.startConfetti()
        
    }

No olvidemos importar la librería justo debajo de la importación de UIKit, de lo contrario… ¡error!

    
    import UIKit
    import SAConfettiView

Tan fácil como eso. Con esta dependencia - framework - no necesitamos tocar nada de las vistas. Sólo inicializa tu proyecto en el emulador de Xcode y disfruta con el resultado!

confetti

No olvides que tienes el proyecto que hemos venido usando en este ‘post’ en mi respositorio de GitHub ;)

Bonus:

Un breve inciso sobre el mantenimiento de nuestros pods en cualquiera de nuestros proyectos. Tenemos que aprender a diferenciar entre instalar y actualizar nuestros Pods. Cada vez que modificamos nuestro archivo Podfile para añadir o eliminar una dependencia, necesitaremos ejecutar ‘pod install’. Si lo único que pretendemos es usar una versión más actual de algunos de los Pods de nuestro proyecto, deberemos usar ‘pod update’ una vez modificado nuestro Podfile. Hay que recordar que esta “actualización” seguirá los límites que impusimos dentro del Podfile, por tanto, si pusimos

    
    pod 'MyAwesomePodLibrary', '~> 2.0'

CocoaPods intentará actualizar nuestra dependencia, pero nunca con una versión 2.0 o superior. Y por último, el comando ‘pod outdated’ listará todas las posibles versiones nuevas a las que podríamos actualizar. Para cualquier otra duda, recomiendo la documentación de CocoaPods, es increíblemente buena.

Bibliografía:

https://www.raywenderlich.com/97014/use-cocoapods-with-swift

http://www.migueldiazrubio.com/desarrollo-ios-gestionar-dependencias-con-cocoapods/

https://www.kodigoswift.com/tutorial-cocoapods-instalacion-y-gestion-de-dependencias/

Compartir en Twitter, Facebook, Google+
Anterior Siguiente