獲取Wi-Fi的SSID

Dennis丶SN發表於2020-05-04

前幾天做專案的時候,碰到一個問題,獲取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字樣的描述:

 

 

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中為應用授權獲取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了.

 

相關文章