Enabling Garmin ECG on an iPhone in the UK

None of the solutions I found online worked, so here’s another

Author

Nick Plummer

Published

February 21, 2025

It’s well recognised that endurance sports, especially cycling, are associated with an increased risk of developing atrial fibrillation.

Not AF, but not physiological either

As such an increasing number of health tracking devices are now offering single-lead ECG monitoring, and the latest range of Garmin watches are no different.

However Garmin don’t yet have regulatory approval to offer the ECG app in the UK, so if you want to use it here you need to convince the Garmin Connect app that you’re physically in a location where it is permitted such as the USA or the rest of Europe (thanks, Brexit).

This is relatively straightforward for Android users who have a number of fake-GPS apps available but harder if like me you’re entrenched in the more locked down Apple ecosystem.

There are a few potential approaches that have been reported to work:

I started off trying libmobiledevice, and despite having everything set up (as I use Xcode to write my own iOS apps) ran into the same problem as several others seem to in mounting developer disk images. So I followed the suggestion made there of trying pymobiledevice3, and that’s what we’ll walk through here.

Step 1: Get required software and set up iPhone to allow it.

The very first step is turning on “Developer Mode” for your iPhone, so you can make it do things like this which it isn’t supposed to. This is as simple as going to Settings, opening Privacy & Security, and scrolling to the very bottom to turn Developer Mode on. Acknowledge the comments about security risks, and restart the phone.

Now we’ll install pymobiledevice3. On a Mac, this is as simple as:

python3 -m pip install -U pymobiledevice3

Followed by adding the libsub dependency using Homebrew:

brew install libusb

Step 2: Pretend you’re in New York

Plug your iPhone into your computer, ensure it’s appearing in Finder (you may need to “Trust” your computer by logging into your iPhone), then open a connection to the device using sudo python3 -m pymobiledevice3 remote tunneld in the terminal. It should look something like this:

% sudo python3 -m pymobiledevice3 remote tunneld                         
INFO:     Started server process [12265]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:49151 (Press CTRL+C to quit)
2025-02-21 08:22:34 tiktaalikM3.local pymobiledevice3.tunneld.server[12265] INFO [start-tunnel-task-usbmux-00008140-001628C13A13001C-USB] Created tunnel --rsd fd88:9ae9:295c::1 59050
INFO:     127.0.0.1:59548 - "GET / HTTP/1.1" 200 OK

With this still running, open another terminal tab, and use the simulate-location to pretend we’re in America (I used New York’s latitude and longitude):

% pymobiledevice3 developer dvt simulate-location set -- 40.7128 -74.0060

2025-02-21 08:22:56 tiktaalikM3.local pymobiledevice3.__main__[12314] WARNING Got an InvalidServiceError. Trying again over tunneld since it is a developer command
Press Ctrl+C to send a SIGINT or use 'kill' command to send a SIGTERM

Step 3: Tell Garmin you’ve made it across the Atlantic

On your computer you now need to update your Garmin account by using the Edit option to set your Location to “United States”.

Note that this is not the same as setting it in your Connect account - but you can get there from Connect by clicking your profile picture, pressing edit, then scrolling to the bottom of the page and using “Manage Garmin Account”.

Now open the Connect app on your iPhone with the phone still physically connected to the computer, open the Garmin device options within the app, and you should see the “Finish Setup” option now offers you a “Set up ECG App” option:

The app will walk you through “ECG education”, including agreeing to a load of safety information (which is fair, given that a single ECG lead isn’t particularly informative, after all), enforces 2FA if you’re not using it, and finally allows you to test drive the ECG.

Importantly you now need to follow through and take your first reading while in virtual America. Humblebrag time: Although I got a lovely looking recording on screen, my resting heart rate is too low for the “AF detection algorithm” (i.e. “are there P waves?”) to work. All that effort for nothing…

This was after two double espressos too

After doing your first readfing, the ECG app should show up both on your watch (below all the other apps or activities, depending on device) and in Connect, and will stay there for good even after we “leave” New York. As Ray put it:

After completing this first ECG trace, you’ll now be able to do an ECG anywhere on the planet without restriction. This is because the FDA views this roughly akin to taking medicines while you travel, essentially considered self-care.

Step 4: (Virtually) return to Blighty

It’s now safe to undo everything we’ve done before.

On your computer use ctrl-C in both terminal tabs to turn off the location spoofing and iPhone connection, and close them down. Finally, on your iPhone you may need to turn Location Services off and on again before it’ll work out where it actually is. You should also turn off Developer Mode to re-secure your phone.

You can now safely change your Garmin account location back to the United Kingdom. Your Connect app might need demand you re-agree to the EULA and try to go into setting up a new device when you reopen it, but you can skip past this and everything should be as you left it, except you now have the ECG app available.

Then have fun recording your own heart, and checking out the recordings in the Connect app:

I appear to have a U wave