Esta es la sección de la documentación de CLLocationManager que describe el comportamiento de la aplicación con startMonitoringSignificantLocationChanges :
Si inicia este servicio y su aplicación se cancela posteriormente, el sistema reinicia automáticamente la aplicación en segundo plano si llega un nuevo evento. En tal caso, el diccionario de opciones pasado a la aplicación: didFinishLaunchingWithOptions: método del delegado de su aplicación contiene la clave UIApplicationLaunchOptionsLocationKey para indicar que su aplicación se inició debido a un evento de ubicación. Al reiniciar, debe configurar un objeto de administrador de ubicación y llamar a este método para continuar recibiendo eventos de ubicación. Cuando reinicia los servicios de ubicación, el evento actual se envía a su delegado de inmediato. Además, la propiedad de ubicación de su objeto de administrador de ubicación se completa con el objeto de ubicación más reciente incluso antes de iniciar los servicios de ubicación.
Entonces, tengo entendido que si su aplicación termina (y supongo que si no llama a stopMonitoringSignificantLocationChanges desde applicationWillTerminate ), se despertará con un parámetro UIApplicationLaunchOptionsLocationKey a la aplicación: didFinishLaunchingWithOptions . En ese momento, crea su CLLocationManager , llama a startMonitoringSignificantLocationChanges y realiza el procesamiento de la ubicación en segundo plano durante un tiempo limitado . Así que estoy bien con esta parte.
El párrafo anterior solo habla de lo que sucede cuando se termina la aplicación, no sugiere qué hacer cuando se suspende la aplicación. La documentación de didFinishLaunchingWithOptions dice:
La aplicación rastrea las actualizaciones de ubicación en segundo plano, se eliminó y ahora se ha relanzado. En este caso, el diccionario contiene una clave que indica que la aplicación se reinició debido a un nuevo evento de ubicación.
Sugerir que solo recibirá esta llamada cuando se inicie su aplicación (debido a un cambio de ubicación) después de que haya sido cancelado.
Sin embargo, el párrafo sobre el Servicio de cambio significativo en la Guía de programación de reconocimiento de ubicación tiene lo siguiente que decir:
Si deja este servicio en ejecución y su aplicación se suspende o finaliza posteriormente, el servicio activa automáticamente su aplicación cuando llegan nuevos datos de ubicación. Al despertar, su aplicación se coloca en segundo plano y se le da un poco de tiempo para procesar los datos de ubicación. Debido a que su aplicación está en segundo plano, debe realizar un trabajo mínimo y evitar cualquier tarea (como consultar la red) que pueda evitar que regrese antes de que expire el tiempo asignado. Si no es así, su solicitud puede ser cancelada.
Esto sugiere que se le ha despertado con datos de ubicación si su aplicación ha sido suspendida, pero no menciona cómo se le ha despertado:
- ¿El UIApplicationDelegate recibe una devolución de llamada que me dice que estoy reanudando desde un estado suspendido a un estado de fondo?
- ¿El administrador de ubicación (que se secó por congelación cuando se suspendió la aplicación) comienza a recibir devoluciones de llamada de locationManager: didUpdateToLocation: fromLocation ?
- ¿Solo necesito implementar código en mi mensaje didUpdateToLocation que verifica el estado de la aplicación y realiza un procesamiento mínimo si está en modo de fondo?
En el proceso de redacción de esto, creo que acabo de responder mi propia pregunta, pero sería genial que alguien más conocedor confirmara mi comprensión de esto.