[swift] Reachability를 사용해 네트워크 연결 상태를 로그로 기록하기

앱 개발시 네트워크 연결 상태를 확인하는 것은 중요한 요소입니다. 사용자가 온라인 또는 오프라인으로 전환이 되는 순간을 감지하고, 이에 따라 적절한 액션을 취할 수 있게 해줍니다. 이를 위해 Reachability 라이브러리를 사용하는 방법에 대해 알아보겠습니다.

1. Reachability 라이브러리 설치

먼저, Reachability 라이브러리를 프로젝트에 추가해야 합니다. Cocoapods를 사용한다면, Podfile에 다음과 같이 추가합니다.

pod 'ReachabilitySwift'

설치를 마친 후, import Reachability 구문을 통해 라이브러리를 가져옵니다.

2. Reachability 클래스 활용

2.1 Reachability 객체 생성

Reachability를 사용하기 위해, Reachability 객체를 생성해야 합니다. 다음 코드를 통해 객체를 생성합니다.

let reachability = try! Reachability()

2.2 네트워크 연결 상태 감지

Reachability를 활용하여 연결 상태를 감지할 수 있습니다. reachability.whenReachable 클로저를 통해 연결 상태 변경 시의 로직을 작성할 수 있습니다. 아래의 예제는 네트워크가 연결되었을 때 로그를 출력하는 코드입니다.

reachability.whenReachable = { reachability in
    if reachability.connection == .wifi {
        print("WiFi 연결됨")
    } else {
        print("셀룰러 연결됨")
    }
}

2.3 Reachability 시작하기

Reachability를 시작하려면, startNotifier() 메서드를 호출해야 합니다. 다음 코드를 통해 Reachability를 시작할 수 있습니다.

try? reachability.startNotifier()

2.4 Reachability 종료하기

Reachability를 더 이상 사용하지 않을 때, stopNotifier() 메서드를 호출하여 종료할 수 있습니다.

reachability.stopNotifier()

3. 네트워크 연결 상태 로그 기록하기

위에서 구현한 네트워크 연결 상태 감지 로직을 통해 언제든지 네트워크 상태를 알 수 있습니다. 이를 로그로 기록하고 싶다면, 각각의 로그문을 출력하는 부분에서 파일에 로그를 기록하는 코드로 변경해야 합니다. 아래 예제는 로그를 파일에 기록하는 코드입니다.

func logToFile(message: String) {
    let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("log.txt")
    
    if let fileURL = fileURL {
        do {
            let messageWithTimestamp = "\(Date()): \(message)"
            try messageWithTimestamp.appendLine(to: fileURL)
            print("로그에 기록됨")
        } catch {
            print("로그 기록 중 에러 발생: \(error.localizedDescription)")
        }
    }
}

위의 logToFile() 함수를 아래와 같이 사용하면, 네트워크 연결 상태에 따른 로그를 파일에 저장할 수 있습니다.

if reachability.connection == .wifi {
    logToFile(message: "WiFi 연결됨")
} else {
    logToFile(message: "셀룰러 연결됨")
}

4. 참고 자료