Apple changed some things regarding WiFi with iOS 13. If you want to use CNCopyCurrentNetworkInfo your app needs to have one of the following
- Apps with permission to access location
- Your app is the currently enabled VPN app
- Your app configured the WiFi network the device is currently using via NEHotspotConfiguration
Source: WWDC 19 session 713
I am configuring a network using NEHotspotConfiguration but I can not get the current SSID anymore after doing so.
The following code worked fine with iOS 12:
/// retrieve the current SSID from a connected Wifi network
private func retrieveCurrentSSID() -> String? {
let interfaces = CNCopySupportedInterfaces() as? [String]
let interface = interfaces?
.compactMap { [weak self] in self?.retrieveInterfaceInfo(from: $0) }
.first
return interface
}
/// Retrieve information about a specific network interface
private func retrieveInterfaceInfo(from interface: String) -> String? {
guard let interfaceInfo = CNCopyCurrentNetworkInfo(interface as CFString) as? [String: AnyObject],
let ssid = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String
else {
return nil
}
return ssid
}
With iOS 13 CNCopyCurrentNetworkInfo always returns nil.
My app has the Access WiFi Information Capability set.
Thanks for your help!
As I said on the Apple Developer Forums use of
CNCopyCurrentNetworkInfois now limited.Check out WWDC 19 session 713, Advances in Networking, Part 2 (maybe 75% of the way through the presentation).
CNCopyCurrentNetworkInfois now only available to your app in three cases:If you don't meet at least one of these conditions
CNCopyCurrentNetworkInfowill always returnnilin iOS 13.UPDATE: As of iOS 13 Developer Beta 6, Apple has finally updated the documentation to note the changes.