前幾天做項目的時候,碰到一個問題,獲取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了.