🦁
[iOS]現在接続しているWiFiの情報を取得する
接続しているWiFiの情報を得たい時がたまにあります。
しかし、このWiFiの情報を得ることはプライバシーに関わることなので、iOSでは取得に制限があります。
特にiOS14以降では特別なentitlementが必要など、実装にはいくつか注意点があります。
環境
iOS14以降です。
使うクラス
CNCopyCurrentNetworkInfoもありますが、こちらはiOS14でdeprecatedなので使わないようにします。
実装
NEHotspotNetworkで取得
NEHotspotNetwork.fetchCurrent { network in
.....
}
fetchCurrentで現在接続しているWiFi情報をNEHotspotNetworkとして受け取ります。
この時点ではnullが返ってきます。
CapabilitiiesにAccess WiFi Informationを追加
WiFi情報はプライバシーの問題でもあるため、entitlementを追加しなくてはなりません。
Xcode > プロジェクト設定 > Signing & Capabilitiesタブより、+ Capabilityを押してAccess WiFi Informationを選択します。
しばらくすると、entitlementが追加されます。
ただし、この時点ではまだ前述のNEHotspotNetworkはnullのままです。
CoreLocationの実装
NEHotspotNetworkを取得するためには、CoreLocationで位置情報の許可を得る必要があります。
CLLocationManager().requestWhenInUseAuthorization()
さらに、NSLocationWhenInUseUsageDescriptionをInfo.plistに追加します。
これで、NEHotspotNetworkを取得できます。
考察
- entitlementがあるので、Appleに説明が必要になりそう
- 将来的にAppStoreで使っている旨が表示されそう
- WiFiの情報の取得に位置情報の許可が必要なのは、内蔵されているAssisted-GPSでGPSとWiFiの両方を使って位置情報を決めているからと思われる。
Discussion