투케이2K

595. (ios/swift5) [간단 소스] NEHotspotConfigurationError 간단 설명 및 사용 옵션 정리 본문

IOS

595. (ios/swift5) [간단 소스] NEHotspotConfigurationError 간단 설명 및 사용 옵션 정리

투케이2K 2024. 12. 1. 21:04

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

 

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

- 언어 : Swift


- 개발 툴 : Xcode


- 기술 구분 : NEHotspotConfigurationError / Error Code / WIFI / AP

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






// --------------------------------------------------------------------------------------
[설명 정리]
// --------------------------------------------------------------------------------------

1. NEHotspotConfigurationError 은 핫스팟 구성 관리자 메서드에서 반환된 오류 값입니다


2. NEHotspotConfigurationError 사용 가능 지원 범위 : 

  >> iOS 11.0 이상
  >> 아이패드OS 11.0+
  >> 맥 카탈리스트 13.1+
  >> 비전OS 1.0+
  >> 워치OS 7.0+


3. NEHotspotConfigurationError 오류 case : 

  >> case invalid : 구성이 유효하지 않습니다.
  >> case invalidSSID : SSID 값이 유효하지 않습니다.
  >> case invalidWPAPassphrase : WPA 암호가 유효하지 않습니다.
  >> case invalidWEPPassphrase : WEP 암호가 유효하지 않습니다.
  >> case invalidEAPSettings : EAP 설정이 유효하지 않습니다.
  >> case invalidHS20Settings : HS 2.0 설정이 유효하지 않습니다.
  >> case invalidHS20DomainName : HS 2.0 도메인 이름이 유효하지 않습니다.
  >> case invalidSSIDPrefix : 핫스팟 구성을 만드는 데 사용된 SSID 접두사가 잘못되었습니다.
  >> case userDenied : 사용자가 네트워크 구성을 거부했습니다.
  >> case `internal` : 내부 오류, 그 외에는 정의되지 않았습니다.
  >> case pending : 네트워크 구성 작업이 완료되지 않았습니다.
  >> case systemConfiguration : 시스템 구성이 유효하지 않습니다.
  >> case unknown : 알 수 없는 오류가 발생했습니다.
  >> case joinOnceNotSupported : join-once 옵션은 EAP 구성을 지원하지 않습니다.
  >> case alreadyAssociated : 구성이 이미 핫스팟과 연결되어 있습니다.
  >> case applicationIsNotInForeground :해당 애플리케이션이 포그라운드에서 실행되고 있지 않습니다.


4. NEHotspotConfigurationError 를 사용하기 위한 조건 : 

    /*
    // -----------------------------------------
    1. 필요 import :
        
        import NetworkExtension
        import SystemConfiguration.CaptiveNetwork
    // -----------------------------------------
    2. 필요 권한 : 위치 권한 Location
        
        Privacy - Location Always Usage Description
        Privacy - Location Always and When In Use Usage Description
    // -----------------------------------------
    3. MARK: xcode 프로젝트 Capabillity 사용 설정 방법 : [Hotspot Configuration]
        
        - 사전) 유료 결제를 진행한 개발자 계정이 필요 (or 개발자 초대)
        - Xcode 프로젝트 설정 >> Capabillity >> Hotspot Configuration 추가
        - 프로젝트 entitlements 에서 추가한 Hotspot Configuration 권한이 정상 표시 되는 것 확인
        - 설정 및 적용 참고 사이트 : 
        https://blog.naver.com/kkh0977/223669166907
        https://blog.naver.com/kkh0977/223669259799
    // -----------------------------------------
    */


5. NEHotspotConfigurationError 사용 소스 코드 예시 : 

    // [사전 다이렉트 연결 옵션이 있는 경우 해제]
    NEHotspotConfigurationManager.shared.removeConfiguration(forSSID: "\(ssid)")


    // [인풋으로 들어온 WIFI 정보로 연결 수행]
    //let hotspotConfig = NEHotspotConfiguration(ssid: "\(ssid)") // MARK: [SoftAp]
    let hotspotConfig = NEHotspotConfiguration(ssid: "\(ssid)", passphrase: "\(pw)", isWEP: false) // MARK: [WPA]
    hotspotConfig.joinOnce = true

    NEHotspotConfigurationManager.shared.apply(hotspotConfig) { error in
        if let errorLet = error as NSError? {

            switch errorLet.code {

            case NEHotspotConfigurationError.invalid.rawValue: // [구성이 유효하지 않음]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : invalid : 구성이 유효하지 않음"
            case NEHotspotConfigurationError.invalidSSID.rawValue: // [SSID 값이 유효하지 않음]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : invalidSSID : SSID 값이 유효하지 않음"
            case NEHotspotConfigurationError.invalidWPAPassphrase.rawValue: // [WPA 암호가 유효하지 않음]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : invalidWPAPassphrase : WPA 암호가 유효하지 않음"
            case NEHotspotConfigurationError.invalidWEPPassphrase.rawValue: // [WEP 암호가 유효하지 않음]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : invalidWEPPassphrase : WEP 암호가 유효하지 않음"
            case NEHotspotConfigurationError.invalidEAPSettings.rawValue: // [EAP 설정이 유효하지 않음]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : invalidEAPSettings : EAP 설정이 유효하지 않음"
            case NEHotspotConfigurationError.invalidHS20Settings.rawValue: // [HS 2.0 설정이 유효하지 않음]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : invalidHS20Settings : HS 2.0 설정이 유효하지 않음"
            case NEHotspotConfigurationError.invalidHS20DomainName.rawValue: // [HS 2.0 도메인 이름이 유효하지 않음]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : invalidHS20DomainName : HS 2.0 도메인 이름이 유효하지 않음"
            case NEHotspotConfigurationError.invalidSSIDPrefix.rawValue: // [핫스팟 구성을 만드는 데 사용된 SSID 접두사가 잘못됨]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : invalidSSIDPrefix : 핫스팟 구성을 만드는 데 사용된 SSID 접두사가 잘못됨"
            case NEHotspotConfigurationError.userDenied.rawValue: // [사용자가 네트워크 구성을 거부함 - 권한 거부]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : userDenied : 사용자가 네트워크 구성을 거부함"
            case NEHotspotConfigurationError.pending.rawValue: // [네트워크 구성 작업이 완료되지 않음]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : pending : 네트워크 구성 작업이 완료되지 않음"
            case NEHotspotConfigurationError.systemConfiguration.rawValue: // [시스템 구성이 유효하지 않음]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : systemConfiguration : 시스템 구성이 유효하지 않음"
            case NEHotspotConfigurationError.joinOnceNotSupported.rawValue: // [join-once 옵션은 EAP 구성을 지원하지 않음]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : joinOnceNotSupported : join-once 옵션은 EAP 구성을 지원하지 않음"
            case NEHotspotConfigurationError.alreadyAssociated.rawValue: // [구성이 이미 핫스팟과 연결되어 있음]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : alreadyAssociated : 구성이 이미 핫스팟과 연결되어 있음"
            case NEHotspotConfigurationError.internal.rawValue: // [내부 시스템 에러 발생]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : internal : 내부 시스템 에러 발생 (네트워크 디버깅 해제, Xcode 설정 확인 및 재실행 - Hotspot Configuration 포함 확인, 휴대폰 재부팅 필요)"
            case NEHotspotConfigurationError.applicationIsNotInForeground.rawValue: // [해당 애플리케이션이 포그라운드에서 실행되고 있지 않음]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : applicationIsNotInForeground : 해당 애플리케이션이 포그라운드에서 실행되고 있지 않음"
            default: // [unknown = 알수 없음 오류]
                C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Error] : default : \(errorLet.code)"
            }

            S_Log._E_(description: "특정 와이파이 SSID , PW 입력 다이렉트 연결 에러", data: [
                "M_LOG :: \(C_Wifi_Ap_Module.WIFI_CONNECT_LOG)",
                "Description :: \(errorLet.description)"
            ])
            completion(returnData) // [콜백 반환]
            return
            
        } else {

            C_Wifi_Ap_Module.WIFI_CONNECT_LOG = "[Success] : Wifi Connect : \(ssid)"
            returnData = true

            S_Log._W_(description: "특정 와이파이 SSID , PW 입력 다이렉트 연결 성공", data: [
                "M_LOG :: \(C_Wifi_Ap_Module.WIFI_CONNECT_LOG)"
            ])

            completion(returnData) // [콜백 반환]
            return

        }
    }

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






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

https://developer.apple.com/documentation/networkextension/nehotspotconfigurationerror

https://blog.naver.com/kkh0977/223669166907

https://blog.naver.com/kkh0977/223669259799

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

반응형
Comments