A few months ago I noticed something peculiar when I was working on a project that required the use of the captive portal on a Wi-Fi network. Whenever my iPhone X would connect to the Wi-Fi network, it would have to wait about a minute before I would see the splash page of the captive portal. However, when I would use an iPhone 8, it would immediately display the splash page as soon as the Wi-Fi connected. There was no waiting, and it was almost instant on the iPhone 8.

I found this happening wherever a captive portal was present: Hotels, Airlines, Coffee Shops, businesses … everywhere.

Artwork by @GeorgeLaw

What was different?

The difference between the two phones, other than the model, was the software version loaded on them. The iPhone X was running version 12 of the iOS and the iPhone 8 was running the last version of iOS 11 – 11.4.1.

Is it just the model of iPhone?

At first I thought it was just a fluke and the iPhone X WiFi was doing something different, so I got other Apple devices running iOS 12 to see how they would respond.

Multiple iPhones running iOS 12 behave the exact same way, regardless of model:

I turn on the Wi-Fi, tap on the wireless network I want to connect to and then have to wait about a minute before the Wi-Fi icon would appear on the toolbar at the top of the screen followed by the splash page popping up.

All of the devices that were running before iOS 12 would immediately splash the captive portal page within two seconds of associating to the Wi-Fi network.

Is it a timed thing?

At this point I wondered if it was some specific amount of time that this was occurring. On all devices we tested, the interval between when the Wi-Fi client was associated with the wireless access point and the time in which it showed connected on the top toolbar was exactly 45 seconds.

Check out a video I made showing it happening on iOS 12 and the iOS version 11 after on an airline:

Maybe there’s an answer in the packets..

The next thing I wanted to understand is if there was anything going on that was causing the iPhone using iOS 12 to hang up. Was it not responding to a request? Was there something not being ACKed? So I ran packet captures on the association of the phones and I didn’t find anything out of the ordinary.

But, why?

At this point, it looks like Apple has done something specifically to not allow a device to display a captive portal/page until after 45 seconds have elapsed since the association request by the client. I don’t understand why they have done this, I don’t understand the reason, I don’t understand why they are making clients wait to get associated. I assume that there is some answer, I just don’t know what it is.

Anyone know what’s going on?

I brought this up with another group of Wi-Fi engineers a few months ago, but it seems that everyone is just taking it for what it is. Then a couple of weeks ago, I saw a few tweets about it online, so I figured I would write up what my experience was.

Is there anybody, out there?

If you are working on this at Apple, know someone who is working on this at Apple, or has any idea what’s going on, I would love to understand. As much as we all hate captive portals, they are a part of almost every day Wi-Fi use around the world. Why would Apple insert 45 seconds of having to wait to get connected to a network?