iOS 获取连接的WiFi和Mac地址

最近做了一个WiFi的硬件APP,需要用到当前手机链接的WiFi名字和Mac地址,这种场景使用,其实,在打卡软件中,应该比较常用,比如打卡需要连接到公司的WiFi,就是保证你在办公室打的卡。

刚开始使用的时候,以为就像别人说的需要,想苹果申请访问权限,实际上如果只是想获取当前访问的WiFi名称和Mac地址,是不用申请的。

使用
需要添加系统库SystemConfiguration.framework,并且,在需要使用的文件中引用#import <SystemConfiguration/CaptiveNetwork.h>

 

CFArrayRef __nullable CNCopySupportedInterfaces (void)API_AVAILABLE(macos(10.8), ios(4.1))  API_UNAVAILABLE(tvos, watchos);

CFDictionaryRef __nullable CNCopyCurrentNetworkInfo (CFStringRef interfaceName) API_AVAILABLE(ios(4.1)) API_UNAVAILABLE(macos, tvos, watchos);

kCNNetworkInfoKeySSIDData ->当前的SSID,CFData格式

kCNNetworkInfoKeySSID ->当前连接的WiFi的名字 CFString格式

kCNNetworkInfoKeyBSSID->当前WiFi的Mac地址 CFString格式

-(void)getWiFiInfo{

NSArray * supports =  (__bridge_transfer id)CNCopySupportedInterfaces();

    id SSID = nil;//WiFi标示

    id BSSID = nil;

    id info = nil;

    id SSIDDATA = nil;

    for(NSString * idf in supports){

        info =  (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef)idf);

        if (info&&[info count]) {

            break;

        }

    }

     SSID = [info objectForKey:@"SSID"];

    BSSID = [info objectForKey:@"BSSID"];

    SSIDDATA = [info objectForKey:@"SSIDDATA"];

    //    NSData *  data = (__bridge NSData*)SSIDDATA;

   NSLog(@"%@",[[NSString alloc]initWithData:SSIDDATA encoding:NSUTF8StringEncoding]);

     NSLog(@"SSID***%@",SSID);

    NSLog(@"BSSID***%@",BSSID);

    NSLog(@"SSIDDATA***%@",SSIDDATA);

}

遇见的坑:iOS 12.0以上 在调试时,发现获取的数据是nil,这是因为iOS12.0系统对方法CNCopyCurrentNetworkInfo做了变更,可以查看苹果的开发者文档。

 

也就是说iOS 12.0以上,如果需要访问WiFi信息的话,可以在bundleID里面,开通Access WIFi Information功能,同时,也需要在你的项目打开这个功能。

 

解决方案:

Xcode -> [Project Name] -> Targets -> [Target Name] -> Capabilities -> Access WiFi Information -> ON

 

工程中会多了一个.entitlements文件

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值