🅭

How I fixed the intermittent Wi-Fi dropouts on my MacBook

The Wi-Fi on my MacBook Pro (a late-2013, 39 cm model, MacBookPro11,2) randomly stops working. It doesn’t lose the connection, and Wi-Fi Diagnostics can’t find anything wrong. The networking just stops working. Here's how I found out what was wrong, how you can find out if you’re having the same problem, and how I found a fix.

I first noticed the issues about two years ago. Every network operation simply timed out unfulfilled. It would happened intermittently, about a couple of times throughout the day. macOS didn’t complain about signal interference or drop the connection. It’s was a typical case of “my Wi-Fi doesn’t work and I don’t know why.”

The problem got much worse in the last year (during the COVID pandemic). Networking on my MacBook was essentially non-functional during peak-Netflix hours in the evenings. However, the internet connection didn’t slow down or otherwise seem to struggle with Wi-fi pollution from all my neighbors. The signal strength and signal-to-noise ratio (SNR) isn’t too bad. Notably, there are no other access points in range broadcasting on the same or an overlapping channel!

The issue doesn’t resolve itself either. I can leave the MacBook for an hour and it won’t restore connectivity on its own. macOS doesn’t even seem to realize that it has lost network access. It just stops working. I quickly found a work-around for the problem, though.

I simply clicked on the Wi-Fi menu on macOS’ top bar, and networking was restored. A few minutes or hours later, the problem would reappear, and I’d have to click the Wi-Fi menu again to get back online. Occasionally, I’d need to reopen the menu one extra time before it cleared up the clog. Initially, I thought I had to turn Wi-Fi off and on again, but I quickly noticed that it was enough to open the Wi-Fi menu.

Okay, so what’s happening when I open the Wi-Fi menu? I’m not sure. The only thing I can say for sure is that it triggers an active scan for available Wi-Fi networks. The MacBook periodically performs active scans in the background, and I've not been able to identify any change to this behavior even when Wi-Fi stops working. For whatever reason, triggering an active scan clears the clog and restores connectivity.

My best theory is that something in either the Wi-Fi chip or its driver is flushed or reset by performing an active scan. I can’t say for certain, though. However, given what I now knew about the problem I wanted to find a better solution. A solution that didn’t involve me having to manually click the Wi-Fi icon on the toolbar whenever networking stopped working.

My first attempt involved an AppleScript that controlled the scripting cursor and opened the Wi-Fi menu. Let’s just say that was incredibly disruptive and not the right solution!

Next, I installed and the NetSpot Home (Free edition) app and let it run in the background. It can do all sorts of signal analysis and help you troubleshoot your Wi-Fi woes. I was only interested in one passive feature, though: It initiates an active Wi-Fi scan once every 30 seconds. That was enough to completely resolve my Wi-Fi problems! I’ve noticed that the network sometimes crawls to a halt, but it recovers again within a few seconds. This was a huge improvement.

The problem resurfaces within minutes or hours after I quit the NetSpot app. So, I’d found a work-around for my problem! I doubt Apple is ever going to fix this on my old MacBook model. Here’s how I put in place a more permanent fix for the issue.

I created a background service agent that starts every 45 seconds and triggers an active scan. The task is handled by macOS’ built in airport utility program. If you’ve turned Wi-Fi off, the program does nothing. Here’s how to install it:

  1. Download local.wifi-scanner.plist to your Downloads folder.
  2. Open the Terminal app (find it with Spotlight search.)
  3. Copy the following two commands into the terminal and press Enter after each one:
mv "$HOME/Downloads/local.wifi-scanner.plist" "$HOME/Library/LaunchAgents/"
launchctl load "$HOME/Library/LaunchAgents/local.wifi-scanner.plist"

This copies the downloaded file and installs it as a background service. You can turn it off again by either removing the file, or repeating the last command but replacing load with unload. Unless you really need this to fix your Wi-Fi, you may want to turn it off again the script after reading the next section.

The program runs silently in the background. You shouldn’t ever notice it’s there, except that your Wi-Fi problems may have gone away. It does, however, have a few negative side effects including:

  1. Slightly decreased battery life. Your Wi-Fi antennas are more active, and this prevents the chip from entering power-saving modes. The effects will vary based on your local signaling conditions.
  2. Slightly increased Wi-Fi pollution. Your device is sending out active probes and receiving replies from all nearby access points on all channels across the spectrum more often than strictly necessary. This may slightly degrade Wi-Fi performance for everyone around your device.
  3. Slightly increased network latency. While your device is busy broadcasting scan probes, it can’t perform other networking tasks. At least one study concludes that this effects can last for seconds after it’s “done” with the scans.

The Wi-Fi chip in my MacBook is an Apple AirPort-branded/modified Broadcom BCM94331. Hm. Isn’t it funny how it’s always Broadcom network interfaces that’s causing me Wi-Fi problems.