前几天做项目的时候,碰到一个问题,获取wifi的SSID,其实就是获取Wi-Fi的名字
iOS12以前
在iOS13之前获取wifi的SSID很简单,苹果提供了接口CNCopyCurrentNetworkInfo,直接调用就可以拿到了,附上代码:
-(NSString *)getSSIDWhenAuth {
NSString *ssidNameStr = @"GET_SSID_FAILED";
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *ifname in ifs) {
NSDictionary *ifDic = (__bridge_transfer NSDictionary *)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifname);
if(ifDic[@"SSID"]){
ssidNameStr = ifDic[@"SSID"];
}
}
return ssidNameStr;
}
是不是很简单,后来苹果处于对安全的考虑,这样是不行滴.
iOS12以后,Xcode11之前
在iOS 12中,经断点调试发现info为nil
。猜测是CNCopyCurrentNetworkInfo
方法在iOS 12中有了变化。通过查看官方文档,发现文档中增加了Important
字样的描述:
重要描述 在iOS 12+中使用此方法需要在Xcode中为应用授权获取WiFi信息的能力。授权后,Xcode会自动在App ID和应用的权限列表中增加获取WiFi信息的权限。
Xcode
-> [Project Name] -> Targets
-> [Target Name] -> Capabilities
-> Access WiFi Information
-> ON
按照上述方案操作完毕后,会发现工程的.entitlements
文件中多了一对Key-Value
:
接下来就可以正常获取ssid了,不过我现在环境是iOS13+,Xcode11+,发现Xcode没有Access WiFi Information开关了,查了很多资料,需要在开发者账号里配置.
iOS12以后,Xcode11之后,重新创建证书
步骤1、登录开发者账号
步骤2、钥匙串生成CSR文件
步骤3、创建证书
步骤4:创建完下载证书双击安装到Xcode
步骤5:
双击2位置,这时会在下面多出一条Access WiFi Information,这时就可以正常获取到ssid了.