R Roam Consigue Roam

Grabar GPS en segundo plano en iOS sin perder la ruta

iOS puede suspender o cerrar tu registrador en cualquier momento y no te debe ningún aviso. Qué significa eso para una app cuyo trabajo es anotar por dónde has pasado, y qué protege de verdad una ruta.

Le das a empezar, te guardas el teléfono en el bolsillo, pedaleas tres horas, lo sacas y la app te enseña veinte minutos. Esta es, con diferencia, la queja seria más habitual sobre los registradores de rutas para móvil, y la causa casi nunca es el GPS.

Qué le está haciendo iOS a tu app en realidad

Una app de iOS en segundo plano no es simplemente una app que va más lenta. Pasa por estados: sigue en ejecución, suspendida (congelada en memoria, sin ejecutar nada) y terminada (ya no está). El sistema te mueve entre ellos según la presión de memoria, el estado térmico, la batería y su propio criterio, y no tiene ninguna obligación de avisarte con antelación.

Una app con el modo de localización en segundo plano sigue ejecutándose mientras le lleguen actualizaciones de posición, que es lo que hace posible todo esto. Es una garantía fuerte comparada con la de una app normal. No es absoluta: bajo presión de memoria real —un juego grande, una app de cámara, un teléfono con menos RAM— tu registrador puede morir igualmente a mitad de ruta.

Y aquí aparece el fallo que importa. Si la app llevaba la ruta en memoria, esperando a que pulsaras «parar» para escribir algo, todo lo posterior al último guardado ha desaparecido. No corrupto. Desaparecido, sin ningún error, porque el proceso que sabía de su existencia ya no existe.

La única protección real: escribirlo según llega

No hay ninguna manera ingeniosa de esquivar esto. La protección consiste en no tener nunca datos sin guardar, para empezar.

En Roam, una llamada de localización es un lote y un lote es una transacción de base de datos, y los puntos y los totales acumulados de la ruta se confirman juntos. No hay ningún búfer esperando al final del recorrido, ni ningún camino dentro del escritor que descarte un punto en silencio: un lote que no se puede confirmar lanza un error y se aparca en una alarma, en lugar de absorberse. Si la app muere en el kilómetro cuarenta, el kilómetro cuarenta ya está en el teléfono.

Confirmar los totales en la misma transacción que los puntos importa más de lo que parece. Significa que la fila de resumen nunca puede describir un conjunto de puntos que no está en disco, así que tras una muerte de la app no existe ninguna ventana en la que ambos discrepen, y la recuperación no tiene que volver a reproducir veintiocho mil puntos para averiguar dónde estabas. Le basta con leer la fila.

La otra mitad de la misma idea: nunca se borra nada. El filtrado, el suavizado y la pausa automática no eliminan jamás una fila de la base de datos. Se anotan como marcas en el punto, y el flujo en bruto se queda exactamente como llegó, de modo que cuando una heurística se equivoca con una ruta real las muestras originales siguen ahí para volver a derivar de ellas. Una app que descarta en silencio las muestras con las que no estaba de acuerdo ha destruido la prueba de que se equivocó.

Volver a levantarse después de un cierre

Si concediste la localización en modo Siempre, iOS puede relanzar en segundo plano una app terminada cuando se produce un cambio significativo de ubicación. Eso es un salvavidas real, y viene con una trampa que ha mordido a muchísimos registradores.

En ese relanzamiento la app dispone de una ventana muy corta e impredecible antes de que el sistema pueda volver a suspenderla, y lo decisivo es que puede suspenderla en cualquier punto de suspensión, lo que en Swift moderno significa en cualquier `await`. Una app que se relanza y luego carga de forma asíncrona algún estado antes de reconstruir su gestor de localización puede quedarse congelada a mitad de camino, y un proceso suspendido antes de rearmarse no volverá a oír al GPS nunca más. Parece que está funcionando. No está recibiendo nada.

El rearme de Roam es deliberadamente síncrono justo por esto: reconstruir el gestor de localización y reiniciar las actualizaciones ocurre antes del primer await, lo que convierte ese error en algo imposible de introducir en lugar de en algo meramente desaconsejado. Además está escrito para que llamarlo dos veces sea seguro, porque un relanzamiento en segundo plano compitiendo con un arranque en primer plano hará exactamente eso.

Conviene dejarlo claro: Siempre es un seguro, no un requisito. La grabación funciona perfectamente con Mientras se usa, y la app lo dice en el propio aviso de permiso en lugar de dar a entender que tienes que entregar el permiso más fuerte.

Y es un seguro y no una garantía, distinción en la que merece la pena insistir. La propia configuración de Roam enuncia la suposición con todas las letras: puede que nunca se la relance, y la durabilidad es la única promesa que hace. Nada en iOS obliga al sistema a devolver a la vida una app terminada. Lo que ocurrió entre la muerte y el relanzamiento no lo grabó nadie, y no hay ninguna API que pueda entregarlo después, así que lo que recuperas es la ruta hasta la muerte de la app más la ruta a partir del relanzamiento, con un agujero honesto en medio. Cualquier app que describa esto como una continuación sin costuras está describiendo algo que la plataforma no ofrece.

Qué puede hacer quien pedalea

  1. Concede la localización en modo Siempre si vas a grabar algo largo. Es la diferencia entre que un cierre no te cueste nada y que te cueste el resto de la ruta.
  2. Deja el modo de bajo consumo apagado si puedes. Hace más probable que el trabajo en segundo plano se recorte.
  3. No deslices la app fuera del selector de apps a mitad de ruta. Un cierre forzado le dice a iOS que lo has hecho a propósito, y no habrá ningún relanzamiento en segundo plano.
  4. No tengas dos registradores funcionando a la vez. Dos apps manteniendo el GPS despierto duplican el consumo y la presión de memoria que acaba matando a una de las dos.
  5. Revisa el permiso después de una actualización de iOS. A veces las actualizaciones rebajan Siempre a Mientras se usa sin demasiada ceremonia.

Cómo saber si tu registrador es seguro

Puedes probarlo en diez minutos sin herramientas especiales. Empieza una grabación, camina cinco minutos, cierra la app a la fuerza desde el selector de apps y vuelve a abrirla. Si los cinco minutos están ahí, la app escribía sobre la marcha. Si la ruta está vacía o truncada, llevaba tus datos en memoria y ya sabes exactamente cuánto te juegas en una salida larga.

Un registrador debería además declarar lo menos posible. Cada modo en segundo plano de más es algo por cuyo mal uso pueden cerrarte la app y algo por lo que preguntará quien revise en el App Store; Roam declara uno —localización— y el repositorio incluye una comprobación de compilación que hace fallar el build si esa lista crece aunque sea en una sola entrada.

Preguntas frecuentes

¿Por qué mi iPhone dejó de grabar la ruta en segundo plano?

Casi siempre porque iOS suspendió o cerró la app por presión de memoria, o porque la cerraste a la fuerza desde el selector de apps. El modo de localización en segundo plano mantiene vivo a un registrador mucho más tiempo que a una app normal, pero no es una garantía absoluta, y por eso importa más lo que la app hace con cada posición que el hecho de seguir viva.

¿Hace falta el permiso Siempre para grabar una ruta?

No. Con Mientras se usa basta para grabar con la pantalla apagada, porque el modo de localización en segundo plano mantiene la app en marcha mientras llegan actualizaciones. Siempre añade la posibilidad de que iOS relance la app en segundo plano si la terminó, así que es un seguro para rutas largas, no un requisito.

¿El GPS en segundo plano gasta mucha batería?

Gasta energía de verdad: el receptor funciona sin parar y la app se despierta con cada posición. Un teléfono moderno aguanta una ruta de varias horas con holgura; una prueba de un día entero es donde empieza a ser una pregunta, y donde una app que escribe sobre la marcha marca la diferencia entre perder los últimos minutos y perder el día.

¿Cómo compruebo si mi registrador pierde datos?

Empieza una grabación, camina cinco minutos, cierra la app a la fuerza desde el selector de apps y vuelve a abrirla. Si esos cinco minutos han sobrevivido, la app escribe sobre la marcha. Si no, llevaba tu ruta en memoria.

Un registrador que no pierde la ruta

Roam confirma cada posición GPS en el teléfono en el instante en que llega, marca los huecos de señal en lugar de trazar una línea recta por encima, y lee el desnivel del barómetro y no de la altitud GPS. Sin cuenta, sin iniciar sesión, sin sincronización. Grabar una ruta, verla y reproducirla es gratis.

Descargar en el App Store

Guías relacionadas

Todas las guías