iOS 12中无法获取WiFi的SSID了?别慌看这里!

前言

SSID全称Service Set IDentifier,即Wifi网络的公开名称.在IOS 4.1以上版本提供了公开的方法获取该信息.

但是最近,Apple于北京时间9月17日晚在官网发布了Xcode 10正式版,QiShare团队成员于9月18日中午统一升级以对现有项目做适配。期间,作者发现某项目使用Xcode 10编译出的App在iOS 12中无法获取WiFi的SSID。

敲黑板:获取WiFi的SSID是智能硬件App中配网模块的常用功能,各大厂商要针对iOS 12适配一波了(@huawei.com; @mi.com; @360.com; @jd.com; @baidu.com; @orvibo.com; @scinan.com; ...)。

获取WiFi的SSID的方法如下:

+ (Nsstring *)wifiSSID {

 Nsstring *ssid = nil;
 NSArray *ifs = (__bridge_transfer id)CNcopySupportedInterfaces();
 for (Nsstring *ifnam in ifs) {
  NSDictionary *info = (__bridge_transfer id)CNcopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
  if (info[@"SSID"]) {
   ssid = info[@"SSID"];
  }
 }
 return ssid;
}

在iOS 12中,经断点调试发现info为nil。猜测是CNcopyCurrentNetworkInfo方法在iOS 12中有了变化。通过查看官方文档,发现文档中增加了Important字样的描述:

iOS 12中无法获取WiFi的SSID了?别慌看这里!

CNcopyCurrentNetworkInfo文档

Important
To use this function in iOS 12 and later,enable the Access WiFi @R_711_4045@ion capability for your app in Xcode. When you enable this capability,Xcode automatically adds the Access WiFi @R_711_4045@ion entitlement to your entitlements file and App ID.

重要描述
在iOS 12+中使用此方法需要在Xcode中为应用授权获取WiFi信息的能力。授权后,Xcode会自动在App ID和应用的权限列表中增加获取WiFi信息的权限。

解决方法

看到这里,解决方案就有了:Xcode -> [Project Name] -> Targets -> [Target Name] -> Capabilities -> Access WiFi @R_711_4045@ion -> ON

iOS 12中无法获取WiFi的SSID了?别慌看这里!

解决方案步骤图示

按照上述方案操作完毕后,会发现工程的.entitlements文件中多了一对Key-Value:

iOS 12中无法获取WiFi的SSID了?别慌看这里!

.entitlements文件

至此,就能在iOS 12+中正常获取到WiFi的SSID了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持

级别: ★☆☆☆☆

标签:「iOS 12」「SSID」「Access WiFi @R_711_4045@ion」「CNcopyCurrentNetworkInfo」

作者: Xs·H

审校: QiShare团队

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...