2011-12-17 19 views
26

Estoy escribiendo una aplicación para iPhone y usando los servicios de ubicación. Estoy utilizando el método startMonitoringSignificantLocationChanges en CLLocationManager. (Según tengo entendido, esto es para servicios de localización de poca potencia y baja precisión.) Cuando construyo y lanzo mi aplicación en iOS Simulator, mi ubicación está bien. Sin embargo, quiero simular actualizaciones a la ubicación más allá de la corrección inicial.Simulando cambios de ubicación para `startMonitoringSignificantLocationChanges`

Me di cuenta de estas dos opciones:

  • simulador de iOS: Test> menú Ubicación
  • Xcode 4: Producto> Test> Simular Ubicación

Ambos funcionan aceptablemente para la simulación una solución inicial. (Por ejemplo, elija 'Apple' del anterior, o 'Moscow' del último.) Sin embargo, los cambios posteriores a cualquiera de estos NO activarán otra actualización de ubicación en la aplicación simulada.

Lo que deseo es que se le notifique cuando la ubicación simulada cambie al usar startMonitoringSignificantLocationChanges. (iOS Simulator does genera una serie de actualizaciones cuando uso startUpdatingLocation en su lugar.) Esto hace que sea mucho más fácil probar las aplicaciones habilitadas para la ubicación sin llevar el dispositivo al campo.

dos preguntas:

  • ¿Cuál es la diferencia entre estos dos?
  • ¿Cómo uso iOS Simulator y/o Xcode 4 para simular una serie de cambios de ubicación?

Cheers.

+0

PD He hecho algunas ediciones. Título solía ser "Simulando ubicaciones: iOS Simulator vs Xcode 4." – ocarlsen

Respuesta

36

Si desea hacer una pista, puede crear un archivo GPX con puntos de referencia de esta manera:

<?xml version="1.0" encoding="UTF-8"?> 
<gpx> 
    <wpt lat="52.373" lon="4.871"></wpt> 
    <wpt lat="52.374" lon="4.872"></wpt> 
    <wpt lat="52.375" lon="4.871"></wpt> 
</gpx> 

Guardar como track.gpx. Tenga cuidado de no tener espacios en blanco al comienzo.

Cuando compila y ejecuta, hay una barra de herramientas en la parte inferior de Xcode con una flecha de ubicación (similar a la de los iPhones). Es para "Simular ubicación". Haga clic allí y cargue en su archivo GPX. Cuando su aplicación se ejecuta en el simulador, el punto azul debería moverse. No creo que haya una manera de controlar el tiempo, por lo que actualiza su ubicación cada medio segundo más o menos.

La diferencia que puedo ver en el menú del simulador es que no puede tener una pista personalizada, solo un punto personalizado. No sé por qué las opciones de menú son diferentes, probablemente agregarán una opción para una pista personalizada en el Simulador en algún momento.

+0

Cool. Funciona muy bien con 'startUpdatingLocation'. Sin embargo, no hay actualizaciones de ubicación más allá de la corrección inicial cuando se utiliza 'startMonitoringSignificantLocationChanges'. – ocarlsen

+0

Quizás tenga que alejarse de la región que está monitoreando para que vuelva a hacer ping. ¿Has visto el video WWDC que usa una pista GPX? Él usa la región que monitorea allí. –

+0

Sí, quiero simular ese movimiento. :) Es genial, quizás esto simplemente no está disponible. – ocarlsen

9

FWIW, la monitorización de cambios de ubicación significativos está ligada casi exclusivamente a la triangulación de torre celular y transferencias. La forma en que esto se maneja en el simulador es probablemente muy diferente de lo que sería en el dispositivo. Incluso el monitoreo de la región obtiene la ventaja adicional de Wifi y otras aplicaciones que usan la ubicación para obtener actualizaciones más frecuentes.

Supongo que así es como funciona el simulador, incluso al pasar en lugares que están muy separados y deberían desencadenarse lógicamente, así no es exactamente como se manejan las actualizaciones. No hay transferencias de torre de celda en el simulador, por lo tanto, no hay manera de realmente probar los cambios significativos.

0

Para dar seguimiento a @ respuesta Nevan-rey como de por qué no hay actualizaciones cuando se utiliza startMonitoringSignificantLocationChanges

Véase la nota de Apple para func startMonitoringSignificantLocationChanges()

Apps puede esperar una notificación tan pronto como el dispositivo se mueve 500 metros o más de su notificación anterior. No debe esperar notificaciones con más frecuencia que una vez cada cinco minutos. Si el dispositivo puede recuperar datos de la red, es mucho más probable que el administrador de ubicación entregue las notificaciones de manera oportuna.