Legen Sie den Speicherort im iPhone Simulator fest


123

Wie kann ich den Standort (wie er in den CoreLocation-Diensten erfasst wird) im iPhone Simulator festlegen?


Ich habe eine Methode für Xcode 6 hinzugefügt
Ohmy

Hat es jemand geschafft, dies in React native, Simulator zum Laufen zu bringen?
Nikos

Mit iOS 13 Beta 2 konnte ich nur die Optionen "Keine" und "Benutzerdefiniert" sehen. Hat noch jemand dieses Problem? stackoverflow.com/q/56733625/1364053
nr5

Antworten:


121

Ab iOS 5 verfügt der Simulator über einen konfigurierbaren Speicherort.

Im Debug-Menü lautet der letzte Eintrag "Location". Dies gibt Ihnen ein Untermenü mit:

  • Keiner
  • Benutzerdefinierter Speicherort
  • Apple Stores
  • Apfel
  • City Radtour
  • Stadtlauf
  • Autobahnfahrt

Mit Benutzerdefinierter Speicherort können Sie einen Lat / Long-Wert eingeben. Radtour, City Run und Freeway Drive simulieren einen sich bewegenden Ort (natürlich in Cupertino).

Dies hilft natürlich nicht beim Debuggen für iOS 4 (oder früher). aber es ist definitiv eine Verbesserung!


Wo ist das Debug-Menü im IOS-Simulator?
Lucky_girl

1
Dies funktioniert, aber es ist für das Debug-Menü auf dem Simulator nicht das auf xcode
Lance Samaria

2
Für iOS-Simulator befindet es sich jetzt unter "Features"
J. Saw

85
  1. Führen Sie das Projekt im iPhone Simulator aus
  2. Erstellen Sie in der TextEdit-Datei die folgende Datei, nennen Sie sie beispielsweise MyOffice. Machen Sie die Erweiterung als .gpx Geben Sie hier die Bildbeschreibung ein

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

  3. Wählen Sie in Xcode im Bereich Simulieren Add GPX File to Project...Geben Sie hier die Bildbeschreibung ein

  4. Fügen Sie die erstellte Datei aus dem Menü zum Projekt hinzu.
  5. Jetzt können Sie Ihren Standort im Bereich Simulieren sehen:Geben Sie hier die Bildbeschreibung ein

TextEdit speichert die Datei .gpx nicht. Wie mache ich das

2
Speichern Sie es als .txt (oder .xml) und benennen Sie es dann in .gpx
Beryllium

7
Vielen Dank! Sehr einfach, funktioniert super. Falls jemand anderes dies verwendet, finden Sie hier die GPX-Beispieldatei im Text, damit Sie sie kopieren und einfügen können: <? Xml version = "1.0"?> <Gpx version = "1.0" creator = "Name"> <wpt lat = "" lon = ""> <name> Office </ name> </ wpt> </ gpx>
RyanG

1
Du hast meinen Tag "+1" gerettet.
SAHIL

3
Können wir Zeit in diese einbeziehen? Ich möchte startMonitoringSignificantLocationChanges Methode
Durgaprasad

17

In meinem Delegaten-Rückruf überprüfe ich, ob ich in einem Simulator ( #if TARGET_ IPHONE_SIMULATOR) ausgeführt werde, und wenn ja, gebe ich mein eigenes, vorab nachgeschlagenes Lat / Long an. Meines Wissens gibt es keinen anderen Weg.


3
Ab Xcode 4.2 gibt es jetzt eine Möglichkeit im DebugMenü des Simulators, den LocationEintrag zu verwenden, mit dem Sie einen benutzerdefinierten Standort festlegen oder aus vordefinierten Fahrten und Standorten auswählen können.
Programm

16

Gehen Sie im iOS Simulator-Menü zu Debug -> Speicherort -> Benutzerdefinierter Speicherort. Dort können Sie den Breiten- und Längengrad einstellen und die App entsprechend testen. Dies funktioniert mit Mapkit und auch mit CLLocationManager.


10

XCode 11.3 und früher:

Debug -> Location -> Custom Location

Geben Sie hier die Bildbeschreibung ein

XCode 11.4+:

Features -> Location -> Custom Location

Geben Sie hier die Bildbeschreibung ein

Um herauszufinden, welche XCode-Version Sie haben

$ /usr/bin/xcodebuild -version

5

Vor iOS 5 können Sie dies im Code tun:

Ich benutze dieses Snippet kurz vor dem @implementationder Klasse, in der ich meine gefälschten Kurs- und Standortdaten benötige.

#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

Fügen Sie nach iOS 5 einfach eine GPX-Datei wie folgt in Ihr Projekt ein, damit der Speicherort kontinuierlich aktualisiert wird. 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>

Ich benutze GPSies.com , um die Basisdatei für die GPX-Daten zu erstellen. Ein bisschen Aufräumen ist jedoch erforderlich.

Aktivieren Sie diese Option, indem Sie den Simulator ausführen und Ihre Datei auswählen


(Quelle: castleandersen.dk )


4

Öffnen Sie die iOS Simulator-Anwendung über das Debug-Menü -> Speicherort ->

  1. Keiner
  2. Benutzerdefinierter Speicherort
  3. Apple Stores ...

4

Sie können ganz einfach teilen jede gewünschte Position aus der macOS Maps - Anwendung auf den Xcode - Simulator .

  1. Führen Sie die Anwendung von Xcode aus wie gewohnt im Simulator aus.
  2. Öffnen Sie die Kartenanwendung unter macOS (der Einfachheit halber erstelle ich normalerweise einen neuen Desktop, auf dem ich sowohl den Simulator als auch die Kartenanwendung habe).
  3. Klicken Sie in den Karten (macOS) lange auf einen beliebigen Punkt auf der Karte oder suchen Sie nach einem Ort, an dem die Karte einen Stift zeichnen kann, an dem Sie ihn benötigen.
  4. Klicken Sie auf den Stift und dann auf das Informationssymbol (i) ( siehe Bild ).
  5. Klicken Sie oben rechts in der Informationsansicht auf das Freigabesymbol.
  6. Teilen Sie den Standort mit dem Simulator ( siehe Bild ).
  7. Bestätigen und genießen :)

Auf diese Weise können Sie einige Standorte schnell testen, wissen, wo sich der Standort geografisch befindet (z. B. zum Testen von Geofencing) und zur Laufzeit entscheiden, wohin Sie als Nächstes gehen möchten (z. B. zum Debuggen und zur Feinabstimmung).

Getestet unter MacOS Catalina 10.15.4 und Xcode 11.4.


3

Die freundlichen Leute bei FutureTap haben den FTLocationSimulator kostenlos bei GitHub zur Verfügung gestellt . Sie können eine Testroute beispielsweise mit Google Earth vorbereiten und diese Koordinaten dann vom Simulator Ihrer App zuführen lassen.

Ich habe einen Blog-Beitrag darüber geschrieben, wie Sie mit FTLocationSimulator beim Testen der Standortfunktionen einfach zwischen mehreren Routen wechseln können.


3

Sie können Ihrem Projekt GPX-Dateien hinzufügen und diese verwenden:
Schema bearbeiten> Optionen> Standortsimulation zulassen> Dateinamen auswählen, der beispielsweise Folgendes enthält:

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

Optional können Sie nur die vom Standortmanager zurückgegebenen Lat / Lon-Werte fest codieren. Dies ist jedoch ein alter Stil.

Sie werden es also nicht zum Simulator hinzufügen, sondern zu Ihrem Xcode-Projekt.


2
Wie kann ich den vordefinierten Ort verwenden? Kannst du das bitte im Detail erklären? Ich möchte es wissen.
Shreyash Mahajan

Klicken Sie auf xcode und dann auf Produkt> Schemata> Schema bearbeiten> Kernspeicherort
Mumthezir VP

1

Zum Zeitpunkt des Schreibens wurde die Standortoption für den IOS-Simulator in Features -> Standort -> Benutzerdefinierter Standort verschoben


0

Besser spät als nie :)

Ich bin gerade auf dieses iSimulate gestoßen , mit dem Sie einen falschen Standort an die App senden können. Die Lösung ist NICHT kostenlos.

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

Wie auch immer, ich plane das zu bekommen. wird bald mehr aktualisieren!


Ich habe gerade die Entwickler kontaktiert: "In den Optionen von iSimulate, auf die über die Schaltfläche oben rechts im Bildschirm" Computer zum Verbinden auswählen "zugegriffen werden kann, können Sie einen von vier anderen zu verwendenden Speicherorten auswählen." Also nicht viel Hilfe wirklich.
Simon Woodside

bitbucket.org/gnucoop/xamarin-ios-simulator-enhancements Dies hilft bei der kostenlosen Simulation von Standorten
Pierre

0

Wo möchten Sie Ihren Standort festlegen? Sie können Mapkit API verwenden, um Ihre Standorte anzuzeigen. Weitere Informationen zur Verwendung von Mapkit finden Sie unter icodeblog.com. Sie können auch Ihre gewünschten Koordinaten speichern, indem Sie einfach ein Objekt CLLocation2D * erstellen. location.longitude = Ihr gewünschter Längengradwert; location.latitude = Ihr gewünschter Breitengradwert;


Dies war eine alte Frage, als ich neu im SDK war. Mir ist jetzt klar, dass es keine Unterstützung für die Automatisierung von CoreLocation im Simulator gibt, was eine Schande ist.
Klippe
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.