問題:最近把測試手機(jī)升級到iOS12后發(fā)現(xiàn)在調(diào)試模式下無法獲取wifi信息,而且wifi圖標(biāo)消失了如下圖:
WiFi 圖標(biāo)也消失了,如下圖:
SID全稱Service Set IDentifier, 即Wifi網(wǎng)絡(luò)的公開名稱.在IOS 4.1以上版本提供了公開的方法來獲取該信息.
但是最近,Apple于北京時間9月17日晚在官網(wǎng)發(fā)布了Xcode 10正式版,老司機(jī)團(tuán)隊(duì)成員在第一時間對現(xiàn)有項(xiàng)目做適配。期間,作者發(fā)現(xiàn)某項(xiàng)目使用Xcode 10編譯出的App在iOS 12中無法獲取WiFi的SSID。
獲取WiFi的SSID的方法如下:
-(NSString *)wifi{
//wifi名稱
NSString *strWifiName = @"";
CFArrayRef wifiInterfaces = CNCopySupportedInterfaces();
if(wifiInterfaces){
NSArray *arrInterface = (__bridge NSArray *)wifiInterfaces;
for (NSString *interfaceName in arrInterface) {
CFDictionaryRef dictRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName));
if(dictRef){
NSDictionary *networkInfo = (__bridge NSDictionary *)dictRef;
strWifiName = [networkInfo objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID];
CFRelease(dictRef);
}
}
CFRelease(wifiInterfaces);
}
return strWifiName;
}
在iOS 12中,經(jīng)斷點(diǎn)調(diào)試發(fā)現(xiàn)info為nil。猜測是CNCopyCurrentNetworkInfo方法在iOS 12中有了變化。通過查看官方文檔,發(fā)現(xiàn)文檔中增加了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中為應(yīng)用授權(quán)獲取WiFi信息的能力。授權(quán)后,Xcode會自動在App ID和應(yīng)用的權(quán)限列表中增加獲取WiFi信息的權(quán)限。
看到這里就知道如何解決這個問題了.
1.開發(fā)者中心配置權(quán)限,重新下載證書到本地
項(xiàng)目中的配置:Xcode -> [Project Name] -> Targets -> [Target Name] -> Capabilities -> Access WiFi Information -> ON 如下圖