Swift在 iOS 13上获取Wi-Fi SSID(服务集标识)

Apple在iOS 13进行了很多更改,以保护使用iOS用户的隐私。其中包括了网络上的更改,这样会导致我们的应用程序有些服务不能使用。

CNCopyCurrentNetworkInfo是用来获取Wi-Fi信息的。可以通过下面示例的方法获取Wi-Fi的SSID:

import Foundation
import SystemConfiguration.CaptiveNetwork
func getWiFiSsid() -> String? {
var ssid: String?
if let interfaces = CNCopySupportedInterfaces() as NSArray? {
for interface in interfaces {
if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? {
ssid = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String
break
}
}
}
return ssid
}

在iOS 13之前,我们只要能够连接上wifi,可以获取wifi信息,我们就可以活到已连接的Wi-Fi SSID。

而从iOS 13开始,只有在下面三种情况下可以,获取WIFI的SSID:

  • 应用被授权获取位置信息
  • 应用有启动VPN的配置
  • 如果是使用NEHotspotConfiguration的网络应用,则需要苹果的额外批准

如果不是这三种情况,iOS 13以上的版本,CNCopyCurrentNetworkInfo就会返回nil。这样应用使用了 Wi-Fi SSID的功能就不能使用了。

版权声明:著作权归作者所有。

相关推荐

Swift修改UISearchBar上取消按钮文本的颜色

Swift 2,3,4在语法上少有不同,以下是各个Swift版本修改取消按钮文本颜色的代码片段Swift 4.0let cancelButtonAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]  UIBarButtonItem.appearan

在shell脚本使用sftp登陆远程服务执行命令

有时我们需要定期登陆到远程服务器去去执行一些命令,sftp是一个让我们在shell脚本登陆到远程服务器的工具,这里演示一个例子:echo "sftp start" >> ~/logfile.log sftp username@host <<EOF >> ~/lo

Swift 4:KeyPath

Swift 4对KeyPath做了很大的改进。改进后的为类型安全的KeyPath。Swift 2的KeyPath示例class Person: NSObject {   var name: String = ""   init(name: 

使用ANDROID_ID唯一标识Android设备

使用Settings.Secure#ANDROID_ID 会返回每个用户唯一的64位hex字符串,它是在设备首次boot时生成。我们可以使用它来唯一标识Android设备。import android.provider.Settings.Secure; private String android_id = Secure.getString(ge

iOS11固定UISearchBar在导航栏的高度

iOS 11重新设计了UISearchBar,四个角改为圆角,高度变大。在导航栏添加搜索框可能会导致导航栏高度变大,所以有必要固定UISearchBar的高度。固定搜索栏的高度为44let searchBar = UISearchBar()  //配置searchBar相关代码 navigationItem.titleView =&nbs