intive Argentina Blog

SwiftLint al rescate

¿Has pasado por esta situación? Venías escribiendo código, en tu propio estilo y a tu manera, cuando de repente tu equipo creció y ya no estás solo como desarrollador, ahora hay otros cinco.

No todos estarán de acuerdo con tu estilo y con la forma en que organizas el código, porque cada uno tiene un enfoque propio. ¿Te imaginas un equipo de seis desarrolladores que escriben código sin ningún lineamiento que los guíe? ¡Sería una pesadilla ese código! Ahí es cuando SwiftLint viene al rescate.

Primero, algunas definiciones

Antes de explorar con mayor detalle, repasemos algunos conceptos.

  • ¿Qué es un linter o lint?

Un linter o lint es una herramienta que analiza el código fuente en busca de errores de programación o de estilo, bugs y construcciones sospechosas.

  • ¿Qué es SwiftLint?

SwiftLint es una herramienta que aplica el estilo y las convenciones del lenguaje de programación Swift y que se basa, en líneas generales, en la guía de estilo de Swift disponible en GitHub. Se integra con Clang y SourceKit con el objetivo de usar la representación del árbol de sintaxis abstracta (AST) del código fuente para, así, conseguir resultados más precisos.

Instalación

Existen varias maneras de instalar SwiftLint en una computadora Mac, pero la más común y sencilla es por medio de Brew:

En caso de no estar familiarizado con Homebrew, se puede consultar esta documentación.

Configuración de Xcode

Una vez completada la instalación, hay que configurar nuestro proyecto de forma que pueda correr SwiftLint. Para que Xcode pueda ejecutar el comando “swiftlint”, tenemos que crear una “nueva fase de ejecución de script” en las fases de compilación del destino, y copiar el siguiente código:

Ahora podrás compilar “( + B)” en tu proyecto, con lo que estarás preparado para resolver errores y advertencias durante la compilación. Un ejemplo de advertencia es el que se muestra a continuación.

Advertencia

Es mejor que lo sepas de antemano: en caso de que uses un gestor de dependencias, también aparecerán los errores de las bibliotecas de terceros que hayas integrado. En este momento, es probable que pienses: “Realmente, no necesito esto. Puedo vivir sin un linter”. Pero te pido que no pierdas la esperanza.

Se puede personalizar según las reglas que desees ejecutar y según cómo desees que se ejecuten. Vamos a configurarlas.

Primero que todo, hay que posicionarse en el mismo nivel de directorio que el proyecto Xcode.

Ese comando abrirá un archivo de configuración vacío, para que podamos poner nuestras propias reglas de SwiftLint. Nótese que usé “vi” para editar el texto, pero se puede usar cualquier otro programa.

Al llegar aquí, te preguntarás qué poner en este archivo. Yo te ayudaré con eso, al brindarte un archivo de referencia.

 

Voy a explicar un poco lo que acabamos de ver.

– “disabled_rules”: esta clave se explica por sí misma: excluye toda regla de nuestro código que no queremos que Xcode evalúe.

– “opt_in_rules”: SwiftLint tiene un conjunto de reglas por defecto que se ejecutan sin necesidad de configurar nada, y también tiene algunas reglas optativas que, por cierto, son interesantes. Pero es necesario especificar en este archivo si deseas que esas reglas se ejecuten en cada comando de compilación.

– “excluded”: esta clave excluye las carpetas, los archivos, etc. especificados. Quizás lo que convenga poner aquí sea el gestor de dependencias, sencillamente porque casi ninguna de las dependencias está alineada con las reglas de SwiftLint.

– Las otras claves configuran reglas específicas. Por ejemplo, se supone que “force_cast” dispara una advertencia en vez de un error; la clave “identifier_name” funciona para los valores mínimo y máximo.

Hay veces en que el comando mágico que sigue se convierte en tu mejor amigo. Te ayudará muchísimo a evitar estar constantemente revisando errores tontos, como espacios finales, u ordenando la importación.

 

Acerca de SwiftLint

SwiftLint está financiada y mantenida por Realm Inc. Sin embargo, es de código abierto, y si uno quiere puede contribuir al proyecto con nuevas reglas o depuración de bugs. Si deseas conocer más sobre SwiftLint, mira este video:

Integración entre SwiftLint e integración continua (CI)

SwiftLint permite la integración con Fastlane, otra gran herramienta para el desarrollo de iOS y para automatizar todos los procesos de implementación. Sin embargo, si tienes un servidor de CI pero Fastlane no está instalado, también se puede integrar SwiftLint si el servidor de CI es Jenkins, Travis o Circle.

Conclusión

En mi opinión, SwiftLint es una muy buena herramienta para el desarrollo de iOS que ayuda a mantener nuestro código limpio, mantenible y alineado tanto con nuestro equipo como con la comunidad Swift.

Gracias a SwiftLint, evitamos caer en malas prácticas, como forzar una conversión de tipo (casting) o forzar el desempaquetado (unwrapping). Nos ayuda, también, a conocer algunas características del lenguaje; en mi caso fue la cláusulafor where.

Ejemplo con disparador:

Ejemplo sin disparador:

Aun así, no todo es pura felicidad, también habrá que dirigir cómo implementarlo con el equipo. A algunos les molestará tener advertencias por cada línea de código que escriben. Es tu decisión. Pero para mí, implementar SwiftLint vale la pena.

Nahuel Zapata

Nahuel Zapata es desarrollador iOS en intive-FDV desde agosto del 2016. Estudiante de Ingeniería en Sistemas en la Universidad Abierta Interamericana, Nahuel es un apasionado por Swift y todo lo relacionado a este lenguaje y tecnología. Ávido lector, le gusta pasar su tiempo leyendo sobre arquitecturas, código escalable y testable, server-side apps con Swift y Machine Learning. Con gran convencimiento, milita el veganismo como estilo de vida.

Deja un comentario