Hace poco comencé un nuevo proyecto en iOS y después de llevar tiempo utilizando IntelliJ echaba de menos tener la posibilidad de tener organizados en un solo sitio los TODOs de la aplicación.

En IntelliJ es inmediato el acceso a todos los TODO, incluso al hacer commits al servidor de repositorio te muestra avisos sobre los TODO pendientes. En cambio en xCode esto no esta tan visible.

En  xCode disponemos de tres opciones. Por una lado opción sencilla es hacer uso de la directiva #pragma mark. Esta directiva se encarga de separar los métodos de una clase en bloques agrupados por utilidades. De esta forma es mucho mas fácil navegar a través de clases inmensas con miles de delegados y protocolos. En la “jumpbar” de xCode (barra superior de xCode con el path de los archivos) además de ver los métodos por bloques podemos ver los TODO pendientes.

Screen Shot 2013-08-04 at 12.41.05

Ademas de la posibilidad del TODO, xCode proporciona otras directivas que también se muestran en la jump bar:

//TODO: directiva para mostrar los "to do" en la jump bar
//FIXME: indicar zona donde arreglar un bug
//???:  y //!!!: indicar zona para examinar en profundidad (no muy usada)

Una segunda opción para resaltar los TODO es simplemente añadir la directiva #warning delante de los TODO que tengas en tu código. El problema de esta opción es que no puedes añadir tus comentarios al final de una línea de código.

#warning // TODO: aparecerá como un warning al compilar

Finalmente la tercera opción disponible es generar un script personalizado que se ejecute en el momento de compilación y muestre los TODOs como warnings. La ventaja de esta tercera opción es que no es necesario añadir la directiva “warning”, por lo que puedes poner los TODOs en cualquier parte de tu código. Para crear este script, en la ventana de configuración del proyecto selecciona Target > Build Phases > presiona Add Build Phase (abajo a la derecha) > Add Run Script > selecciona el tipo como bin/sh y copia el siguiente código en la ventana del script:

KEYWORDS="TODO|FIXME|\?\?\?:|\!\!\!:"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" \) -print0 | \
xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | \
perl -p -e "s/($KEYWORDS)/ warning: \$1/"

Con este script nos aparecerán directamente en la ventana de compilación como “warnings” del proyecto todos los TODO:, FIXME:, ???: y !!!: incluidos en nuestro proyecto.

Screen Shot 2013-08-04 at 12.40.40

Gracias a estos pequeños trucos se acabó el dejar de tener TODOs olvidados en lo más profundo de las clases de tus proyectos.