Establecer la ubicación en iPhone Simulator

124

¿Cómo puedo configurar la ubicación (como se recoge en los servicios de CoreLocation) en el simulador de iPhone?

Acantilado
fuente
Agregué
¿Alguien ha logrado que esto funcione en React native, simulator?
Nikos
Con iOS 13 beta 2, solo pude ver las opciones "Ninguno" y "Personalizado". ¿Alguien más tiene el mismo problema? stackoverflow.com/q/56733625/1364053
nr5

Respuestas:

122

A partir de iOS 5, el simulador tiene una ubicación configurable.

En el menú Depurar, la última entrada es "Ubicación"; esto le da un submenú con:

  • Ninguna
  • Ubicación personalizada
  • Tiendas de Apple
  • manzana
  • Paseo en bicicleta por la ciudad
  • City Run
  • Freeway Drive

Ubicación personalizada le permite ingresar un valor de latitud / longitud. Paseo en bicicleta, City Run y ​​Freeway Drive son una simulación de una ubicación en movimiento (en Cupertino, por supuesto).

Por supuesto, esto no ayuda en nada a la depuración de iOS 4 (o anterior); ¡pero es una mejora definitiva!

Robert Altman
fuente
¿Dónde está el menú de depuración en el simulador de IOS?
Lucky_girl
1
esto funciona, pero es para el menú de depuración en el simulador, no para el de xcode
Lance Samaria
2
Para el simulador de iOS, ahora se encuentra en "Características"
J. Saw
85
  1. Ejecutar proyecto en iPhone Simulator
  2. Cree en el archivo TextEdit siguiente archivo, llámelo MyOffice por ejemplo. Hacer extensión como .gpx ingrese la descripción de la imagen aquí

    <?xml version="1.0"?> <gpx version="1.0" creator="MyName"> <wpt lat="53.936166" lon="27.565370"> <name>MyOffice</name> </wpt> </gpx>

  3. Seleccione en Xcode en el área Simular Add GPX File to Project...ingrese la descripción de la imagen aquí

  4. Agregue el archivo creado del menú al proyecto.
  5. Ahora puede ver su ubicación en el área Simular:ingrese la descripción de la imagen aquí
berilio
fuente
TextEdit no guarda el archivo .gpx. ¿Como lo hago?
2
guárdelo como .txt (o .xml) y luego cambie el nombre a .gpx
beryllium
7
¡Gracias! Muy fácil, funciona muy bien. En caso de que alguien más use esto, aquí está el archivo GPX de muestra en texto para que pueda copiarlo y pegarlo: <? Xml version = "1.0"?> <Gpx version = "1.0" creator = "Name"> <wpt lat = "" lon = ""> <name> Oficina </name> </wpt> </gpx>
RyanG
1
Salvaste mi día "+1".
SAHIL
3
¿Podemos incluir tiempo en esto? Quiero probar el método
startMonitoringSignificantLocationChanges
17

En mi devolución de llamada de delegado, verifico si estoy ejecutando en un simulador ( #if TARGET_ IPHONE_SIMULATOR) y, de ser así, proporciono mi propio Lat / Long, previamente buscado. Que yo sepa, no hay otra manera.

Ben Gottlieb
fuente
3
A partir de Xcode 4.2, ahora hay una forma en el Debugmenú del simulador que usa la Locationentrada que permite configurar una ubicación personalizada o seleccionar entre algunas atracciones y ubicaciones predefinidas.
progrmr
17

en el menú del Simulador de iOS, vaya a Depurar -> Ubicación -> Ubicación personalizada. Allí puede establecer la latitud y la longitud y probar la aplicación en consecuencia. Esto funciona con mapkit y también con CLLocationManager.

Ravi Chokshi
fuente
10

XCode 11.3 y anteriores:

Debug -> Location -> Custom Location

ingrese la descripción de la imagen aquí

XCode 11.4+:

Features -> Location -> Custom Location

ingrese la descripción de la imagen aquí

Para saber qué versión de XCode tiene

$ /usr/bin/xcodebuild -version
Samuel Hulla
fuente
5

Antes de iOS 5, puedes hacerlo en código:

Utilizo este fragmento justo antes @implementationde la clase en la que necesito mis datos de ubicación y encabezado falsos.

#if (TARGET_IPHONE_SIMULATOR)
@interface MyHeading : CLHeading
    -(CLLocationDirection) magneticHeading;
    -(CLLocationDirection) trueHeading;
@end

@implementation MyHeading
    -(CLLocationDirection) magneticHeading { return 90; }
    -(CLLocationDirection) trueHeading { return 91; }
@end

@implementation CLLocationManager (TemporaryLocationFix)
- (void)locationFix {
    CLLocation *location = [[CLLocation alloc] initWithLatitude:55.932 longitude:12.321];
    [[self delegate] locationManager:self didUpdateToLocation:location fromLocation:nil];

    id heading  = [[MyHeading alloc] init];
    [[self delegate] locationManager:self didUpdateHeading: heading];
}

-(void)startUpdatingHeading {
    [self performSelector:@selector(locationFix) withObject:nil afterDelay:0.1];
}

- (void)startUpdatingLocation {
    [self performSelector:@selector(locationFix) withObject:nil afterDelay:0.1];
}
@end
#endif

Después de iOS 5, simplemente incluya un archivo GPX en su proyecto como este para que la ubicación se actualice continuamente Hillerød.gpx:

<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode"> 
    <wpt lat="55.93619760" lon="12.29131930"></wpt>
    <wpt lat="55.93625770" lon="12.29108330"></wpt>
    <wpt lat="55.93631780" lon="12.29078290"></wpt>
    <wpt lat="55.93642600" lon="12.29041810"></wpt>
    <wpt lat="55.93653420" lon="12.28998890"></wpt>
    <wpt lat="55.93660630" lon="12.28966710"></wpt>
    <wpt lat="55.93670240" lon="12.28936670"></wpt>
    <wpt lat="55.93677450" lon="12.28921650"></wpt>
    <wpt lat="55.93709900" lon="12.28945250"></wpt>
    <wpt lat="55.93747160" lon="12.28949540"></wpt>
    <wpt lat="55.93770000" lon="12.28966710"></wpt>
    <wpt lat="55.93785620" lon="12.28977440"></wpt>
    <wpt lat="55.93809660" lon="12.28988170"></wpt>
    <wpt lat="55.93832490" lon="12.28994600"></wpt>
    <wpt lat="55.93845710" lon="12.28996750"></wpt>
    <wpt lat="55.93856530" lon="12.29007480"></wpt>
    <wpt lat="55.93872150" lon="12.29013910"></wpt>
    <wpt lat="55.93886570" lon="12.28975290"></wpt>
    <wpt lat="55.93898590" lon="12.28955980"></wpt>
    <wpt lat="55.93910610" lon="12.28919500"></wpt>
    <wpt lat="55.93861330" lon="12.28883020"></wpt>
    <wpt lat="55.93845710" lon="12.28868000"></wpt>
    <wpt lat="55.93827680" lon="12.28850840"></wpt>
    <wpt lat="55.93809660" lon="12.28842250"></wpt>
    <wpt lat="55.93796440" lon="12.28831520"></wpt>
    <wpt lat="55.93780810" lon="12.28810070"></wpt>
    <wpt lat="55.93755570" lon="12.28790760"></wpt>
    <wpt lat="55.93739950" lon="12.28775730"></wpt>
    <wpt lat="55.93726730" lon="12.28767150"></wpt>
    <wpt lat="55.93707500" lon="12.28760710"></wpt>
    <wpt lat="55.93690670" lon="12.28734970"></wpt>
    <wpt lat="55.93675050" lon="12.28726380"></wpt>
    <wpt lat="55.93649810" lon="12.28713510"></wpt>
    <wpt lat="55.93625770" lon="12.28687760"></wpt>
    <wpt lat="55.93596930" lon="12.28679180"></wpt>
    <wpt lat="55.93587310" lon="12.28719940"></wpt>
    <wpt lat="55.93575290" lon="12.28752130"></wpt>
    <wpt lat="55.93564480" lon="12.28797190"></wpt>
    <wpt lat="55.93554860" lon="12.28833670"></wpt>
    <wpt lat="55.93550050" lon="12.28868000"></wpt>
    <wpt lat="55.93535630" lon="12.28900190"></wpt>
    <wpt lat="55.93515200" lon="12.28936670"></wpt>
    <wpt lat="55.93505580" lon="12.28958120"></wpt>
    <wpt lat="55.93481550" lon="12.29001040"></wpt>
    <wpt lat="55.93468320" lon="12.29033230"></wpt>
    <wpt lat="55.93452700" lon="12.29063270"></wpt>
    <wpt lat="55.93438280" lon="12.29095450"></wpt>
    <wpt lat="55.93425050" lon="12.29121200"></wpt>
    <wpt lat="55.93413040" lon="12.29140520"></wpt>
    <wpt lat="55.93401020" lon="12.29168410"></wpt>
    <wpt lat="55.93389000" lon="12.29189870"></wpt>
    <wpt lat="55.93372170" lon="12.29239220"></wpt>
    <wpt lat="55.93385390" lon="12.29258530"></wpt>
    <wpt lat="55.93409430" lon="12.29295010"></wpt>
    <wpt lat="55.93421450" lon="12.29320760"></wpt>
    <wpt lat="55.93433470" lon="12.29333630"></wpt>
    <wpt lat="55.93445490" lon="12.29350800"></wpt>
    <wpt lat="55.93463520" lon="12.29374400"></wpt>
    <wpt lat="55.93479140" lon="12.29410880"></wpt>
    <wpt lat="55.93491160" lon="12.29419460"></wpt>
    <wpt lat="55.93515200" lon="12.29458090"></wpt>
    <wpt lat="55.93545250" lon="12.29494570"></wpt>
    <wpt lat="55.93571690" lon="12.29505300"></wpt>
    <wpt lat="55.93593320" lon="12.29513880"></wpt>
    <wpt lat="55.93617360" lon="12.29522460"></wpt>
    <wpt lat="55.93622170" lon="12.29537480"></wpt>
    <wpt lat="55.93713510" lon="12.29505300"></wpt>
    <wpt lat="55.93776000" lon="12.29378700"></wpt>
    <wpt lat="55.93904600" lon="12.29531040"></wpt>
    <wpt lat="55.94004350" lon="12.29552500"></wpt>
    <wpt lat="55.94023570" lon="12.29561090"></wpt>
    <wpt lat="55.94019970" lon="12.29591130"></wpt>
    <wpt lat="55.94017560" lon="12.29629750"></wpt>
    <wpt lat="55.94017560" lon="12.29670520"></wpt>
    <wpt lat="55.94017560" lon="12.29713430"></wpt>
    <wpt lat="55.94019970" lon="12.29754200"></wpt>
    <wpt lat="55.94024780" lon="12.29816430"></wpt>
    <wpt lat="55.94051210" lon="12.29842180"></wpt>
    <wpt lat="55.94084860" lon="12.29820720"></wpt>
    <wpt lat="55.94105290" lon="12.29799270"></wpt>
    <wpt lat="55.94123320" lon="12.29777810"></wpt>
    <wpt lat="55.94140140" lon="12.29749910"></wpt>
    <wpt lat="55.94142550" lon="12.29726310"></wpt>
    <wpt lat="55.94147350" lon="12.29687690"></wpt>
    <wpt lat="55.94155760" lon="12.29619020"></wpt>
    <wpt lat="55.94161770" lon="12.29576110"></wpt>
    <wpt lat="55.94148550" lon="12.29531040"></wpt>
    <wpt lat="55.94093270" lon="12.29522460"></wpt>
    <wpt lat="55.94041600" lon="12.29518170"></wpt>
    <wpt lat="55.94056020" lon="12.29398010"></wpt>
    <wpt lat="55.94024780" lon="12.29352950"></wpt>
    <wpt lat="55.94001940" lon="12.29335780"></wpt>
    <wpt lat="55.93992330" lon="12.29325050"></wpt>
    <wpt lat="55.93969490" lon="12.29299300"></wpt>
    <wpt lat="55.93952670" lon="12.29277840"></wpt>
    <wpt lat="55.93928630" lon="12.29260680"></wpt>
    <wpt lat="55.93915410" lon="12.29232780"></wpt>
    <wpt lat="55.93928630" lon="12.29202740"></wpt>
    <wpt lat="55.93933440" lon="12.29174850"></wpt>
    <wpt lat="55.93947860" lon="12.29116910"></wpt>
    <wpt lat="55.93965890" lon="12.29095450"></wpt>
    <wpt lat="55.94001940" lon="12.29061120"></wpt>
    <wpt lat="55.94041600" lon="12.29084730"></wpt>
    <wpt lat="55.94076450" lon="12.29101890"></wpt>
    <wpt lat="55.94080060" lon="12.29065410"></wpt>
    <wpt lat="55.94086060" lon="12.29031080"></wpt>
    <wpt lat="55.94092070" lon="12.28990310"></wpt>
    <wpt lat="55.94099280" lon="12.28975290"></wpt>
    <wpt lat="55.94119710" lon="12.28986020"></wpt>
    <wpt lat="55.94134130" lon="12.28998890"></wpt>
    <wpt lat="55.94147350" lon="12.29007480"></wpt>
    <wpt lat="55.94166580" lon="12.29003190"></wpt>
    <wpt lat="55.94176190" lon="12.28938810"></wpt>
    <wpt lat="55.94183400" lon="12.28893750"></wpt>
    <wpt lat="55.94194220" lon="12.28850840"></wpt>
    <wpt lat="55.94199030" lon="12.28835820"></wpt>
    <wpt lat="55.94215850" lon="12.28859420"></wpt>
    <wpt lat="55.94250700" lon="12.28883020"></wpt>
    <wpt lat="55.94267520" lon="12.28893750"></wpt>
    <wpt lat="55.94284350" lon="12.28902330"></wpt>
    <wpt lat="55.94304770" lon="12.28915210"></wpt>
    <wpt lat="55.94325200" lon="12.28925940"></wpt>
    <wpt lat="55.94348030" lon="12.28953830"></wpt>
    <wpt lat="55.94366060" lon="12.28966710"></wpt>
    <wpt lat="55.94388890" lon="12.28975290"></wpt>
    <wpt lat="55.94399700" lon="12.28994600"></wpt>
    <wpt lat="55.94379280" lon="12.29065410"></wpt>
    <wpt lat="55.94364860" lon="12.29095450"></wpt>
    <wpt lat="55.94350440" lon="12.29127640"></wpt>
    <wpt lat="55.94340820" lon="12.29155540"></wpt>
    <wpt lat="55.94331210" lon="12.29198450"></wpt>
    <wpt lat="55.94315590" lon="12.29269260"></wpt>
    <wpt lat="55.94310780" lon="12.29318610"></wpt>
    <wpt lat="55.94301170" lon="12.29361530"></wpt>
    <wpt lat="55.94292760" lon="12.29408740"></wpt>
    <wpt lat="55.94290350" lon="12.29436630"></wpt>
    <wpt lat="55.94287950" lon="12.29453800"></wpt>
    <wpt lat="55.94283140" lon="12.29533190"></wpt>
    <wpt lat="55.94274730" lon="12.29606150"></wpt>
    <wpt lat="55.94278340" lon="12.29621170"></wpt>
    <wpt lat="55.94280740" lon="12.29649060"></wpt>
    <wpt lat="55.94284350" lon="12.29679100"></wpt>
    <wpt lat="55.94284350" lon="12.29734890"></wpt>
    <wpt lat="55.94308380" lon="12.29837890"></wpt>
    <wpt lat="55.94315590" lon="12.29852910"></wpt>
    <wpt lat="55.94263920" lon="12.29906550"></wpt>
    <wpt lat="55.94237480" lon="12.29910850"></wpt>
    <wpt lat="55.94220660" lon="12.29915140"></wpt>
    <wpt lat="55.94208640" lon="12.29902260"></wpt>
    <wpt lat="55.94196620" lon="12.29887240"></wpt>
    <wpt lat="55.94176190" lon="12.29794970"></wpt>
    <wpt lat="55.94156970" lon="12.29760640"></wpt>
</gpx>

Utilizo GPSies.com para crear el archivo base para los datos gpx. Sin embargo, se requiere un poco de limpieza.

Activar ejecutando el simulador y eligiendo su archivo


(fuente: castleandersen.dk )

Castillo de Niels
fuente
4

Abra la aplicación iOS Simulator desde el menú Depurar -> Ubicación ->

  1. Ninguna
  2. Ubicación personalizada
  3. Tiendas Apple ...
Abo3atef
fuente
4

Puede compartir fácilmente cualquier ubicación deseada desde la aplicación macOS Maps al simulador de Xcode .

  1. Desde Xcode, ejecute la aplicación en el simulador como lo hace habitualmente.
  2. Abra la aplicación de mapas en macOS (para mayor comodidad, suelo hacer un nuevo escritorio donde tengo tanto el simulador como la aplicación de mapas).
  3. Dentro de los mapas (macOS), haga clic prolongado en cualquier punto del mapa o busque un lugar para dejar que el mapa dibuje un alfiler donde lo necesite.
  4. Haga clic en el pin, luego en el icono de información (i) ( ver imagen ).
  5. En la parte superior derecha de la vista de información, haga clic en el icono de compartir.
  6. Comparta la ubicación con el simulador ( ver imagen ).
  7. Confirma y disfruta :)

Esto le permite probar algunas ubicaciones rápidamente, tener una comprensión de dónde está geográficamente la ubicación (por ejemplo, para probar la geovalla) y decidir en tiempo de ejecución dónde ir a continuación (por ejemplo, para depurar y ajustar cosas).

Probé esto en MacOS Catalina 10.15.4 y Xcode 11.4.

AlessandroSteri
fuente
3

La amable gente de FutureTap ha hecho que FTLocationSimulator esté disponible de forma gratuita en GitHub . Le permite preparar una ruta de prueba utilizando, por ejemplo, Google Earth, y luego hacer que el simulador envíe estas coordenadas a su aplicación.

Escribí una publicación de blog sobre cómo usar FTLocationSimulator para cambiar fácilmente entre múltiples rutas durante la prueba de las funciones de ubicación.

Claus Broch
fuente
3

puede agregar archivos gpx a su proyecto y usarlo:
editar esquema> opciones> permitir simulación de ubicación> elegir el nombre del archivo que contiene, por ejemplo:

<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode"> 
    <wpt lat="41.92296" lon="-87.63892"></wpt>
</gpx>

opcionalmente, simplemente codifique los valores lat / lon que devuelve el administrador de ubicación. Sin embargo, esto es de estilo antiguo.

por lo que no lo agregará al simulador, sino a su proyecto Xcode.

Zsolt
fuente
2
¿Cómo puedo usar la ubicación predefinida? ¿Puedes explicar en detalle? Quiero saberlo.
Shreyash Mahajan
haga clic en xcode y luego en producto> esquemas> Editar esquema> ubicación central
Mumthezir VP
1

Al momento de escribir esto, la opción de ubicación para el simulador IOS se ha movido a Funciones -> Ubicación -> Ubicación personalizada

guardagujas
fuente
0

Mejor tarde que nunca :)

Me acabo de encontrar con este iSimulate que te permite enviar una ubicación falsa a la aplicación. La solución NO es gratuita.

> Q: How does iSimulate work? 

> A: When added to your project, the iSimulate
> SDK library creates a listening server
> on your iPhone Simulator that waits
> for a connection from an iPhone/iPod
> running the iSimulate client. When
> such connection is established, the
> iSimulate client running on your
> iPhone/iPod captures all data from the
> accelerometer sensor, the touch
> events, the location and device ID and
> streams them to the server. The
> iSimulate SDK library then recreates
> all input events synthetically. This
> is entirely transparent to your
> application and does not interfere
> with your application's functionality.

De todos modos, estoy planeando conseguir esto. se actualizará más pronto!

prakash
fuente
Me acabo de comunicar con los desarrolladores: "En las Opciones de iSimulate, accesible desde el botón superior derecho en la pantalla" Seleccionar computadora para conectarse ", puede seleccionar una de las otras cuatro ubicaciones para usar". Entonces, realmente no es de mucha ayuda.
Simon Woodside
bitbucket.org/gnucoop/xamarin-ios-simulator-enhancements Esto ayuda a simular ubicaciones de forma gratuita
Pierre
0

¿Dónde quieres establecer tu ubicación? puede usar mapkit api para mostrar u ubicaciones. consulte icodeblog.com para obtener más detalles sobre cómo utilizar mapkit. También puede almacenar sus coordenadas deseadas, simplemente cree un objeto CLLocation2D * ubicación; location.longitude = su valor de longitud deseado; location.latitude = su valor de latitud deseado;

Rahul Vyas
fuente
Esta era una vieja pregunta de cuando era nuevo en el SDK. Ahora me doy cuenta de que no hay soporte para automatizar CoreLocation en el Simulador, lo cual es una pena.
Cliff