Guide · GeoSwitch
How to Test "Near Me" and Store-Locator Features in Mobile Safari
"Near me" search, store locators, and geofenced banners all share one awkward property: they behave differently depending on where the visitor physically is, and the place you happen to be sitting is the one location you can't change by reloading. If you want to test a near me feature in mobile Safari honestly, you have to feed the page a location it believes, on the device your customers actually use. This guide covers why that's harder than it looks, what the common workarounds really do, and a one-tap way to set the coordinate on a real iPhone.
What "location" means to a near me feature
A website can learn roughly where you are in two very different ways, and they are not interchangeable.
- Your public IP address. The server looks up your IP in a geolocation database and gets a coarse guess, usually accurate to a city or metro region. This is automatic, requires no permission, and is often wrong by tens of miles.
- The geolocation coordinate. The page calls
navigator.geolocation.getCurrentPositionorwatchPosition, the browser asks for permission, and on approval it hands the page a precise latitude/longitude from GPS, Wi-Fi, and cell signals. This is the GPS-style location, and it is what a serious "near me" feature uses.
The distinction is the whole ballgame. A locator that sorts stores by distance, draws a geofence, or redirects you to a regional page almost always reads the coordinate, because IP-level accuracy is too crude to pick the nearest of three stores in the same city. So if your test only moves the IP, you've tested the wrong input.
Why the usual workarounds fall short
A VPN changes your IP, not your coordinate
This is the trap most teams fall into. You connect a VPN to a Denver exit node, the IP geolocation flips to Denver, and you assume the locator now thinks you're in Denver. But the moment the page calls navigator.geolocation, it reads the real coordinate from the phone in your hand, which is still in, say, Austin. The locator shows Austin stores over a Denver IP, and you ship a "fix" that was never tested. We unpack this mismatch in detail in VPN vs. Location Spoofing; the short version is that a VPN is the wrong tool for coordinate-driven features.
DevTools and the Simulator aren't real mobile Safari
Desktop Chrome and Edge let you override geolocation from DevTools, and the Xcode Simulator can set a custom location. Both are genuinely useful, and both test the wrong engine. DevTools runs Blink, not WebKit. The Simulator runs a simulated build, not the WebKit that ships on a physical iPhone. Permission prompts, layout quirks, and the exact behavior of watchPosition can all differ from a real device. For a bug a customer hit on their iPhone, you need the real thing. There's a fuller walkthrough in How to Test Geolocation in iOS Safari on a Real iPhone.
Turning Location Services off doesn't help
Disabling Location Services blocks the coordinate; it doesn't change it. The page either gets a permission error or falls back to IP. You can confirm the "no location" path that way, but you can't verify what a customer in another city actually sees.
You can't fly to every test market
The honest manual method is to physically travel to each city, which is fine for one launch and absurd as a regression test. Mobile Safari itself has no built-in coordinate override, so on iOS there is no native menu for this. That gap is exactly what an extension fills.
| Method | Changes the coordinate? | Real mobile Safari? | Good for near me testing? |
|---|---|---|---|
| VPN | No (IP only) | Yes | No |
| Desktop DevTools | Yes | No (Blink/desktop) | Partial |
| Xcode Simulator | Yes | No (simulated) | Partial |
| Turn off Location Services | No (blocks it) | Yes | No |
| Travel to each market | Yes (for real) | Yes | Yes, but impractical |
| Coordinate override in Safari | Yes | Yes | Yes |
Override the coordinate in Safari with GeoSwitch
GeoSwitch is a native Safari Web Extension for iPhone and iPad that overrides navigator.geolocation inside Safari web pages. When a page calls getCurrentPosition or watchPosition, it reads the coordinate you chose instead of your device's real position. You pick that coordinate by dropping a pin on a map, typing a latitude/longitude, searching an address (Premium), or tapping a saved location, and you flip spoofing on or off from the app or the Safari toolbar popup.
Technically, it works the way a careful tester would want: a content script injects code at document_start that runs in the page's own JavaScript context and replaces the geolocation methods before any site code executes, so your locator sees the override from its very first call. Nothing about your device GPS changes, which keeps the rest of your test environment honest.
Enable it (one-time setup)
- Install GeoSwitch from the App Store.
- Open the Settings app, go to Safari, tap Extensions.
- Turn on GeoSwitch and set its website permission to Allow.
- Open the GeoSwitch app, pick a location, and turn the toggle on.
On newer iOS you can also manage Safari extensions from the page menu, but the Settings → Safari → Extensions path is the reliable one.
Build a test matrix of city presets
This is where the workflow pays off. Save one coordinate per test market and you can run the same checks against every city without leaving your desk:
- Locator accuracy. Switch to each city, reload the locator, and confirm it returns the genuinely nearest stores for that coordinate, not for your office.
- Distance sorting. Verify results are ordered by real distance from the chosen point and that the displayed mileage matches.
- Regional redirects. Test that a coordinate in another region routes to the correct localized page, then test a coordinate just over a border to catch off-by-one routing.
- Local-SEO sanity checks. See, coordinate-level, what a customer two cities over actually sees. This is the kind of local SEO near me testing that an IP swap can't approximate, and it pairs well with the broader how to change your browser location on iPhone walkthrough.
The Free tier covers static pin and coordinate spoofing with up to 3 saved locations, which is enough to prove the concept. Premium lifts the cap to unlimited saved locations and adds address search, so your test matrix can be a real list of named markets.
Drive across a geofence boundary
Static pins prove the endpoints; geofences and tracking features also need movement. To test geofencing on iOS Safari properly, place one preset just inside the boundary and one just outside, toggle between them, and confirm the UI flips at the edge.
For a moving visitor, Premium route simulation moves the position along a path at Walk (~5 km/h), Bike (~16 km/h), or Drive (~58 km/h), with optional looping. The coordinate updates live and is delivered to watchPosition, so you can drive a route straight through a geofence boundary and watch the page enter and exit the fence in real time, exactly the movement-based behavior that's otherwise hard to reproduce on a desk.
Set realistic expectations with QA: route simulation is for exercising your web app's reaction to changing coordinates, not for pretending to be a real driver to a third-party service. Keep it pointed at the features you own.
What it won't do
Honest scope keeps your test results trustworthy:
- It affects Safari web pages only. It does not change device or system GPS, and it does not affect native (non-Safari) apps.
- It is not a VPN and does not change or hide your IP address. If your locator also reads IP as a fallback, that fallback still resolves to your real network.
- It is not an anonymity tool. Your public IP, signed-in accounts, time zone, and browser language can still reveal where you really are.
- It needs no jailbreak, no computer or USB tether, and no developer tools. If you've reached for those before, see faking GPS on iPhone without a computer or jailbreak for the comparison.
On privacy posture, as a supporting note: no personal information or location data is collected, saved locations live only on your device, and only anonymous usage analytics are gathered. That matters for a tool you'll run against your own production site, but it isn't the reason to use it; the reason is that it tests the right input on the right engine.
Frequently asked questions
Why can't I just use a VPN to test my near me feature in mobile Safari?
A VPN only changes your public IP address, which gives a website a coarse, city-level guess. A modern near me feature usually calls navigator.geolocation to read a precise GPS-style coordinate, and that comes from the device, not the IP. So a VPN can move your IP to another city while the geolocation coordinate still points at your real desk. To test the coordinate path you have to change the coordinate itself.
Can I test a store locator on iPhone without flying to each market?
Yes. Save a preset coordinate for each test market, turn spoofing on, and reload your store locator in Safari. The page reads the coordinate you chose, so you can verify nearest-store selection, distance sorting, and regional redirects for a dozen cities from one chair on one device.
How do I test geofencing in iOS Safari?
Set one coordinate just inside the geofence boundary and one just outside, then toggle between them to confirm the UI reacts at the edge. To test a moving user, use route simulation to drive a path that crosses the boundary; the position is fed to watchPosition continuously so you can watch the page enter and exit the fence in real time.
Does this change my iPhone's actual GPS or my IP address?
No. GeoSwitch only overrides navigator.geolocation for web pages in Safari. It does not change device or system GPS, does not affect native apps, and does not touch your IP address. Your public IP, signed-in accounts, time zone, and browser language still reflect where you really are, so it is a testing tool, not an anonymity tool.
Is testing on a real iPhone really better than Chrome DevTools?
For a mobile Safari bug, yes. DevTools and the Xcode Simulator run a desktop or simulated engine, not the WebKit build on a physical iPhone. Layout, permission prompts, and geolocation behavior can differ. Overriding the coordinate on a real device tests the exact environment your customers use.