본문 바로가기

난 iOS개발자/iOS

현재 네트워크 정보 가져오기 CNCopyCurrentNetworkInfo

728x90

CNCopyCurrentNetworkInfo를 통해 현재 디바이스에서 사용중인 네트워크의 정보를 가져올 수 있다.

 

CNCopyCurrentNetworkInfo사용 전에 알아야 할 것

아래 네 가지의 조건중 하나를 충족해야 정상적인 동작이 가능하다.

 

1. 앱이 위치권한(core location)수집에 대한 사용자의 수집을 받아야 한다.

2. 앱이 NEHotspotConfiguration API를 통해 네트워크를 구성한 경우

3. VPN 활성화

4. 응용 프로그램에 활성 NEDNSSettingsManager 구성이 설치된 경우(NEDNSSettingManager ? 잘 모름)

 

요구사항이 충족된다면 네트워크 정보를 리턴하고,  그러지 않을 경우 null을 갖는다.

 

 

Deprecated

CNCopyCurrentNetworkInfo는 최신 OS버전에서 사용이 안된다.

14.0 이후부터 아래 내용으로 대치된다.

 

NEHotspotNetwork를 이용한 현재 Wi-Fi 상태 가져오기

Wi-Fi연결에 대한 이전 글에 이은 내용 NEHotspotNetwork는 명령 또는 응답과 관련된 Wi-Fi네트워크에 대한 정보다. 명령또는 응답이라는 말이 무엇을 말하는지 잘 모르겠지만... 아래와 같은 속성을 지

greate-future.tistory.com

 

 

Important!  "Access WiFi Information" 

Access WiFi Information을 추가 하라고 한다. 

Project Target -> Signing &  Capabilities에서 Access WiFi Information을 추가하자

 

아래 코드는 위치권한을 얻은 후 정상동작 한다.

struct NetworkInfo {
    var interface: String
    var success: Bool = false
    var ssid: String?
    var bssid: String?
}
import Foundation
import SystemConfiguration.CaptiveNetwork

final class SSID {
    func fetchNetworkInfo() -> [NetworkInfo] {
        if let interfaces: NSArray = CNCopySupportedInterfaces() {
            var networkInfos = [NetworkInfo]()
            for interface in interfaces {
                let interfaceName = interface as! String
                var networkInfo = NetworkInfo(interface: interfaceName,
                                              success: false,
                                              ssid: nil,
                                              bssid: nil)
                
                if let dict = CNCopyCurrentNetworkInfo(interfaceName as CFString) as NSDictionary? {
                    networkInfo.success = true
                    networkInfo.ssid = dict[kCNNetworkInfoKeySSID as String] as? String
                    networkInfo.bssid = dict[kCNNetworkInfoKeyBSSID as String] as? String
                }
                
                networkInfos.append(networkInfo)
            }
            return networkInfos
        }
        
        return []
    }
}
print(SSID.fetchNetworkInfo().first)

 

 

 

728x90