[swift] Reachability를 사용해 인터넷 연결 가능 여부 확인하기

iOS 앱을 개발할 때, 사용자의 인터넷 연결 상태를 확인해야 할 때가 많이 있습니다. 인터넷이 연결되어 있지 않다면 적절한 안내를 제공하거나 기능을 제한하는 등의 처리를 해야 할 수도 있습니다.

이를 위해 Reachability 라이브러리를 사용하면 손쉽게 인터넷 연결 가능 여부를 확인할 수 있습니다. 이번 포스트에서는 Swift 언어로 작성된 iOS 앱에서 Reachability를 사용하는 방법을 알아보도록 하겠습니다.

1. Reachability 라이브러리 추가

먼저, Reachability 라이브러리를 프로젝트에 추가해야 합니다. 여기서는 Reachability.swift 라이브러리를 사용하도록 하겠습니다.

Reachability.swift 라이브러리를 다운로드한 후, 프로젝트에 추가합니다.

2. Reachability 클래스 초기화

Reachability 클래스는 인터넷 연결 상태를 확인하는 기능을 제공합니다. 우선, Reachability 인스턴스를 초기화해야 합니다.

import Reachability
 
let reachability = try? Reachability()

3. 인터넷 연결 상태 확인

인터넷 연결 상태를 확인하기 위해서는 Reachability 객체의 connection 속성을 사용하면 됩니다. 다음은 인터넷 연결 상태를 확인하는 함수의 예입니다.

func checkInternetConnection() {
    if reachability?.connection == .unavailable {
        print("인터넷에 연결되어 있지 않습니다.")
    } else {
        print("인터넷에 연결되어 있습니다.")
    }
}

앱에서 필요한 곳에서 checkInternetConnection() 함수를 호출하여 인터넷 연결 상태를 확인할 수 있습니다.

4. 앱 시작 시 Reachability 객체 모니터링 시작

앱이 시작될 때, Reachability 객체의 모니터링을 시작해야 합니다. 이렇게 함으로써 앱이 실행되는 동안 인터넷 연결 상태의 변화를 실시간으로 감지할 수 있습니다.

AppDelegate.swift 파일의 application(_:didFinishLaunchingWithOptions:) 메서드에 아래 코드를 추가하여 Reachability 객체의 모니터링을 시작합니다.

import Reachability
 
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Reachability 객체 모니터링 시작
    do {
        try reachability?.startNotifier()
    } catch {
        print("Reachability 모니터링 시작 실패")
    }
 
    return true
}

5. Reachability 객체 모니터링 중지

Reachability 객체의 모니터링이 더 이상 필요하지 않을 때는 중지해야 합니다. 앱이 종료될 때나, 더 이상 인터넷 연결 상태를 확인하지 않을 때는 Reachability 객체의 모니터링을 중지시켜야 합니다.

AppDelegate.swift 파일의 applicationDidEnterBackground(_:) 메서드에 아래 코드를 추가하여 Reachability 객체의 모니터링을 중지합니다.

import Reachability
 
func applicationDidEnterBackground(_ application: UIApplication) {
    // Reachability 객체 모니터링 중지
    reachability?.stopNotifier()
}

이제 위의 단계를 따라하면 Swift로 iOS 앱에서 Reachability를 사용해 손쉽게 인터넷 연결 가능 여부를 확인할 수 있습니다.

참조: Reachability.swift GitHub