蘋果提供了
NetworkExtension框架讓開發者實現VPN以及WiFi熱點相應的功能,雖然iOS9系統出來之后,這個框架的很多功能被蘋果屏蔽了,需要申請權限才能用,但是今天介紹的的獲取WiFi名字和mac地址信息的方法還是可以用的。
獲取WiFi相關信息的時候需要引入一下頭文件
#import <SystemConfiguration/CaptiveNetwork.h>
#import <NetworkExtension/NetworkExtension.h>
實現方法如下:
1、獲取SSID(Service Set Identifier),服務集標識,也就是WiFi網絡所取的名字。
+ (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以下的系統完全可以勝任我們的任務,但是iOS12+的系統無法正常獲取到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以上的系統中繼續使用方法,就需要獲取授權。如果你使用的是自動簽名,授權之后Xcode會自動在App ID和應用的權限列表中增加WiFi的權限。如果你使用的是手動簽名,可能還需要去App ID中配置一下權限,並生成新的profile文件。
具體的操作如下:
設置
具體的操作如下:
設置
Capabilities步驟:
Target->
Capabilities->
Access WiFi Information->
ON
如果項目使用的是手動簽名,上面打開
打開
Access WiFi Information之后,可能
Add the Access WiFi Information feature to your App ID這一項會報錯,需要手動去App ID賬號中設置。
打開
Access WiFi Information之后,工程會在
.entitlements文件中添加
Access WiFi Information信息,如果沒有
.entitlements文件會同時創建文件。
配置好上面的信息,在iOS12+的系統中獲取WiFi名字和mac信息的方法就可以正常獲取信息了。
如果采用的是手動簽名,App ID中配置Access WiFi Information的方法如下,編輯App ID,勾選相應的選項。
然后重新生成項目的Provisioning Profiles文件,包括Distribution的和Development的,下載之后雙擊打開,項目就可以正常簽名,並獲取到WiFi信息了。
