iOS는 주위의 사용가능한 모든 Wi-Fi network 이름과 정보를 가져오는 기능을 제공하지 않음
하지만 현재 연결된 network의 SSID를 가져올 수는 있음
Preliminary
- iOS11 SDK or later
- Xcode에서 Hotspot Configuration Capability 설정 필요 (Signing & Capabilities)
- Wi-Fi에 연결하기 위해서는 target network의 SSID와 password를 알고 있어야함
Wi-Fi Configuration
- 사용자가 특정 Wi-Fi network에 연결하거나 Wi-Fi를 사용하는 accessory 설정등 기능
- Wi-Fi Configuration
- Persistent configuration: Settings에서 Wi-Fi 변경과 동일
- Join-once configuration: 일시적으로 Wi-Fi network 변경
- 지원 인증 모델:
- 인증 없는 SSID
- password-based 인증 SSID (WEP, WPA, WPA2)
- EAP 인증 SSID
- EAP 인증 Hotspot 2.0
NEHotspotConfiguration
- 새 Hotspot 구성을 만들거나 구성된 Network를 업데이트 하려고 하면 사용자 승인 필요
- 여러 initializer 제공 - 위 지원 인증 모델 적용
- `NEHotspotConfigurationManager`
- apply - Wi-Fi network configuration 추가 및 업데이트 + permission 확인 + join
- removeConfiguration - 추가된 Wi-Fi network configuration 삭제 기능
- getConfiguration - 구성한 Wi-Fi network 의 SSID나 hotspot domain name을 가져옴 + completion handler 실행
- `NEHotspotConfigurationError`
- 0 ~ 15 까지의 다양한 Error Code
- `case userDenied = 7`
- 사용자가 permission 을 주지 않을때 발생
- `case alreadyAssociated = 13`
- 이미 target network에 연결되어 있을때 발생
- 모든 작업이 끝나면 disconnect
- `removeConfiguration` 호출
- 연결 시도:
- `NSHotspotConfiguration` 생성 및 초기화
- `NEHotspotConfigurationManager` 싱글톤 인스턴스로 접근하여 apply 메서드 호출
- `apply`의 completionHandler는 성공 여부를 리턴하지 않음 → 대신 연결 시도 결과 `Error`를 받은 후 `NEHotspotNetwork`의 `fetchCurrent`로 현재 Wi-Fi 정보를 확인 할 수 있음 (아래 추가 설명)
현재 Wi-Fi 상태 가져오기
- `NEHotspotNetwork` - 명령 또는 응답과 관련된 Wi-Fi 네트워크 정보
- Xcode에서 Access WiFi Information Capability 설정 필요 (Signing & Capabilities)
- `fetchCurrent` 현재 Wi-Fi network의 SSID, BSSID, security type등 정보를 가져옴
- synchronous: `class func fetchCurrent(completionHandler: @escaping (NEHotspotNetwork?) -> Void)`
- asynchronous: `class func fetchCurrent() async -> NEHotspotNetwork?`
Reference