Définir l'emplacement dans iPhone Simulator

124

Comment puis-je définir l'emplacement (tel qu'il est récupéré dans les services CoreLocation) dans le simulateur iPhone?

Falaise
la source
J'ai ajouté une méthode pour Xcode 6. stackoverflow.com/questions/19694205/…
Ohmy
Quelqu'un a-t-il réussi à faire fonctionner cela dans le simulateur natif de React?
Nikos
Avec iOS 13 bêta 2, je ne pouvais voir que les options «Aucun» et «Personnalisé». Est-ce que quelqu'un d'autre à ce problème? stackoverflow.com/q/56733625/1364053
nr5

Réponses:

122

À partir d'iOS 5, le simulateur a un emplacement configurable.

Dans le menu Déboguer, la dernière entrée est "Location"; cela vous donne un sous-menu avec:

  • Aucun
  • Emplacement personnalisé
  • Magasins de pommes
  • Pomme
  • Balade à vélo en ville
  • City Run
  • Freeway Drive

L'emplacement personnalisé vous permet d'entrer une valeur Lat / Long. Balade à vélo, City Run et Freeway Drive sont des simulations d'un lieu en mouvement (à Cupertino, bien sûr).

Bien sûr, cela ne contribue en rien au débogage pour iOS 4 (ou version antérieure); mais c'est une nette amélioration!

Robert Altman
la source
où est le menu de débogage dans le simulateur IOS?
Lucky_girl
1
cela fonctionne mais c'est pour le menu de débogage sur le simulateur pas celui sur xcode
Lance Samaria
2
Pour le simulateur iOS, il se trouve maintenant sous "Fonctionnalités"
J. Saw
85
  1. Exécuter le projet dans iPhone Simulator
  2. Créez dans le fichier TextEdit le fichier suivant, appelez-le MyOffice par exemple. Faire l'extension en .gpx entrez la description de l'image ici

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

  3. Sélectionnez dans Xcode dans la zone Simuler Add GPX File to Project...entrez la description de l'image ici

  4. Ajouter le fichier créé du menu au projet.
  5. Vous pouvez maintenant voir votre emplacement dans la zone Simuler:entrez la description de l'image ici
béryllium
la source
TextEdit n'enregistre pas le fichier .gpx. Comment je fais?
2
enregistrez-le au format .txt (ou .xml), puis renommez-le en .gpx
béryllium
7
Merci! Très facile, fonctionne très bien. Si quelqu'un d'autre l'utilise, voici l'exemple de fichier GPX sous forme de texte afin que vous puissiez le copier et le coller: <? Xml version = "1.0"?> <Gpx version = "1.0" creator = "Name"> <wpt lat = "" lon = ""> <name> Bureau </name> </wpt> </gpx>
RyanG
1
Vous avez sauvé ma journée "+1".
SAHIL
3
pouvons-nous y inclure du temps? Je veux tester la méthode
startMonitoringSignificantLocationChanges
17

Dans mon rappel de délégué, je vérifie si j'exécute dans un simulateur ( #if TARGET_ IPHONE_SIMULATOR) et si c'est le cas, je fournis mon propre, pré-recherché, Lat / Long. À ma connaissance, il n'y a pas d'autre moyen.

Ben Gottlieb
la source
3
À partir de Xcode 4.2, il existe maintenant un moyen dans le Debugmenu du simulateur en utilisant l' Locationentrée qui permet de définir un emplacement personnalisé ou de sélectionner parmi certains manèges et emplacements prédéfinis.
programme du
17

dans le menu du simulateur iOS, accédez à Déboguer -> Emplacement -> Emplacement personnalisé. Là, vous pouvez définir la latitude et la longitude et tester l'application en conséquence. Cela fonctionne avec mapkit et aussi avec CLLocationManager.

Ravi Chokshi
la source
10

XCode 11.3 et antérieurs:

Debug -> Location -> Custom Location

entrez la description de l'image ici

XCode 11.4+:

Features -> Location -> Custom Location

entrez la description de l'image ici

Pour connaître la version de XCode dont vous disposez

$ /usr/bin/xcodebuild -version
Samuel Hulla
la source
5

Avant iOS 5, vous pouviez le faire en code:

J'utilise cet extrait juste avant le @implementationde la classe où j'ai besoin de mes fausses données de titre et de localisation.

#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

Après iOS 5, incluez simplement un fichier GPX dans votre projet comme celui-ci pour que l'emplacement soit mis à jour en continu 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>

J'utilise GPSies.com pour créer le fichier de base des données gpx. Un peu de nettoyage est cependant nécessaire.

Activez en exécutant le simulateur et en choisissant votre fichier


(source: castleandersen.dk )

Château de Niels
la source
4

Ouvrez l'application iOS Simulator à partir du menu de débogage -> Emplacement ->

  1. Aucun
  2. Emplacement personnalisé
  3. Magasins Apple ...
Abo3atef
la source
4

Vous pouvez facilement partager n'importe quel emplacement souhaité depuis l' application macOS Maps vers le simulateur Xcode .

  1. Depuis Xcode, exécutez l'application dans le simulateur comme vous le faites habituellement.
  2. Ouvrez l'application de cartes sur macOS (pour plus de commodité, je crée généralement un nouveau bureau sur lequel j'ai à la fois le simulateur et l'application de carte).
  3. À l'intérieur des cartes (macOS), cliquez longuement sur n'importe quel point de la carte ou recherchez un endroit pour laisser la carte dessiner une épingle là où vous en avez besoin.
  4. Cliquez sur l'épingle, puis sur l'icône d'information (i) ( voir image ).
  5. En haut à droite de la vue des informations, cliquez sur l'icône de partage.
  6. Partagez l'emplacement avec le simulateur ( voir image ).
  7. Confirmez et appréciez :)

Cela vous permet de tester rapidement certains emplacements, d'avoir une compréhension géographique de l'emplacement géographique (par exemple pour tester le géorepérage) et de décider au moment de l'exécution où aller ensuite (par exemple pour le débogage et les réglages fins).

Testé sur MacOS Catalina 10.15.4 et Xcode 11.4.

AlessandroSteri
la source
3

Les gentils gens de FutureTap ont rendu le FTLocationSimulator disponible gratuitement sur GitHub . Il vous permet de préparer un itinéraire de test en utilisant par exemple Google Earth, puis de demander au simulateur de fournir ces coordonnées à votre application.

J'ai écrit un article de blog sur la façon d'utiliser FTLocationSimulator pour basculer facilement entre plusieurs itinéraires lors du test des fonctionnalités de localisation.

Claus Broch
la source
3

vous pouvez ajouter des fichiers gpx à votre projet et l'utiliser:
modifier le schéma> options> autoriser la simulation d'emplacement> choisir le nom de fichier qui contient par exemple:

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

éventuellement, codez simplement en dur les valeurs lat / lon qui sont renvoyées par le gestionnaire d'emplacement. C'est un style ancien.

vous ne l'ajouterez donc pas au simulateur, mais à votre projet Xcode.

Zsolt
la source
2
Comment puis-je utiliser l'emplacement prédéfini. pouvez-vous expliquer en détail ??? Je veux le savoir.
Shreyash Mahajan
cliquez sur xcode puis sur produit> schémas> Modifier le schéma> emplacement principal
Mumthezir VP
1

Au moment d'écrire ces lignes, l'option d'emplacement pour le simulateur IOS a été déplacée vers Fonctionnalités -> Emplacement -> Emplacement personnalisé

locotracteur
la source
0

Mieux vaut tard que jamais :)

Je viens de tomber sur cet iSimulate qui vous permet d'envoyer un faux emplacement à l'application. La solution n'est PAS gratuite.

> 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.

Quoi qu'il en soit, je prévois de l'obtenir. mettra à jour plus bientôt!

prakash
la source
Je viens de contacter les développeurs: "Dans les Options d'iSimulate, accessibles à partir du bouton en haut à droite de l'écran" Sélectionner l'ordinateur auquel se connecter ", vous pouvez sélectionner l'un des quatre autres emplacements à utiliser." Donc, pas vraiment d'aide.
Simon Woodside
bitbucket.org/gnucoop/xamarin-ios-simulator-enhancements Cela permet de simuler des emplacements gratuitement
Pierre
0

Où voulez-vous définir votre emplacement? vous pouvez utiliser mapkit api pour afficher votre emplacement. voir icodeblog.com pour plus de détails sur l'utilisation de mapkit. Vous pouvez également stocker vos coordonnées souhaitées en créant simplement un objet emplacement CLLocation2D *; location.longitude = votre valeur de longitude souhaitée; location.latitude = votre valeur de latitude souhaitée;

Rahul Vyas
la source
C'était une vieille question du moment où j'étais nouveau au SDK. Je réalise maintenant qu'il n'y a pas de support pour l'automatisation de CoreLocation dans le simulateur, ce qui est dommage.
Cliff