iOS 12中無法獲取WiFi的SSID了?別慌看這里!
前言
SSID全稱Service Set IDentifier, 即Wifi網絡的公開名稱.在IOS 4.1以上版本提供了公開的方法來獲取該信息.
但是最近,Apple于北京時間9月17日晚在官網發(fā)布了Xcode 10正式版,QiShare團隊成員于9月18日中午統(tǒng)一升級以對現有項目做適配。期間,作者發(fā)現某項目使用Xcode 10編譯出的App在iOS 12中無法獲取WiFi的SSID。
敲黑板:獲取WiFi的SSID是智能硬件App中配網模塊的常用功能,各大廠商要針對iOS 12適配一波了(@huawei.com; @mi.com; @360.com; @jd.com; @baidu.com; @orvibo.com; @scinan.com; ...)。
獲取WiFi的SSID的方法如下:
+ (NSString *)wifiSSID { NSString *ssid = nil; NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces(); for (NSString *ifnam in ifs) { NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam); if (info[@"SSID"]) { ssid = info[@"SSID"]; } } return ssid; }
在iOS 12中,經斷點調試發(fā)現info為nil。猜測是CNCopyCurrentNetworkInfo方法在iOS 12中有了變化。通過查看官方文檔,發(fā)現文檔中增加了Important字樣的描述:
CNCopyCurrentNetworkInfo文檔
Important
To use this function in iOS 12 and later, enable the Access WiFi Information capability for your app in Xcode. When you enable this capability, Xcode automatically adds the Access WiFi Information entitlement to your entitlements file and App ID.重要描述
在iOS 12+中使用此方法需要在Xcode中為應用授權獲取WiFi信息的能力。授權后,Xcode會自動在App ID和應用的權限列表中增加獲取WiFi信息的權限。
解決方法
看到這里,解決方案就有了:Xcode -> [Project Name] -> Targets -> [Target Name] -> Capabilities -> Access WiFi Information -> ON
解決方案步驟圖示
按照上述方案操作完畢后,會發(fā)現工程的.entitlements文件中多了一對Key-Value:
.entitlements文件
至此,就能在iOS 12+中正常獲取到WiFi的SSID了。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
級別: ★☆☆☆☆
標簽:「iOS 12」「SSID」「Access WiFi Information」「CNCopyCurrentNetworkInfo」
作者: Xs·H
審校: QiShare團隊
相關文章
深入解析iOS應用開發(fā)中對設計模式中的橋接模式的使用
這篇文章主要介紹了iOS應用開發(fā)中對設計模式中的橋接模式的使用,bridge橋接模式中主張把抽象部分與實現部分分離,需要的朋友可以參考下2016-03-03LRecyclerView側滑iOS阻塞效果不完整的解決辦法
這篇文章主要介紹了LRecyclerView側滑iOS阻塞效果不完整的解決辦法,非常不錯,具有參考借鑒價值,需要的朋友參考下2016-12-12