iOS 12中獲取WiFi的SSID

開始搞智能家居,wifi獲取不到了??

小插曲xcode

 

SSID全稱Service Set IDentifier, 即Wifi網絡的公開名稱.在IOS 4.1以上版本提供了公開的方法來獲取該信息.網絡

可是最近,Apple於北京時間9月17日晚在官網發佈了Xcode 10正式版,QiShare團隊成員於9月18日中午統一升級以對現有項目作適配。期間,做者發現某項目使用Xcode 10編譯出的App在iOS 12中沒法獲取WiFi的SSID。app

敲黑板:獲取WiFi的SSID是智能硬件App中配網模塊的經常使用功能,各大廠商要針對iOS 12適配一波了(@huawei.com; @mi.com; @360.com; @jd.com; @baidu.com; @orvibo.com; @scinan.com; ...)。this

獲取WiFi的SSID的方法以下:spa

?
1
2
3
4
5
6
7
8
9
10
11
12
+ (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中,經斷點調試發現info爲nil。猜想是CNCopyCurrentNetworkInfo方法在iOS 12中有了變化。經過查看官方文檔,發現文檔中增長了Important字樣的描述:.net

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.code

重要描述
在iOS 12+中使用此方法須要在Xcode中爲應用受權獲取WiFi信息的能力。受權後,Xcode會自動在App ID和應用的權限列表中增長獲取WiFi信息的權限。orm

解決方法htm

看到這裏,解決方案就有了:Xcode -> [Project Name] -> Targets -> [Target Name] -> Capabilities -> Access WiFi Information -> ON

解決方案步驟圖示

按照上述方案操做完畢後,會發現工程的.entitlements文件中多了一對Key-Value:

.entitlements文件

相關文章
相關標籤/搜索