🦁

[iOS]現在接続しているWiFiの情報を取得する

2022/01/24に公開

接続している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()

さらに、NSLocationWhenInUseUsageDescriptionInfo.plistに追加します。

これで、NEHotspotNetworkを取得できます。

考察

  • entitlementがあるので、Appleに説明が必要になりそう
  • 将来的にAppStoreで使っている旨が表示されそう
  • WiFiの情報の取得に位置情報の許可が必要なのは、内蔵されているAssisted-GPSでGPSとWiFiの両方を使って位置情報を決めているからと思われる。

Discussion

ログインするとコメントできます