Code
- 조건
- 개발자 계정을 통하여 NetworkExtension, HotSpot Configuration 설정이 필요합니다.
- SSID와 Password 입력하여 접속 시도
// 1
// Capabiliteis 에서 NetworkExtension, Hotspot Configuration 설정후
import NetworkExtension
import SystemConfiguration.CaptiveNetwork
// 2: NEHotspot Configuration 인스턴스로 접근 접근 시도
var wifiConfiguration: NEHotspotConfiguration?
// 3
func someButton(ssid: String, password: String) {
wifiConfiguration = NEHotspotConfiguration(
ssid: ssid,
passphrase: password,
isWEP: false)
wifiConfiguration?.joinOnce = false
falseNEHotspotConfigurationManager.shared.apply(wifiConfiguration!) { error in
if error == nil {
print("WiFi 연결성공")
}else {
print(error.debugDescription)
}
}
}
시작 목적
여러개의 WiFi회선을 사용할수있는 환경에서 현재위치에서 가장 빠른 WiFi를 사용하고 싶다. 그리고 편안하게 WiFi를 바꾸어서 접속하고 싶다라는 생각을 가지고 검색 시작!
- 먼저 내 근처에 있는 WiFi의 SSID목록부터 출력해보자!
- iOS Wi-Fi Management APIs on Technical Q&A QA1942
- 일반적인 목적으로 WiFi scanning, configuration이 안되고, 특정한 목적이 있다면 가능!
- 그러기위해서는
NEHotspotHelper
클래스를 사용 해야하는데, 해당 클래스 사용하려면 특정 자격을 부여해주어야 합니다 Hotspot Helper Request- Hotspot Network Subsystem Programming Guide
- NEHotspotHelper
- 여기서부터 불안해지기 시작…
- iOS Wi-Fi Management APIs on Technical Q&A QA1942
- 그러면 WiFi접속중일때, 접속중인 SSID를 가져와서 password를 저장해놓고, 필요할때 어떤 터치 한번으로 WiFi를 스왑해주자!
- Today Extension에서 바꾸어주자
- WiFi스왑시, 유저의 승인이 있어야 해서 Today Extension에서는 안됨ㅠㅠ
- 결론적으로 망했습니다..
- Today Extension에서 바꾸어주자
- 그러려면 현재 Network상태를 알아야합니다.
- 현재 Network가능 한지 불가능한지,
- Cellular상태인지, WiFi상태인지.
- Reachability.swift을 사용하여 해결
- WiFi 접속 시도
- NEHotspotConfiguration
- NEHotspotConfigurationManager
더 자세한 코드는..! SimplyConnectWiFi를 참조해주세요.
더 알아보면 재미있는 것
- P2P Networking(Peer-to-peer networking) — If your goal is to communicate with other nearby devices, you should look at:
- NSNetService
- Multipeer Connectivity
Reference
- idea
- WiFi
- Network Extension
- System Configuration
- Reachability