蘋果提供了NetworkExtension框架讓開發(fā)者實現(xiàn)VPN以及WiFi熱點相應的功能,雖然iOS9系統(tǒng)出來之后砍的,這個框架的很多功能被蘋果屏蔽了筏餐,需要申請權限才能用,但是本篇簡單的獲取WiFi名字和mac地址信息的方法還是可以用的捂寿。
獲取WiFi相關信息的時候需要引入一下頭文件
#import <SystemConfiguration/CaptiveNetwork.h>
#import <NetworkExtension/NetworkExtension.h>
要拿到手機的WiFi名字和WiFi的mac地址我們只需要用到CNCopySupportedInterfaces和CNCopyCurrentNetworkInfo兩個類口四,實現(xiàn)方法如下:
1、獲取SSID(Service Set Identifier)秦陋,服務集標識蔓彩,也就是WiFi網(wǎng)絡所取的名字。
+ (NSString *)wifiName
{
??? NSArray *ifs = CFBridgingRelease(CNCopySupportedInterfaces());
??? id info = nil;
??? for (NSString *ifname in ifs) {
??????? info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef) ifname);
??????? if (info && [info count]) {
??????????? break;
??????? }
??? }
??? NSDictionary *dic = (NSDictionary *)info;
??? NSString *ssid = [[dic objectForKey:@"SSID"] lowercaseString];
??? return ssid;
}
2、獲取BSSID即mac地址赤嚼。
+ (NSString *)wifiMac
{
??? NSArray *ifs = CFBridgingRelease(CNCopySupportedInterfaces());
??? id info = nil;
??? for (NSString *ifname in ifs) {
??????? info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef) ifname);
??????? if (info && [info count]) {
??????????? break;
??????? }
??? }
??? NSDictionary *dic = (NSDictionary *)info;
??? NSString *bssid = [dic objectForKey:@"BSSID"];
??? return bssid;
}
獲取到的結果如下:
SSID = mywifiname
BSSID = e3:fc:40:38:ac:e6
這個方法在iOS12以下的系統(tǒng)完全可以勝任我們的任務大磺,但是iOS12+的系統(tǒng)無法正常獲取到WiFi信息。蘋果對方法的使用提升了要求探膊。
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信息的權限逞壁。
通過上面我們可以了解到,要在iOS12以上的系統(tǒng)中繼續(xù)使用方法锐锣,就需要獲取授權腌闯。如果你使用的是自動簽名,授權之后Xcode會自動在App ID和應用的權限列表中增加WiFi的權限雕憔。如果你使用的是手動簽名姿骏,可能還需要去App ID中配置一下權限,并生成新的profile文件斤彼。
具體的操作如下
設置Capabilities步驟:Target->?Capabilities->?Access WiFi Information->?ON
開啟Access WiFi Information
如果項目使用的是手動簽名分瘦,上面打開Access WiFi Information之后,可能Add the Access WiFi Information feature to your App ID這一項會報錯琉苇,需要手動去App ID賬號中設置嘲玫。
打開Access WiFi Information之后,工程會在.entitlements文件中添加Access WiFi Information信息并扇,如果沒有.entitlements文件會同時創(chuàng)建文件去团。
.entitlements文件中添加值
配置好上面的信息,在iOS12+的系統(tǒng)中獲取WiFi名字和mac信息的方法就可以正常獲取信息了穷蛹。
如果采用的是手動簽名土陪,App ID中配置Access WiFi Information的方法如下,編輯App ID肴熏,勾選相應的選項鬼雀。
App ID配置
然后重新生成項目的Provisioning Profiles文件,包括Distribution的和Development的扮超,下載之后雙擊打開取刃,項目就可以正常簽名,并獲取到WiFi信息了出刷。