前言
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; ...)。
+ (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字样的描述:
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
解决方案步骤图示
按照上述方案操作完毕后,会发现工程的.entitlements文件中多了一对Key-Value:
.entitlements文件
至此,就能在iOS 12+中正常获取到WiFi的SSID了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
级别: ★☆☆☆☆
标签:「iOS 12」「SSID」「Access WiFi @R_711_4045@ion」「CNcopyCurrentNetworkInfo」
作者: Xs·H
审校: QiShare团队