Simulating location updates on the iPhone Simulator
Asked Answered
P

8

22

I want to allow users to set the GPS information on the iPhone Simulator via GUI.

But I'm not sure how to archieve this - it seems that this tool called iSimulate does this somehow by installing an own SDK. But I can't figure out how they "override" / "hack" the simulator by that.

Thanks!

Phebe answered 13/1, 2010 at 11:23 Comment(0)
C
12

As far as I know, iSimulate is not employing any hacks. It is code that runs within your app on the Simulator which communicates with a device over the network. When it receives messages from the device (touches, GPS, acceleration) it simulates those events by calling your app's code as though the system had triggered them.

For example, to receive GPS location updates you must create an instance of CLLocationManager and then configure one of your classes to be its delegate. Well, on the iPhone Simulator you can instead start code that sends fake messages to your delegate instead. If you just call a delegate's method like this:

[delegate locationManager:nil didUpdateToLocation:newLocation fromLocation:oldLocation];

Your code won't have to know that the location update is fake. If you want to get fancy, you could create a new class that implements all the public methods of CLLocationManager but which sends fake messages instead. (Since Objective-C is dynamically typed, it won't need to be a subclass, as long as it responds to all the messages you send.)

As a side note, you can use these compiler macros to keep code simulator-only:

#if TARGET_IPHONE_SIMULATOR
   locationManager = (id)[[MyFakeLocationManager alloc] init];
#else
   locationManager = [[CLLocationManager alloc] init];
#endif
Chagrin answered 15/1, 2010 at 0:35 Comment(0)
A
48

Added a second answer since there are now integrated features in Xcode (≥4.2). There are two ways to simulate location updates:

  • In the iOS Simulator, under "Debug/Location" you're able to specify a constant latitude/longitude or select several predefined profiles like "City Run" or "Freeway Drive".
  • In Xcode there's a new location icon in the debugger, right next to the Step Out button. It lets you select several hardcoded cities worldwide and add a custom GPX file to your project. The nice thing about location simulation in Xcode is that it also works on the device (just don't forget to turn it off again otherwise your auto timezone will be wrong!). The custom GPX file is nice, too, although it sometimes crashes Xcode if the GPX file is not recognized. Make sure you use <wpt> tags only:
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode"> 
  <wpt lat="47.52789018096815" lon="7.385249894876031"></wpt>
  <wpt lat="47.52720984945248" lon="7.382647784661411"></wpt>
  ...
</gpx>
Albuquerque answered 20/2, 2012 at 9:50 Comment(0)
C
12

As far as I know, iSimulate is not employing any hacks. It is code that runs within your app on the Simulator which communicates with a device over the network. When it receives messages from the device (touches, GPS, acceleration) it simulates those events by calling your app's code as though the system had triggered them.

For example, to receive GPS location updates you must create an instance of CLLocationManager and then configure one of your classes to be its delegate. Well, on the iPhone Simulator you can instead start code that sends fake messages to your delegate instead. If you just call a delegate's method like this:

[delegate locationManager:nil didUpdateToLocation:newLocation fromLocation:oldLocation];

Your code won't have to know that the location update is fake. If you want to get fancy, you could create a new class that implements all the public methods of CLLocationManager but which sends fake messages instead. (Since Objective-C is dynamically typed, it won't need to be a subclass, as long as it responds to all the messages you send.)

As a side note, you can use these compiler macros to keep code simulator-only:

#if TARGET_IPHONE_SIMULATOR
   locationManager = (id)[[MyFakeLocationManager alloc] init];
#else
   locationManager = [[CLLocationManager alloc] init];
#endif
Chagrin answered 15/1, 2010 at 0:35 Comment(0)
S
12

The iOS Simulator has full location simulation built in. From the "Debug" menu, you can explore your various location options.


Original answer posted while under NDA.

Check out the bottom right entry on this page. I'm under the NDA so I can't say anything except that it has saved me significant gas money. :)

1: http://developer.apple.com/technologies/ios5/

Scholz answered 7/8, 2011 at 2:41 Comment(2)
Both links are 404edErdrich
I originally answered this while iOS 5 was under NDA. Those pages just listed the major features that were upcoming.Scholz
A
7

You might wanna check out my FTLocationSimulator at http://github.com/futuretap/FTLocationSimulator

It reads a KML file generated by Google Earth to provide continuous location updates. It also updates the blue userLocation dot in a MKMapView with the simulated location updates.

Albuquerque answered 27/10, 2010 at 8:39 Comment(1)
I provided a second answer describing the now-integrated location simulation features in Xcode ≥4.2: https://mcmap.net/q/568005/-simulating-location-updates-on-the-iphone-simulatorAlbuquerque
S
4

In Xcode 4.2 we can simulate . There is a location symbol on the debug area (while you run the app). There are some predefined locations . Also we can add new GPX files

Spout answered 15/11, 2011 at 12:16 Comment(0)
C
0

Hy stephanos,

The information of the GPS cannot be changed. It is protected and I don't believe that iSimulate can change it.

As far as I know, iSimulate is a tool to send commands from a device to the iPhone simulator, like accelerometer, touches, orientation, etc, including the current GPS location.

The SDK of iSimulate works with the app. You have to install the app in the device and add the sdk to your project, so you don't need to buld and run your app to the device all the time that you would be doing normally.

Cheers,
VFN

Canorous answered 13/1, 2010 at 12:43 Comment(0)
C
0

Check out https://github.com/100grams/CoreLocationUtils

Communard answered 23/6, 2011 at 16:1 Comment(0)
F
0

Just to extend @Ortwin Gentz answer:

If you need further config of every gps point in your gpx file. Take a look at this page:

http://www.topografix.com/gpx_manual.asp

It tells you exactly how you can provide further details like speed and height of a specific point.

Fearfully answered 21/10, 2014 at 9:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.