반응형
iOS 12 이전에는
Reachability 클래스를 통하여 iOS 내에서 인터넷 상태를 체크했었습니다.
https://developer.apple.com/library/archive/samplecode/Reachability/Introduction/Intro.html
https://github.com/tonymillion/Reachability
iOS12부터는
NWNetworkMonitor 라는 내부 라이브러리를 통해서
현재 인터넷 상태 변경에 대한 감지를 할 수 있도록 제공해주고 있습니다.
https://developer.apple.com/documentation/network/nwpathmonitor/
일단 사용하기 위해선
import Network
let monitor = NWPathMonitor()
클래스를 초기화 해줍니다.
만약 특정상태에서의 변화를 감지하고 싶다면 파라미터를 추가해주시면 됩니다.
import Network
let monitor = NWPathMonitor(requiredInterfaceType: .wifi)
let monitor = NWPathMonitor(prohibitedInterfaceTypes: [.wifi, .cellular])
InterfaceType의 종류는 아래와 같습니다.
public enum InterfaceType {
case other /// A virtual or otherwise unknown interface type
case wifi /// A Wi-Fi link
case cellular /// A Cellular link
case wiredEthernet /// A Wired Ethernet link
case loopback /// The Loopback Interface
}
모니터링을 시작하기 위해선
monitor.start(queue: DispatchQueue.global())
를 시작해주면 그때부터, 인터넷 변경사항에 대한 체크를 시작합니다.
변화된 인터넷 상태를 알고 싶다면
monitor.pathUpdateHandler = { path in
}
를 추가하여, 변경 사항에 대한 알림을 받을 수 있습니다.
더이상 모니터링을 하고 싶지 않은 경우에는
monitor.cancel()
을 호출해줍니다.
전체 구현방식은 아래와 같습니다.
let monitor = NWPathMonitor()
func startMonitoring() {
monitor.start(queue: DispatchQueue.global())
monitor.pathUpdateHandler = { [weak self] path in
if path.status == .satisfied {
print("connected")
if path.usesInterfaceType(.wifi) {
print("wifi mode")
} else if path.usesInterfaceType(.cellular) {
print("cellular mode")
} else if path.usesInterfaceType(.wiredEthernet) {
print("ethernet mode")
}
} else {
print("not connected")
}
}
}
func stopMonitoring() {
monitor.cancel()
}
반응형
'Programming > iOS' 카테고리의 다른 글
static library를 xcframework로 제작 (0) | 2022.08.13 |
---|---|
맥북 내 네트워크 속도제어 프로그램(Network Link Conditioner) (0) | 2021.10.21 |
Building an Interactive Tutorial (0) | 2021.06.10 |
Swift - iPad 멀티태스킹 설정 (Split View/Slide Over) (0) | 2021.06.08 |
Objective-C에서 Swift파일을 Import하는 방법 (0) | 2021.03.10 |