Description :
Our app helps users connect to Wi-Fi hotspots. We are trying to adapt our code to iOS 26 Hotspot Authentication and Hotspot Evaluation application extensions.
When filtering hotspots in the filterScanList callback, we need to fetch support information from a remote server to determine which hotspots are supported. However, attempts to use URLSession or NWTCPConnection in the extension always fail.
When accessing a URL (e.g., https://www.example.com), the network log shows:
Error Domain=NSURLErrorDomain Code=-1003 "A server with the specified hostname could not be found."
When accessing a raw IP address, the log shows:
[1: Operation not permitted]
Interestingly, NWPathMonitor shows the network path as satisfied, indicating that the network is reachable.
Question:
Are there any missing permissions or misconfigurations on our side, or are we using the wrong approach? Is there an official recommended way to perform network requests from an NEHotspotEvaluationProvider extension?
Oh, wow, someone finally noticed this new API. Cool (-:
attempts to use URLSession or NWTCPConnection in the extension always fail.
Right. One goal of the new architecture is to improve privacy. That’s why there are two extensions:
- The hotspot evaluation provider, which implements the
NEHotspotEvaluationProvider
protocol, is responsible for.filterScanList
and.evaluate
commands. It runs in a tight sandbox that prevents it from ‘exporting’ the Wi-Fi scan results. - The hotspot authentication provider, which implements the
NEHotspotAuthenticationProvider
protocol, handles the other commands. It runs in a looser sandbox, but only receives information about the network the user has chosen to join.
If your evaluation provider needs information about what networks to support, you should have your app (or your authentication provider) put that information in an app group container. The evaluation provider will be able to read that container, but not write to it.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"