투케이2K

564. (ios/swift5) NWPathMonitor pathUpdateHandler 사용해 현재 네트워크 안정적 상태 여부 확인 본문

IOS

564. (ios/swift5) NWPathMonitor pathUpdateHandler 사용해 현재 네트워크 안정적 상태 여부 확인

투케이2K 2024. 11. 22. 08:57

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

 

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Swift

- 개발 툴 : Xcode

- 사전 권한 설정 : info.plist

  <key>NSLocationWhenInUseUsageDescription</key>
  <string>앱에서 Wi-Fi 연결을 설정하려면 위치 권한이 필요합니다.</string>

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------

    // -----------------------------------------------------------------------------------------
    // MARK: - [SEARCH FAST] : getNetworkMonitorStatus : 현재 네트워크 안정적 상태 여부 확인
    // -----------------------------------------------------------------------------------------
    func getNetworkMonitorStatus() -> Bool {
        
        /*
        // -----------------------------------------
        // [getNetworkMonitorStatus 메소드 설명]
        // -----------------------------------------
        1. 필요 import : import Network
        // -----------------------------------------
        2. 호출 방법 : if C_Wifi_Ap_Module().getNetworkMonitorStatus() == true {} else {}
        // -----------------------------------------
        3. 애플 사이트 : https://developer.apple.com/documentation/network/nwpathmonitor
        // -----------------------------------------
        */


        // [리턴 변수 선언]
        var returnData = false
        var M_LOG = ""

        
        // [로직 처리 수행]
        if #available(iOS 12, *) {

            // [현재 네트워크 연결 상태 확인 객체 선언]
            let monitor = NWPathMonitor()

            // [세마포어 선언 : 프로그램 로직을 동기화 구현 : value 0 값은 대기 상태 선언]
            let semaphore = DispatchSemaphore(value: 0)

            // [네트워크 연결 상태 확인 부분]
            monitor.pathUpdateHandler = { path in
                if path.status == .satisfied { // [네트워크가 연결된 경우]
                    
                    // [리턴 값 삽입]
                    M_LOG = "[Status] :: Satisfied !!"
                    returnData = true

                    // [네트워크 상태 확인 종료]
                    monitor.cancel()

                    // [세마포어 신호 알림]
                    semaphore.signal()
                }
                else { // [네트워크가 연결되지 않은 경우]
                
                    // [리턴 값 삽입]
                    M_LOG = "[Status] :: UnSatisfied .."
                    returnData = true

                    // [네트워크 상태 확인 종료]
                    monitor.cancel()

                    // [세마포어 신호 알림]
                    semaphore.signal()
                }
            }
            
            // [네트워크 연결 상태 확인 수행]
            monitor.start(queue: DispatchQueue.global())
            
            // [세마포어 확인 대기]
            semaphore.wait()
            
        }
        else {
            M_LOG = "[Error] : Ios Version Under iOS 12"
        }


        // [로그 출력 수행]
        S_Log._D_(description: "현재 네트워크 안정적 상태 여부 확인", data: [
            "M_LOG :: \(M_LOG)",
            "RETURN :: \(returnData)"
        ])
        
        
        // [리턴 반환 수행]
        return returnData

    }

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[결과 출력]
// --------------------------------------------------------------------------------------

================================================================
LOG :: TYPE :: LOG :: 🟢
-------------------------------------------------
LOG :: CLASS PLACE :: C_Wifi_Ap_Module.swift :: getNetworkMonitorStatus() :: 429
-------------------------------------------------
LOG :: NOW TIME :: 2024-11-22 08:51:02
-------------------------------------------------
LOG :: DESCRIPTION :: 현재 네트워크 안정적 상태 여부 확인
-------------------------------------------------
LOG :: M_LOG :: [Status] :: Satisfied !!
-------------------------------------------------
LOG :: RETURN :: true
================================================================

// --------------------------------------------------------------------------------------

 

반응형
Comments