thxou

Ama la sabiduría. Desea el conocimiento.

CocoaPods: Como Integrarlo en Nuestros Proyectos

| Comments

CocoaPods es un herramienta de gestión de dependencias. Normalmente cuando usamos librerías de terceros, debemos copiar todos los ficheros necesarios de la librería directamente dentro de nuestro proyecto para poder utilizarla. Este modo de usar librerías tiene algunos inconvenientes, como por ejemplo que se hace difícil mantener la librería actualizada de nuevos cambios, teniendo que hacer el proceso manualmente cada vez que queramos actualizarla.

CocoaPods soluciona este problema proveyendo un sistema centralizado donde conviven todas las librerías, las trae a tu proyecto a petición y mantiene el entorno adecuado para el correcto control de las dependencias que puedan haber entre librerías y para que tu proyecto pueda compilar sin ningún problema.

Instalación

Instalar CocoaPods y ponerse a trabajar con él es sumamente sencillo. Corre bajo Ruby, así que primero tendrías que instalar Ruby antes de CocoaPods. No obstante, si la versión de tu sistema operativo es de OS X Lion en adelante no necesitas instalar Ruby ya que este viene instalada de forma predeterminada. Aún así, es recomendable actualizar el administrador de paquetes RubyGems a la última versión. Para ello abre una ventana del Terminal y escribe el siguiente comando:

1
sudo gem update --system

Una vez completado el proceso ya podemos instalar CocoaPods con el siguiente comando:

1
sudo gem install cocoapods

Ya casi estamos listos. Por último tenemos que ejecutar el siguiente comando. Lo que hará es copiar a tu ordenador el repositorio de especificaciones (Veremos esto de las especificaciones más adelante cuando creemos nuestra propia librería y veamos el proceso de subirlo al repositorio de CocoaPods), concretamente a la carpeta ~/.cocoapods/repos. Si ya existe, simplemente actualizará el contenido de la carpeta:

1
pod setup

Si todo ha ido bien, entonces felicitate por el trabajo conseguido. Ya tienes CocoaPods instalado y listo para usarse.

Integrando CocoaPods en nuestro proyecto

Para esto vamos a crear un proyecto sencillo. Abre Xcode y ve al menú File/New/Project…, y elige la plantilla Single View Application. Ponle por nombre CocoaPodsTest y guardalo donde quieras, especialmente en un lugar fácil de acceder.

Una vez creado el proyecto, procede a cerrarlo. Si, aunque suene raro. Ya te explico el porque dentro de nada.

Abre una ventana del terminal y navega hacia el directorio del proyecto. Si lo guardaste en el escritorio, el comando lucirá algo así:

1
cd ~/Desktop/CocoaPodsTest

Luego ejecuta el siguiente comando (asegúrate de estar dentro del directorio del proyecto):

1
pod init

Este comando va a crear el fichero Podfile de tu proyecto. El fichero Podfile es el lugar donde vas a definir las librerías que usarás dentro de tu proyecto. También puedes definir varios targets y librerías diferentes para cada target. Vamos a editar este fichero para mostrar cómo añadir nuestras librerías. Para esto ábrelo usando tu editor favorito (no uses TextEdit en ningún caso).

Al abrirlo verás algo similar a esto:

1
2
3
4
5
6
# Uncomment this line to define a global platform for your project
# platform :ios, "6.0"

target "CocoaPodsTest" do

end

Al crearse el fichero, siempre se crea especificando un target por defecto, en este caso CocoaPodsTest. La línea de arriba que está comentada nos dice a partir de que versión de iOS corre tu proyecto. Si tienes Xcode completamente actualizado, lo normal es que el proyecto que hayas creado al principio, corra a partir de la 7.1, por lo que tendrías que reemplazar esta línea por:

1
platform :ios, "7.1"

Ahora vamos a incluir nuestra primera librería. Para esto añade lo siguiente inmediatamente después de la línea target "CocoaPodsTest" do:

1
pod 'LCAnimatedMenu', '1.0.0'

De esta manera defines las librerías que deseas incluir en tu proyecto, una en cada línea. En este caso además de la librería, le estás diciendo a CocoaPods que versión en concreto quieres de esa librería. Puedes omitir la versión y CocoaPods incluirá la última versión disponible.

Si quieres saber más acerca de la sintaxis de este fichero y sobre que configuraciones más avanzadas puedes incluir, sigue este enlace hacia la documentación oficial.

Ahora guarda el fichero y cierra el editor.

El siguiente paso es decirle a CocoaPods que instale las librerias. Para esto escribe el siguiente comando en el Terminal:

1
pod install

Al finalizar el proceso de instalación saldrá un mensaje igual a este:

1
[!] From now on use `CocoaPodsTest.xcworkspace`.

Si vas a usar CocoaPods de hoy en adelante, este es el mensaje más importante que tienes que recordar. Desde ahora, ya no abrirás más el fichero del proyecto para trabajar con él, sino el workspace que crea CocoaPods en el cual conviven todas las librería que vayas a instalar y tu proyecto también. Es por eso que más arriba te dije de cerrar el proyecto.

Abre el fichero CocoaPodsTest.xcworkspace y veamos como usar la librería que acabamos de incluir.

Dentro del workspace verás 2 proyectos, el tuyo y otro llamado Pods. En Pods están incluidas todas las librerías que hayas añadido y otros ficheros que no deberías de tocar jamás, a menos que sepas lo que estás haciendo, claro está. También vas a encontrar el fichero Podfile que editamos anteriormente. Desde ahora, cada vez que quieras añadir una librería nueva, puedes editar el fichero directamente desde Xcode.

Learn To Fly

Trabajar con las librerías que hemos añadido es idéntico a como lo hacíamos antes. Abre el fichero ViewController.m e importa la librería:

1
2
#import <LCAnimatedMenu.h>
#import <LCMenuItem.h>

Ahora que has importado las librerías a tu proyecto, hay que usar la API de la librería, exactamente como lo hacías antes. Ahora reemplaza el método ViewDidLoad con el siguiente trozo de código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- (void)viewDidLoad
{
    [super viewDidLoad];
	

    UIImage *itemImage = [UIImage imageNamed:@"item"];
    ActionBlock actionBlock = ^(void) {
        NSLog(@"Botón presionado!");
    };

    LCMenuItem *item1 = [[LCMenuItem alloc] initWithImage:itemImage withActionBlock:actionBlock];
    LCMenuItem *item2 = [[LCMenuItem alloc] initWithImage:itemImage withActionBlock:actionBlock];
    LCMenuItem *item3 = [[LCMenuItem alloc] initWithImage:itemImage withActionBlock:actionBlock];
    LCMenuItem *item4 = [[LCMenuItem alloc] initWithFrame:CGRectZero];

    LCAnimatedMenu *menu = [[LCAnimatedMenu alloc] initWithItems:@[item1, item2, item3, item4]];
    menu.containerView = self.view;
}

En este código he incluido una imagen que obviamente no estará en el proyecto. Si quieres ver como luce puedes descargarla desde este enlace y añadirla a la carpeta de Images.xcassets del proyecto.

Ya hemos terminado!. Ahora compila el proyecto para ver la librería en acción. Tan sencillo como esto.

Conclusiones

Tiene sus ventajas usar un administrador de dependencias como CocoaPods, la que más salta a la vista es el hecho de no tener que preocuparte del arrastre de ficheros de librerías con cada actualización, cosa que considero bastante tediosa la verdad, aunque todos sabemos que en realidad no es para tanto. No obstante hay otros beneficios como el hecho de ahorrarnos espacio dentro del proyecto y el hecho de evitarnos la tentación de modificar el código fuente de las librerías.

Con respecto a este último aspecto, en ocasiones me encuentro con que las librerías no se adaptan exactamente a lo que quiero, por lo que en algunos casos sí que deseo poder modificar el código (Puedes enviar una petición al desarrollador de la librería, pero claro, nunca sabes cuanto puede tardar en hacerse realidad tu deseo). Todo va a depender de tus necesidades en momentos específicos. No obstante aunque uses CocoaPods, aún puedes añadir librerías manualmente sin problemas, de modo que yo personalmente recomiendo usarlo.

Por último, en la segunda parte de este tutorial, aprenderemos sobre el proceso de envío de nuestra propia librería al repositorio de especificaciones de CocoaPods. Verás que es un proceso muy sencillo en un tutorial aún más corto que este.

Happy Coding!

Comments