viernes, 15 de noviembre de 2013

Xcode: debug de aplicaciones que usan localización

Para la versión Beta 3 de GeneXus Tilo (a liberarse cerca de fin de año...), estuve trabajando en una funcionalidad que llamamos Proximity Alerts, que es parte de la Geolocation API.

No es el objetivo de esta nota explicar la funcionalidad, pero merece por lo menos un comentario. Consiste básicamente en definir regiones dadas por un punto geográfico y un radio en metros, y cuando el dispositivo ingresa a una de estas regiones se dispara un evento en la aplicación.

La funcionalidad en sí no es difícil de implementar, pero es bastante difícil hacer debug... Por suerte y gracias a Fabián, aprendí algunas cosas de Xcode y del simulador de iOS que facilitan un poco la tarea.

Xcode

En Xcode, en el Scheme de la aplicación (Product > Scheme > Edit Scheme... > tab Options) tenemos la opción de decirle a la aplicación que inice en una ubicación determinada, y también tenemos la posibilidad de pasarle un archivo GPX para que el simulador vaya cambiando de ubicación siguiendo una ruta.


Los archivos GPX son simplemente archivos XML con información geográfica, y se pueden crear de forma muy simple con una aplicación gratuita en el App Store llamada GPX Creator.

Otra configuración que está en el Scheme, pero esta vez en el tab Info, es que la aplicación no inicie automáticamente cuando le damos Run en Xcode, sino que espere a que el desarrollador la inicie de forma manual. Esto como dato anecdótico, porque no nos sirvió para lo que queríamos.

iOS Simulator

En el simulador también tenemos la opción de configurar la ubicación, pero una vez que la aplicación ya está corriendo. Esto se hace en la opción de menú Depurar > Ubicación (no se por qué Xcode está en inglés y el simulador en español...)

En este caso, las opciones son usar una ubicación predeterminada o usar una definida por nosotros.

La diferencia con la configuración en Xcode, es que entre las ubicaciones predeterminadas ya hay algunas que son una serie de puntos por los que va pasando.

Conclusión

Siempre es bueno conocer las herramientas que usamos y más cuando tienen funcionalidades que son útiles en casos puntuales y no son demasiado fáciles de encontrar. Por eso me pareció interesante compartir esto.

De todas formas, más allá de estas opciones que sirvieron para avanzar en la solución, hubo algo que no pudimos hacer: que el simulador se "moviera" en una ruta cuando la aplicación no está corriendo. Así que de todas formas para probar la funcionalidad tuve que salir a caminar con el teléfono...