問(wèn)題:最近把測(cè)試手機(jī)升級(jí)到iOS12后發(fā)現(xiàn)在調(diào)試模式下無(wú)法獲取wifi信息聋呢,而且wifi圖標(biāo)消失了如下圖:
WiFi 圖標(biāo)也消失了糖赔,如下圖:
SID全稱(chēng)Service Set IDentifier, 即Wifi網(wǎng)絡(luò)的公開(kāi)名稱(chēng).在IOS 4.1以上版本提供了公開(kāi)的方法來(lái)獲取該信息.
但是最近透揣,Apple于北京時(shí)間9月17日晚在官網(wǎng)發(fā)布了Xcode 10正式版疏哗,老司機(jī)團(tuán)隊(duì)成員在第一時(shí)間對(duì)現(xiàn)有項(xiàng)目做適配疲迂。期間,作者發(fā)現(xiàn)某項(xiàng)目使用Xcode 10編譯出的App在iOS 12中無(wú)法獲取WiFi的SSID朱嘴。
獲取WiFi的SSID的方法如下:
-(NSString *)wifi{
//wifi名稱(chēng)
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。猜測(cè)是CNCopyCurrentNetworkInfo方法在iOS 12中有了變化萍嬉。通過(guò)查看官方文檔乌昔,發(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會(huì)自動(dòng)在App ID和應(yīng)用的權(quán)限列表中增加獲取WiFi信息的權(quán)限磕道。
看到這里就知道如何解決這個(gè)問(wèn)題了.
1.開(kāi)發(fā)者中心配置權(quán)限,重新下載證書(shū)到本地
項(xiàng)目中的配置:Xcode -> [Project Name] -> Targets -> [Target Name] -> Capabilities -> Access WiFi Information -> ON 如下圖