Imposta la posizione in iPhone Simulator


124

Come posso impostare la posizione (così come viene rilevata nei servizi CoreLocation) nel simulatore iPhone?


Ho aggiunto un metodo per Xcode 6. stackoverflow.com/questions/19694205/...
ohmy

Qualcuno è riuscito a farlo funzionare in React native, simulator?
Nikos

Con iOS 13 beta 2, vedevo solo le opzioni "Nessuno" e "Personalizzato". Qualcun altro ha questo problema? stackoverflow.com/q/56733625/1364053
nr5

Risposte:


122

A partire da iOS 5, il simulatore ha una posizione configurabile.

Nel menu Debug, l'ultima voce è "Posizione"; questo ti dà un sottomenu con:

  • Nessuna
  • Posizione personalizzata
  • Negozi Apple
  • Mela
  • Giro in bicicletta della città
  • City Run
  • Freeway Drive

La posizione personalizzata ti consente di inserire un valore Lat / Long. Giro in bicicletta, City Run e Freeway Drive sono la simulazione di un luogo in movimento (a Cupertino, ovviamente).

Ovviamente, questo non aiuta con il debug per iOS 4 (o versioni precedenti); ma è un netto miglioramento!


dov'è il menu di debug nel simulatore IOS?
Lucky_girl

1
funziona ma è per il menu di debug sul simulatore, non per quello su xcode
Lance Samaria,

2
Per il simulatore iOS, ora si trova in "Caratteristiche"
J. Saw

85
  1. Esegui il progetto in iPhone Simulator
  2. Crea nel file TextEdit seguendo il file, chiamalo MyOffice per esempio. Crea estensione come .gpx inserisci qui la descrizione dell'immagine

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

  3. Seleziona in Xcode nell'area Simula Add GPX File to Project...inserisci qui la descrizione dell'immagine

  4. Aggiungi il file creato dal menu al progetto.
  5. Ora puoi vedere la tua posizione nell'area di simulazione:inserisci qui la descrizione dell'immagine

TextEdit non salva il file .gpx. Come faccio?

2
salvalo come .txt (o .xml) e rinominalo in .gpx
berillio

7
Grazie! Molto facile, funziona alla grande. Nel caso in cui qualcun altro lo utilizzi, ecco il file GPX di esempio nel testo in modo da poterlo copiare e incollare: <? Xml version = "1.0"?> <Gpx version = "1.0" creator = "Name"> <wpt lat = "" lon = ""> <name> Office </name> </wpt> </gpx>
RyanG,

1
Mi hai salvato la giornata "+1".
SAHIL

3
possiamo includere il tempo in questo? Voglio provare il metodo startMonitoringSignificantLocationChanges
Durgaprasad

17

Nella richiamata del mio delegato, controllo per vedere se sono in esecuzione in un simulatore ( #if TARGET_ IPHONE_SIMULATOR) e, in tal caso, fornisco il mio, pre-cercato, Lat / Long. Per quanto ne so, non c'è altro modo.


3
A partire da Xcode 4.2, è ora disponibile un modo nel Debugmenu del simulatore utilizzando la Locationvoce che consente di impostare una posizione personalizzata o di selezionare da alcune corse e posizioni predefinite.
programma

17

nel menu Simulatore iOS, vai su Debug -> Posizione -> Posizione personalizzata. Qui puoi impostare la latitudine e la longitudine e testare l'app di conseguenza. Funziona con mapkit e anche con CLLocationManager.


10

XCode 11.3 e versioni precedenti:

Debug -> Location -> Custom Location

inserisci qui la descrizione dell'immagine

XCode 11.4+:

Features -> Location -> Custom Location

inserisci qui la descrizione dell'immagine

Per scoprire quale versione di XCode possiedi

$ /usr/bin/xcodebuild -version

5

Prima di iOS 5 potresti farlo in codice:

Uso questo frammento appena prima dell'inizio @implementationdella lezione in cui ho bisogno dei miei falsi dati di intestazione e posizione.

#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

Dopo iOS 5, includi semplicemente un file GPX nel tuo progetto in questo modo per avere la posizione aggiornata 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>

Uso GPSies.com per creare il file di base per i dati gpx. Tuttavia, è necessario un po 'di pulizia.

Attiva eseguendo il simulatore e scegliendo il tuo file


(fonte: castleandersen.dk )


4

Apri l'applicazione iOS Simulator dal menu Debug -> Posizione ->

  1. Nessuna
  2. Posizione personalizzata
  3. Negozi Apple ...

4

Puoi condividere facilmente qualsiasi posizione desiderata dall'applicazione macOS Maps al simulatore Xcode .

  1. Da Xcode esegui l'applicazione nel simulatore come fai di solito.
  2. Apri l'applicazione mappe su macOS (per comodità di solito creo un nuovo desktop in cui ho sia il simulatore che l'applicazione mappa).
  3. All'interno delle mappe (macOS), fai clic a lungo su qualsiasi punto della mappa o cerca un luogo per consentire alla mappa di disegnare un segnaposto dove ne hai bisogno.
  4. Fare clic sulla puntina, quindi sull'icona delle informazioni (i) ( vedi immagine ).
  5. In alto a destra nella visualizzazione delle informazioni, fai clic sull'icona di condivisione.
  6. Condividi la posizione con il simulatore ( vedi immagine ).
  7. Conferma e divertiti :)

Ciò consente di testare rapidamente alcune posizioni, avere una comprensione di dove si trova geograficamente la posizione (ad esempio per testare il geofencing) e decidere in fase di esecuzione dove andare dopo (ad esempio per il debug e la messa a punto delle cose).

Testato su MacOS Catalina 10.15.4 e Xcode 11.4.


3

I gentili ragazzi di FutureTap hanno reso FTLocationSimulator disponibile gratuitamente su GitHub . Ti consente di preparare un percorso di prova utilizzando ad esempio Google Earth, quindi fare in modo che il simulatore fornisca queste coordinate alla tua app.

Ho scritto un post sul blog su come utilizzare FTLocationSimulator per passare facilmente tra più percorsi durante il test delle funzionalità di posizione.


3

puoi aggiungere file gpx al tuo progetto e usarlo:
modifica schema> opzioni> consenti simulazione posizione> scegli il nome del file che contiene ad esempio:

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

opzionalmente basta codificare i valori lat / lon restituiti dal gestore della posizione. Questo però è vecchio stile.

quindi non lo aggiungerai al simulatore, ma al tuo progetto Xcode.


2
Come posso utilizzare la posizione predefinita. puoi spiegare in dettaglio ??? Voglio saperlo.
Shreyash Mahajan

fai clic su xcode quindi su prodotto> schemi> Modifica schema> posizione principale
Mumthezir VP

1

Al momento della stesura di questo, l'opzione di posizione per il simulatore IOS è stata spostata in Funzionalità -> Posizione -> Posizione personalizzata


0

Meglio tardi che mai :)

Mi sono appena imbattuto in questo iSimulate che ti consente di inviare una posizione falsa all'app. La soluzione NON è 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.

Comunque, ho intenzione di prenderlo. aggiornerà più presto!


Ho appena contattato gli sviluppatori: "Nelle Opzioni di iSimulate, accessibile dal pulsante in alto a destra nella schermata" Seleziona computer a cui connettersi ", puoi selezionare una delle altre quattro posizioni da utilizzare." Quindi, non molto di aiuto davvero.
Simon Woodside

bitbucket.org/gnucoop/xamarin-ios-simulator-enhancements Questo aiuta a simulare posizioni gratuitamente
Pierre

0

Dove vuoi impostare la tua posizione? puoi usare mapkit api per mostrare la tua posizione. vedere icodeblog.com per maggiori dettagli su come usare mapkit. Inoltre è possibile memorizzare le coordinate desiderate semplicemente creare un oggetto CLLocation2D * posizione; location.longitude = il valore di longitudine desiderato; location.latitude = il valore di latitudine desiderato;


Questa era una vecchia domanda da quando ero nuovo all'SDK. Ora mi rendo conto che non c'è supporto per l'automazione di CoreLocation nel simulatore, il che è un peccato.
Cliff
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.