Get the Current WiFi AP Information in Swift 4
西山 勇毅
iOS
Swift
WiFi
NetworkExtension

現在繋がっているWiFiアクセスポイント情報をSwift4+iOSで取得する方法をメモ。Appleの公式開発者サイトにSwift3での綺麗な書き方が載っていたのでアレンジしてみました。
Step 1: Capabilities設定¶
Xcodeのcapabilitiesから、Access WiFi InformationをONにする。

Step 2: コード実装¶
以下のコードでWiFi情報を取得する。compactMap関数が便利。
import SystemConfiguration.CaptiveNetwork
struct NetworkInfo {
var interface: String
var success: Bool = false
var ssid: String?
var bssid: String?
}
func getNetworkInfos() -> [NetworkInfo] {
guard let interfaceNames = CNCopySupportedInterfaces() as? [String] else {
return []
}
let networkInfos: [NetworkInfo] = interfaceNames.compactMap { name in
guard let info = CNCopyCurrentNetworkInfo(name as CFString) as? [String: AnyObject] else {
return NetworkInfo(interface: name, success: false, ssid: nil, bssid: nil)
}
let ssid = info[kCNNetworkInfoKeySSID as String] as? String
let bssid = info[kCNNetworkInfoKeyBSSID as String] as? String
return NetworkInfo(interface: name, success: true, ssid: ssid, bssid: bssid)
}
return networkInfos
}
getNetworkInfos()メソッドを呼び出すと、NetworkInfo構造体が配列形式で返ってくる。
参考¶
- Apple Developer Forums - CNCopyCurrentNetworkInfo
- Qiita - naokits
- Stack Overflow (日本語)
- [iOS 10] 接続中のWi-FiのSSIDを取得するCNCopySupportedInterfacesは、iOS 10で復活していた