Cada vez que se inicia un proyecto es la oportunidad de hacer lo mejor posible un desarrollo y organizarlo muy bien para no perdernos en un laberinto de código, carpetas y convenciones. En el caso de proyectos para iOS no es la excepción. Hoy hablaremos de este problema y como una simple herramienta de linea de comandos la puede solucionar.
Xcode
Si revisamos Xcode desde su versión 3 siempre fue diferente a todos los demás IDE’s del mercado. Pero recuerden que diferente no es igual a malo. Simplemente tiene otro acercamiento a problema de desarrollar software. En los últimos años Apple ha mejorado mucho su interfaz y comunicación entre componentes pero no ha dejado de ser diferente.
Pero no tenemos muchas opciones, es Xcode o utilizar opciones como AppCode que tiene una interfaz más común. El problema de como organizar el proyecto siempre es complicado. Las plantillas siempre te dejan con una gran incertidumbre de donde colocar que archivos.
Estructura de carpetas
En todos los proyectos de iOS u OS X siempre existen componentes comunes como Modelos, Vistas, Controladores, una capa para los Servicios, las imágenes, videos y/o audios, los archivos XIB, las pruebas, los frameworks, las configuraciones y los plist. ¿En donde ponemos todo ese código sin que todo quede en la carpeta raíz?
Es común que en los proyectos se decide colocar todo en un par de carpetas o a lo mucho separar solo los assets. Esto es incorrecto, el hecho de que no tengamos nombres clasificados y/o paquetes como en Java (ej. com.company.app.controllers.mycontroller) no significa que no podamos organizar mejor nuestro código y en general nuestro proyecto junto con sus archivos.
Pero hay mucho por configurar ¿hacemos carpetas (azules) o grupos (amarillos)? ¿utilizamos un prefijo de clases? ¿cuántas carpetas necesitamos? ¿dónde colocar las imágenes y launch screens? Oh Dios!
Liftoff para proyectos iOS y OS X
Para ese problema existe una gran herramienta llamada Liftoff, que es un comando para ayudarnos con la creación de proyectos iOS. Nos resuelve problemas como elección del lenguaje, carpetas, CocoaPods, suite de pruebas, colocar la versión de un tag de Git como la version de la aplicación y colocar el numero de build como el numero de commits.
Para poderla utilizar esta herramienta lo primero que necesitamos es instalar Homebrew. Y cuando lo tengamos listos vamos a poder crear nuestro primer proyecto.
Crear el proyecto con Liftoff.
Primero desde la terminal nos aseguramos de tener instalado liftoff.
Después ejecutamos el comando liftoff y contestamos la siguientes preguntas:
- Nombre del proyecto.
- Nombre de la compañía.
- Identificador de la compañía (pe. com.company)
- Prefijo (dos o tres letras que identifiquen a tu compañía, pe. DC para DigitalCoffee)
- Nombre del ambiente de pruebas.
Cuando acaba de ejecutarse el comando crea una carpeta, la llena de archivos y carpetas para al final instalar las dependencias con CocoaPods.
Una vez que se acaba, nos abre de inmediato Xcode. Pero ahora, algo muy importante es identificar que archivo es el que tenemos que abrir, ya no vamos a abrir el azul que es un Xcode project, ahora abriremos el blanco que es un Xcode workspace. ¿Por qué? simplemente por que ahora va a compilar también los CocoaPods.
La estructura del proyecto con Liftoff
Ya que tenemos nuestro proyecto creado con liftoff, solo nos hace falta conocer en donde va que archivos. Y todo es muy simple. Existen 4 carpetas en la raíz del proyecto:
Raiz
- scripts en la carpeta bin.
- la carpeta con nuestro código.
- Un directorio con todos los Pods o dependencias.
- El folder con nuestras pruebas.
Nucleo del proyecto
En la carpeta de nuestro código (que lleva el mismo nombre que nuestro proyecto) existen todos los folders:
- Controladores
- Extensiones
- Modelos
- Vistas (los que heredan de UIView como código. NO Xib’s)
- Protocolos
- ViewModels (para los que usan MMVC)
- Folder de recursos
- Imagenes en todos sus tamaños en xcassets
- Nibs (aqui van los Xib’s)
- Other-sources (archivos plist)
- Settings.bundle
- Storyboards
Dependencias y Pod’s
Por otro lado en las dependencias, el archivo Podfile y otros recursos útiles. Y tienen su estructura y folders de la siguiente manera:
El proyecto en Xcode
En Xcode siempre va a preferir grupos sobre folders. Y todo esta dentro del Workspace:
Ventajas y conclusión
- Ajusta el indent a espacios (en vez de tab’s) de un tamaño de 4 espacios.
- Maneja los Warnings como errores cada vez que compilamos en release.
- Habilita una lista de Warnings para que se muestren en tiempo de compilación.
- Prende el analizado estatico en el proyecto.
- Convierte los TODO y FIXME en Warnings para que los ubiques en el panel.
- Convierte el tag de Git en la versión de la aplicación y el numero de commit actual en el numero de build.
- Ejecuta configuración personalizada definida en ~/.liftoffrc
- Agrega un default .gitignore y .gitattributes
- Inicia un repositorio Git.
Además soporta:
- Elección del lenguaje Objective-C / Swift
- Le podemos dar una plantilla para que organice de forma personalizada las carpetas.
- Podemos cambiar los TODO y FIXME a otro tipo de etiquetas.
- Podemos cambiar los Warnings que nos muestre.
- Cambiar el tamaño de indent y los tabs.
- Entre otras cosas.
Como conclusión podemos decir que es una herramienta imprescindible para nuevos proyectos y que no solo organiza los proyectos sino que mejora muchísimo el flujo de trabajo cada vez que tenemos que colocar nuevas carpetas o capas en nuestra aplicación.
Para dominar el desarrollo en iOS los invitamos a nuestros cursos de desarrollo iOS y al bootcamp de Swift donde se aprovechan herramientas como Liftoff en los proyectos.