一、iOS12.0以下系统获取WiFi名字和mac地址信息的方法
在iOS有关WiFi开发中,苹果官方提供了NetworkExtension框架让iOS开发者实现VPN以及WiFi热点相应的功能,虽然在iOS9.0系统以后,这个框架的很多功能都被苹果官方屏蔽,想要使用这些被屏蔽的功能,需要开发者去申请权限才能用,但是简单的获取WiFi名字和WiFi的mac地址信息等方法还是可以正常使用的。
1、获取WiFi相关信息的时候需要引入一下头文件
#import <SystemConfiguration/CaptiveNetwork.h>
#import <NetworkExtension/NetworkExtension.h>
想要获取iPhone手机连接到的WiFi名字和WiFi的mac地址,需要用到CNCopySupportedInterfaces和CNCopyCurrentNetworkInfo两个类,具体的实现方法如下所示:
①获取SSID(Service Set Identifier):服务集标识,即WiFi网络的名称。
+ (NSString *)wiFiName {
NSArray *wiFiName = CFBridgingRelease(CNCopySupportedInterfaces());
id info1 = nil;
for (NSString *wfName in wiFiName) {
info1 = (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef) wfName);
if (info1 && [info1 count]) {
break;
}
}
NSDictionary *dic = (NSDictionary *)info1;
NSString *ssidName = [[dic objectForKey:@"SSID"] lowercaseString];
return ssidName;
}
②获取BSSID,即WiFi的mac地址。
+ (NSString *)wifiMac {
NSArray *wfMac = CFBridgingRelease(CNCopySupportedInterfaces());
id info1 = nil;
for (NSString *macName in wfMac) {
info1 = (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef) macName);
if (info1 && [info1 count]) {
break;
}
}
NSDictionary *dic = (NSDictionary *)info1;
NSString *wifiMac = [dic objectForKey:@"BSSID"];
return wifiMac;
}
二、iOS12.0以上系统获取WiFi信息的方法
1、苹果开发者官网官方的解释如下:
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会自动将访问WiFi信息权限添加到您的权限文件和应用程序App ID中。
2、步骤
通过上面的苹果的官方解释可以知道,要想在iOS12.0及以上系统中继续使用该方法,就需要申请获取授权。若使用的是自动签名,授权之后Xcode会自动在App ID和应用的权限列表中增加WiFi使用的权限。若使用的是手动签名,则还需要去App ID中配置一下权限,并生成新的profile文件。具体的操作步骤如下所示:
设置Xcode里面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文件,会同时创建该文件。