Mock GPS location on IOS device - ios

My IOS app is location depend. I have to test the app by setting different fake GPS locations on real IOS 9.3.1 devices. I searched Fake location app but nothing worked as expected. Most of the app are related to take photo and share on fb or twitter with fake location. These app are not changing the device gps location
My client need to test the app in different location. He is able to do the same in android and expecting the same from IOS. Any idea apart from debug mode.
Is it possible to set fake location in IOS real device.

You can do this if you have the device connected to the computer in debug mode through XCode. Go to Debug -> Simulate Location and select one of the pre-existing locations.
Alternatively, you can add your own GPX file to the project simulate any other custom location. Your GPX file would look similar to this, you would just need to update the latitude and longitude.
<?xml version="1.0" encoding="UTF-8"?>
<gpx version="1.0">
<wpt lat="46.57638889" lon="8.89263889">
<name>LAGORETICO</name>
</wpt>
</gpx>
See this link for more details on how to write your own GPX file.
This link, although slightly outdated, has a great example of how to do this from start to finish.

Related

Unable to simulate location on Xcode Version 9.0.1 (9A1004)

I'm working on a project where it's very often necessary to change the user's location, of course I included all the necessary data to simulate the location from the very beginning of the project. Today Xcode does not pretend to be a custom location, I decided to try to simulate one of the standard locations (for example San Francisco), but when I launch the application on a real device, my real location is displayed on the real device. I tried to run the application on the simulator, but got the same result. I did a clean project, rebooted the real device (iPhone 7), rebooted Xcode but it did not give results. I read a few topics, but they all relate to the fact that the developers did not include the simulation of the location in the scheme. How can I fix this problem? Thank you.
Update: I've updated Xcode, now I'm using Version 9.1 (9B55), but this did not fix this bug. Sometimes (once a week approximately), Xcode refuses to simulate even standard locations from the list (for example San Francisco). Although the menu above the consoles shows that the location simulates.
Info.plist contains
<key>NSLocationWhenInUseUsageDescription</key>
<string>Turn On Location Services to allow App to show you Events near you.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Turn On Location Services to allow App to show you Events near you.</string>
<key>NSLocationUsageDescription</key>
<string>Turn On Location Services to allow App to show you Events near you.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Turn On Location Services to allow App to show you Events near you.</string>
Update 1: Xcode does not simulate the location only on a real device (iPhone 7), two weeks ago there was no such problem. When I call CLLocationManager to show an alert, this alert on the real device is not shown at all. I repeat, this problem does not always repeat, this can happen once a week, but no methods help to restore this possibility to a working state.
I got the same problem and here's my work around.
You know the Location Services is not working when you don't see the arrow on status bar when you request location. So just turn Location Services off and on again. I guess this is a bug.
Go to Phone Settings > Location Services... then turn it off and on.
Xcode > Debug > Location Simulation
Simulator > Debug > Location > Custom Location (this will take what you set from step 2.)
You should see the arrow on status bar when you request location. If not... try the steps again.
First of everything ... Warning! , read this (from apple):
You are required to include the NSLocationWhenInUseUsageDescription and NSLocationAlwaysAndWhenInUsageDescription keys in your app's Info.plist file. (If your app supports iOS 10 and earlier, the NSLocationAlwaysUsageDescription key is also required.) If those keys are not present, authorization requests fail immediately.
Anyway, i just suggest make a simple test.
Make sure that you set Allow Location Simulation on the Run Scheme for your Debug Build Configuration on your target-
Run your App, switch to the Map app on simulator (is is the rfirst time you use, make sure you accept allow location dialog). -
Change the location on the location icon on Xcode (see below), and check that the map move to that location-
If everything is ok, the map app must show selected location
If your app is not able to follow same behaviour, maybe you are missing something. Further reading:
About Location Services and Maps
CoreLocation Framework Reference
Cheers.

Does iOS Simulator not have Current Location

I'm messing about with React Native, and I came across this other post: Permission Denied Geolocation React Native. I wanted to append another question onto that post, but I do not have a high enough ranking to make comments.
My question is, does the iOS simulator not have the current location ability automatically? I know that macOS apps in Xcode have full networking and geolocation abilities, thus I don't need to specify a location when using CLLocationManager. I'm trying to understand the reasoning and limitations behind the iOS simulator; specifically as to why it would not simply behave like any other VM and just use the host's wifi for basic network and location settings? Why would I need to specify a location upon simulator startup?
Thanks in advance!
As far as I know, apple does not support 'real' gps through the iOS simulator, but it does provide you with a variety of other options as you can see on this screenshot I made for you:
Screenshot
Hope that helps!
To get the current location in simulator you have to add GPX file in your project.
Project->New file -> iOS->Resource->select GPX file
Here is a simple GPX file . You just change the name and lat/long.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<gpx
xmlns="http://www.topografix.com/GPX/1/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
version="1.1"
creator="gpx-poi.com">
<wpt lat="lat" lon="long">
<name>YourLocation</name>
</wpt>
</gpx>

Simulating Heading in Xcode

Is it possible to simulate heading in Xcode? My iOS project tracks the user location and heading while driving. But I cannot test it in simulator because simulator is unable to track heading (no compass hardware).
It is very inconvenient to go out in the field with actual device for each testing session.
I was thinking on the lines of getting a sample GPX file. Do you think GPX file will contain heading information and simulator will be able to use it?

How to set fake GPS location on IOS real device

Currently I have to test app and set the different fake GPS locations on real IOS 7 devices. On Android I use 'My Fake Location'. Unfortunately, I didn't find the same app for IOS 7.
Any ideas to solve my problem?
When running in debug mode you can use the little arrow button in the debug area (Shift+Cmd+Y) in Xcode to specify a location. There are some presets or you can also add a GPX file.
You can generate GPX files here manually: http://www.bikehike.co.uk/mapview.php
(from answer: https://stackoverflow.com/a/17478860/881197)
Create a .GPX file with xcode, then specify your coordinates and when your device connected, hit the little arrow button and select your .GPX file.
You can create multiple files and add lots of coordinates to single .GPX file in order to make some kind of route.
Of course ios7 prohibits creating fake locations on real device.
For testing purpose there are two approches:
1) while device is connected to xcode, use the simulator and let it play a gpx track.
2) for real world testing, not connected to simu, one possibility is that your app, has a special modus built in, where you set it to "playback" mode. In that mode the app has to create the locations itself, using a timer of 1s, and creating a new CLLocation object.
3) A third possibility is described here:
https://blackpixel.com/writing/2013/05/simulating-locations-with-xcode.html
Working with GPX files with Xcode compatibility
I followed the link given by AlexWien and it was extremely useful: https://blackpixel.com/writing/2013/05/simulating-locations-with-xcode.html
But, I spent quite some time searching for how to generate .gpx files with waypoints (wpt tags), as Xcode only accepts wpt tags.
The following tool converts a Google Maps link (also works with Google Maps Directions) to a .gpx file.
https://mapstogpx.com/mobiledev.php
Simulating a trip duration is supported, custom durations can be specified. Just select Xcode and it gets the route as waypoints.
xCode is picky about the GPX file it accepts.
But, in xCode you can create a GPX file with the format it will accept:
And then just change the content of the file to the location you need.
you can do it on real device by run device in Debug mode
Click Debug->Simulate Location -> add .gpx file for your location during run time
I had a similar issue, but with no source code to run on Xcode.
So if you want to test an application on a real device with a fake location you should use a VPN application.
There are plenty in the App Store to choose from - free ones without the option to choose a specific country/city and free ones which assign you a random location or asks you to choose from a limited set of default options.
it seems with XCode 9.2 the way to import .gpx has changed, I tried the ways described here and did not do. The only way worked for me was to drag and drop the file .gpx to the project navigator window on the left. Then I can choose the country in the simulator item.
Hope this helps to someone.
There are one solution for fake GPS in ios simulator and real device. we can use GPX file for fake GPS and simulation.
I followed the step by step guidelines of GPX file use in Xcode with simulation.
Here is full step by step guidelines of GPX file use. And also you can download the GPX file Demo from github.

Testing custom location with simulator

I just spent the last hour searching - thinking that there has to be an answer - and didn't find much, so I'm asking here.
I'm trying to get the sample app Regions to trigger enter and/or exit regions updates via the simulator. I'm familiar with setting a specific latitude and longitude with Debug > Location > Custom Location but that doesn't seem to do much, although it does seem to work in the LocateMe sample app. At this point I don't know if the problem is a limitation of the iOS Simulator or of the way the sample app handles region detection (I'm still rather new to iOS).
I've come across the FTLocationSimulator but I wonder if that's going to help (especially since it seems to mimic the ability to set Custom Locations via the Simulator).
There also doesn't seem to be much in terms of Apple documentation regarding the iOS Simulators ability to set Custom Locations.
Add a GPX file to your project and add waypoints to it. When your app is running under simulation use the Simulate Location feature of XCode (the little way-arrow sitting on the debug bar at the bottom) and choose your GPX file. XCode will then start supplying coordinates to your app.
Example GPX file contents:
<?xml version="1.0"?>
<gpx>
<wpt lat='33.749272' lon='-84.388261'><name>Atlanta, Georgia</name></wpt>
<wpt lat='42.7335' lon='-84.5467'><name>Lansing, Michigan</name></wpt>
<wpt lat='32.361667' lon='-86.279167'><name>Montgomery, Alabama</name></wpt>
<wpt lat='38.576667' lon='-92.173611'><name>Jefferson City, Missouri</name></wpt>
<wpt lat='41.590833' lon='-93.620833'><name>Des Moines, Iowa</name></wpt>
</gpx>
Note that the simulator will 'connect the dots' between two waypoints (in the example above it will generate locations along a line between Atlanta, Georgia and Lansing, Michigan.
This works for me:
Go into the Settings application in the simulator
Navigate to General -> International -> Region Format -> (Choose a region)
Specify a region
Hope this helps!

Resources