前幾天做專案的時候,碰到一個問題,獲取wifi的SSID,其實就是獲取Wi-Fi的名字
iOS12以前
在iOS13之前獲取wifi的SSID很簡單,蘋果提供了介面CNCopyCurrentNetworkInfo,直接呼叫就可以拿到了,附上程式碼:
-(NSString *)getSSIDWhenAuth {
NSString *ssidNameStr = @"GET_SSID_FAILED";
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *ifname in ifs) {
NSDictionary *ifDic = (__bridge_transfer NSDictionary *)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifname);
if(ifDic[@"SSID"]){
ssidNameStr = ifDic[@"SSID"];
}
}
return ssidNameStr;
}
是不是很簡單,後來蘋果處於對安全的考慮,這樣是不行滴.
iOS12以後,Xcode11之前
在iOS 12中,經斷點除錯發現info為nil
。猜測是CNCopyCurrentNetworkInfo
方法在iOS 12中有了變化。通過檢視官方文件,發現文件中增加了Important
字樣的描述:
重要描述 在iOS 12+中使用此方法需要在Xcode中為應用授權獲取WiFi資訊的能力。授權後,Xcode會自動在App ID和應用的許可權列表中增加獲取WiFi資訊的許可權。
Xcode
-> [Project Name] -> Targets
-> [Target Name] -> Capabilities
-> Access WiFi Information
-> ON
按照上述方案操作完畢後,會發現工程的.entitlements
檔案中多了一對Key-Value
:
接下來就可以正常獲取ssid了,不過我現在環境是iOS13+,Xcode11+,發現Xcode沒有Access WiFi Information開關了,查了很多資料,需要在開發者賬號裡配置.
iOS12以後,Xcode11之後,重新建立證書
步驟1、登入開發者賬號
步驟2、鑰匙串生成CSR檔案
步驟3、建立證書
步驟4:建立完下載證書雙擊安裝到Xcode
步驟5:
雙擊2位置,這時會在下面多出一條Access WiFi Information,這時就可以正常獲取到ssid了.