[swift] Reachability를 사용해 와이파이 연결 시 특정 액션 수행하기

앱 개발 시 네트워크 연결 상태를 확인하는 작업은 중요합니다. 특히 와이파이 연결이 필요한 기능을 개발할 경우, 사용자의 인터넷 연결 상태를 확인하고 적절한 조치를 취할 수 있어야 합니다.

이를 위해 Swift의 Reachability를 사용하여 와이파이 연결 상태를 감지하고, 와이파이 연결 시 특정 액션을 수행하는 방법을 알아보겠습니다.

1. Reachability 라이브러리 추가

Reachability를 사용하기 위해, 먼저 Reachability 라이브러리를 프로젝트에 추가해야 합니다. 이 라이브러리를 사용하면 간편하게 인터넷 연결 상태를 확인할 수 있습니다.

Reachability 라이브러리를 추가하기 위해, Cocoapods를 사용하거나 수동으로 라이브러리 파일을 프로젝트에 추가하는 방법이 있습니다.

2. Reachability 클래스 설정

Reachability를 사용하기 위해 Reachability.swift 파일을 생성하고, 아래의 코드를 추가합니다.

import Foundation
import SystemConfiguration

public class Reachability {

    class func isConnectedToNetwork() -> Bool {

        var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
        zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
        zeroAddress.sin_family = sa_family_t(AF_INET)

        let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
            $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { zeroSockAddress in
                SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
            }
        }

        var flags: SCNetworkReachabilityFlags = []
        if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
            return false
        }

        let isReachable = flags.contains(.reachable)
        let needsConnection = flags.contains(.connectionRequired)

        return (isReachable && !needsConnection)
    }
}

위의 코드는 Reachability 클래스를 정의하고, isConnectedToNetwork() 메소드를 통해 네트워크 연결 상태를 확인하도록 구현되어 있습니다.

3. 네트워크 연결 상태 확인

와이파이 연결 상태를 확인하기 위해, 아래의 코드를 해당하는 뷰 컨트롤러에 추가합니다.

if Reachability.isConnectedToNetwork() {
    // 와이파이에 연결되어 있는 경우
    // 특정 액션을 수행하거나 추가적인 작업을 진행합니다.
} else {
    // 와이파이에 연결되어 있지 않은 경우
    // 사용자에게 알림을 보여줄 수 있습니다.
}

위의 코드에서는 Reachability.isConnectedToNetwork()를 통해 와이파이 연결 상태를 확인하고, 연결되어 있는 경우와 연결되어 있지 않은 경우 각각의 동작을 수행하도록 처리하면 됩니다.

프로젝트에서 Reachability를 사용할 수 있도록, 해당 파일을 추가하고 사용하는 방법을 알아보았습니다. 이렇게 네트워크 연결 상태를 확인하여 특정 액션을 수행할 수 있게 되었습니다.