[swift] Reachability를 사용해 특정 도메인이 차단되었는지 확인하기

인터넷 연결이 필요한 앱을 개발할 때, 사용자가 특정 도메인에 접근할 수 있는지 확인해야 할 때가 있습니다. 이때 Reachability라이브러리를 사용하면 손쉽게 도메인 접근 가능 여부를 확인할 수 있습니다. 이번 글에서는 Swift 언어를 이용하여 Reachability를 사용해 특정 도메인이 차단되었는지 확인하는 방법에 대해 알아보겠습니다.

Reachability 라이브러리 설치하기

Reachability를 사용하기 위해서는 cocoapods 또는 Swift Package Manager를 이용해 라이브러리를 설치해야 합니다. 여기서는 cocoapods를 사용한 설치 방법을 설명하겠습니다.

  1. Terminal을 열고 프로젝트 폴더로 이동합니다.

  2. Podfile 파일을 생성하거나 이미 존재하는 경우 열어서 다음과 같이 Reachability를 추가합니다.

target 'YourAppName' do
  # ...
  pod 'ReachabilitySwift'
end
  1. Terminal에서 다음 명령어를 실행하여 라이브러리를 설치합니다.
$ pod install
  1. Xcode를 열고 .xcworkspace 파일을 실행합니다.

Reachability 라이브러리를 성공적으로 설치했다면, 이제 사용할 준비가 모두 끝났습니다.

Reachability를 이용해 특정 도메인 접근 가능 여부 확인하기

먼저, Reachability 라이브러리를 import해줍니다.

import Reachability

다음으로, Reachability 객체를 생성합니다.

let reachability = try! Reachability()

이제 특정 도메인의 접근 가능 여부를 확인합니다. 아래의 코드를 사용하면 됩니다.

reachability.whenReachable = { _ in
    DispatchQueue.main.async {
        print("Domain is reachable")
    }
}

reachability.whenUnreachable = { _ in
    DispatchQueue.main.async {
        print("Domain is unreachable")
    }
}

do {
    try reachability.startNotifier()
} catch {
    print("Could not start reachability notifier")
}

여기서 whenReachable 클로저는 도메인에 접근 가능할 때 호출되며, whenUnreachable 클로저는 도메인에 접근 불가능할 때 호출됩니다.

도메인 접근 가능 여부 확인 결과 활용하기

도메인 접근 가능 여부를 확인했다면, 이 정보를 활용하여 필요한 작업을 수행할 수 있습니다. 예를 들어, 도메인이 차단되어있는 경우에는 사용자에게 적절한 안내 메시지를 표시하거나, 다른 도메인으로의 접속을 시도할 수도 있습니다.

reachability.whenReachable = { _ in
    DispatchQueue.main.async {
        print("Domain is reachable")
        // 도메인 접속 가능한 경우 추가 작업 수행
    }
}

reachability.whenUnreachable = { _ in
    DispatchQueue.main.async {
        print("Domain is unreachable")
        // 도메인 접속 불가능한 경우 추가 작업 수행
    }
}

마무리

Reachability를 이용해 특정 도메인의 접근 가능 여부를 확인하는 방법에 대해 알아보았습니다. 도메인 차단 여부를 확인하여 적절한 대응을 취할 수 있도록 코드를 작성할 수 있습니다. Reachability 라이브러리는 네트워크 연결 상태를 감지하는 기능 외에도, WiFi 또는 셀룰러 데이터 연결 여부를 확인할 수도 있습니다.

더 자세한 사용 방법은 Reachability 라이브러리의 공식 문서를 참고하시기 바랍니다.

ReachabilitySwift GitHub