Notice
Recent Posts
Recent Comments
Link
투케이2K
594. (ios/swift5) [간단 소스] NEHotspotConfigurationManager 간단 설명 및 사용 옵션 정리 본문
IOS
594. (ios/swift5) [간단 소스] NEHotspotConfigurationManager 간단 설명 및 사용 옵션 정리
투케이2K 2024. 12. 1. 21:00[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT5
[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Swift
- 개발 툴 : Xcode
- 기술 구분 : NEHotspotConfigurationManager / WIFI / AP
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[설명 정리]
// --------------------------------------------------------------------------------------
1. NEHotspotConfigurationManager 은 Wi-Fi 네트워크의 핫스팟 구성을 적용하고 제거하는 관리자입니다
2. NEHotspotConfigurationManager 은 앱에서 Wi-Fi 네트워크를 사용하여 새로운 핫스팟 구성을 만들고 적용하거나 이전에 구성된 네트워크를 업데이트할 수 있습니다.
3. NEHotspotConfigurationManager 사용을 위해서는 사용자에게 승인을 요청 해야하며, 사용자 동의 없이는 앱에서 구성을 변경할 수 없습니다.
4. NEHotspotConfigurationManager 설정한 값은 앱을 제거하면 iOS는 키체인 항목을 포함하여 앱에서 구성한 모든 네트워크 구성을 제거합니다
5. NEHotspotConfigurationManager 사용 가능 지원 범위 :
>> iOS 11.0 이상
>> 아이패드OS 11.0+
>> 맥 카탈리스트 13.1+
>> 비전OS 1.0+
>> 워치OS 7.0+
6. NEHotspotConfigurationManager 구성 생성 :
>> class var shared: NEHotspotConfigurationManager : 싱글톤으로 인스턴스화되므로 공유할 수 있습니다.NEHotspotConfigurationManager
>> func apply(NEHotspotConfiguration, completionHandler: (((any Error)?) -> Void)?) : 사용자에게 권한을 요청한 후 Wi-Fi 네트워크 구성을 추가하거나 업데이트한 후 특정 조건 하에서 네트워크에 가입하려고 시도합니다.
7. NEHotspotConfigurationManager 구성 목록 가져오기 :
>> func getConfiguredSSIDs(completionHandler: ([String]) -> Void) : 앱에서 구성한 Wi-Fi 핫스팟 도메인의 SSID 또는 이름을 반환하고 선택적 완료 핸들러를 호출합니다.
8. NEHotspotConfigurationManager 구성 제거 :
>> func removeConfiguration(forHS20DomainName: String) : 이전에 앱에서 추가한 Hotspot 2.0 도메인 이름으로 식별된 Wi-Fi 핫스팟 구성을 제거합니다.
>> func removeConfiguration(forSSID: String) : 이전에 앱에서 추가한 SSID로 식별된 Wi-Fi 구성을 제거합니다.
9. NEHotspotConfigurationManager 를 사용하기 위한 조건 :
/*
// -----------------------------------------
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
// -----------------------------------------
*/
10. NEHotspotConfigurationManager 사용 소스 코드 예시 :
// [사전 다이렉트 연결 옵션이 있는 경우 해제]
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/nehotspotconfigurationmanager
https://blog.naver.com/kkh0977/223669166907
https://blog.naver.com/kkh0977/223669259799
// --------------------------------------------------------------------------------------
반응형
'IOS' 카테고리의 다른 글
596. (ios/swift5) [간단 소스] LAError 간단 설명 및 사용 옵션 정리 (0) | 2024.12.01 |
---|---|
595. (ios/swift5) [간단 소스] NEHotspotConfigurationError 간단 설명 및 사용 옵션 정리 (0) | 2024.12.01 |
593. (ios/swift5) [간단 소스] NEHotspotNetwork 간단 설명 및 사용 옵션 정리 (0) | 2024.12.01 |
592. (ios/swift5) [간단 소스] CNCopySupportedInterfaces 간단 설명 및 사용 옵션 정리 (0) | 2024.12.01 |
591. (ios/swift5) [기능 보완] getWifiSsid : 현재 연결 된 와이파이 SSID 정보 확인 수행 (0) | 2024.12.01 |
Comments