🦁
[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