How I tricked iOS into giving me EU DMA features

April 20, 2024 3 minute read

I’m in Australia, but as far as my iPhone knows, I’m in Italy. How?

In iOS 17.4, Apple introduced a new system called eligibilityd. This works with countryd (which you might have heard about when it first appeared in iOS 16.2) and the Apple ID system to decide where you physically are. The idea is that multiple sources need to agree on where you are, before giving you access to features such as those mandated by the Digital Markets Act.

A plist file downloaded from Apple declares “domains”, which are individual features locked behind a location wall. At the time of writing, there are 24 (although one is missing), and the file was last updated on the 5th of April. We weren’t tracking updates to it before this week, so I don’t know what changed exactly. As a reminder, iOS 17.4 launched on the 5th of March, and was in beta from the 30th of January.

Screenshot of a file called Config.plist open in Xcode. It shows 23 items, which are the first 22 elements on the periodic table, plus “Lot X” and “Podcasts Transcripts”. Phosphorus is expanded to show an array named Policies. It has a sub-key named OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION, with 34 two-character country codes underneath it. (It’s one short because Calcium is missing.)

Probably to obscure what they are, these domains are named after the chemical elements corresponding to their numeric value. The only way to determine what feature these correspond to is by disassembling the relevant parts of iOS that check the eligibility system. On The Apple Wiki’s Eligibility article, I’ve documented what I’ve already found.

Most domains are currently configured to only be allowed on iPhone, because the DMA has only declared Apple a gatekeeper with phones, not tablets. So much for all the laptop-class hardware the iPad Pro gets if it doesn’t get laptop-class software features the iPhone does get…

Apple has the ability to push an update to this config file at any time, whether to roll out a feature to more countries, to enable features on iPad, or to withdraw the feature from some or all countries. The update would likely be installed on all active iPhones within a few days.

I’m working through figuring out what each of the domains are. See the Apple Wiki article for the most current table.

So knowing all this, how did I trick iOS into giving me the DMA features? Well, I took my old 12 Pro Max and started tinkering around. I reset the phone, disabled Location Services, inserted an Italian SIM from my holiday many years ago, and made a new Italian Apple ID. No good.

I then set up a pfSense Wi-Fi router, broadcasting itself as having a regulatory country of Italy. (I compared the regulations, there are a bunch of differences for 5 GHz, so I disabled it. Otherwise, the EU’s Wi-Fi regulations are stricter than Australia’s, so it’s safe.) Well, looking at the device’s logs, countryd still knew I was in Australia, even after erasing and setting up the phone again.

The last thing I tried was going downstairs to our basement, where there’s no mobile signal. Reset the phone again, and what do you know, as soon as I open Safari it asks me to choose a browser. I put the phone in airplane mode so I can go back upstairs. As far as I can tell, it still believes I’m in Italy. It’s not just the 30 day grace period Apple provides - in fact, that grace period only applies to four of the 24 domains.

I don’t know how much of what I did was necessary (at minimum, the VPN is likely not needed), but this phone is obviously not practical to use in this state. It needs to stay in airplane mode, and needs a Wi-Fi network configured to present itself as having an EU regulatory country. It’s really only a setup I can use for testing EU features.

Again, I’m still actively researching this. Check the eligibility article to see the most current information I have.

This post is based on a tweet I originally posted on Twitter.

See also my previous post about iOS 17.4’s flawed app marketplace installation flow, and the next post, Features controlled by iOS 17.4’s eligibility system.