在Xcode10.2之后发现返回的info是个nil,根本获取不到SSID和BSSID,后来查看官方文档需要改动以下几处
1.需要打开Xcode -> [Project Name] -> Targets -> [Target Name] -> Capabilities -> Access WiFi Information -> ON

打开选项按钮
2.打开之后会看到项目中多了一个证书的文件和一个新的Key

证书
3.如果在勾选之后发现图中的红色,需要你去开发者中心,在证书里面勾选类似打开通知的方式勾选这个选项导出证书就可以了,(如果直接使用开发者账号不需要配置这个证书)

自动模式
代码实现部分
1.需要导入头文件
#import <SystemConfiguration/CaptiveNetwork.h>
2.代码实现
- (void)getSMSystemInfo{
NSArray *ifs = (__bridge_transfer NSArray *)CNCopySupportedInterfaces();
NSDictionary *info = nil;
for (NSString *ifnam in ifs) {
info = (__bridge_transfer NSDictionary *)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
if (info && [info count]) {
break;
}
}
NSLog(@"info===%@", info);
NSString *SSID = info[@"SSID"];//WiFi名称
NSString *BSSID = info[@"BSSID"];//无线网的MAC地址
if ([self stringIsNull:SSID]) {
SSID=@"";
}
if ([self stringIsNull:BSSID]) {
BSSID=@"";
}
SSID = [self UrlEncode:SSID];
BSSID = [self UrlEncode:BSSID];
NSLog(@"WiFi名称 === %@,无线网的MAC地址===%@",SSID,BSSID);
}
- (BOOL)stringIsNull:(NSString*)str {
if(str == nil || [str class]==[NSNull class]) {
return true;
}
if([str isKindOfClass:[NSString class]]){
if([str isEqualToString:@""]) {
return true;
}else{
return false;
}
}else if ([str isKindOfClass:[NSNumber class]]){
int temp = [str intValue];
if(temp==0) {
return true;
}else{
return false;
}
}else{
return true;
}
}
3.加密
/** 加密 */
-(NSString*)UrlEncode:(NSString*)urlString {
if ([urlString isKindOfClass:[NSNumber class]]) {
return urlString;
}
NSString*encode = (NSString*)
CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(nil,
(CFStringRef)urlString,nil,
(CFStringRef)@"!$&'()*+,-/:;=?@~%#[]",
kCFStringEncodingUTF8));
return encode;
}
网友评论