Osw*_*uez 14 iphone ssid ios swift
我试图使用此代码获取SSID
import Foundation
import SystemConfiguration.CaptiveNetwork
public class SSID {
class func getSSID() -> String{
var currentSSID = ""
let interfaces = CNCopySupportedInterfaces()
if interfaces != nil {
let interfacesArray = interfaces.takeRetainedValue() as [String : AnyObject]
if interfacesArray.count > 0 {
let interfaceName = interfacesArray[0] as String
let unsafeInterfaceData = CNCopyCurrentNetworkInfo(interfaceName)
if unsafeInterfaceData != nil {
let interfaceData = unsafeInterfaceData.takeRetainedValue() as Dictionary!
currentSSID = interfaceData[kCNNetworkInfoKeySSID] as! String
let ssiddata = NSString(data:interfaceData[kCNNetworkInfoKeySSIDData]! as! NSData, encoding:NSUTF8StringEncoding) as! String
// ssid data from hex
print(ssiddata)
}
}
}
return currentSSID
}
}
Run Code Online (Sandbox Code Playgroud)
但是在这一行中出现错误
let interfacesArray = interfaces.takeRetainedValue() as [String : AnyObject]
错误是
Value of type 'CFArray?' has no member 'takeRetainedValue'
谢谢你的帮助
Rik*_*cma 25
这可能对你有所帮助(在Swift 2上测试过):
import Foundation
import SystemConfiguration.CaptiveNetwork
public class SSID {
class func fetchSSIDInfo() -> String {
var currentSSID = ""
if let interfaces = CNCopySupportedInterfaces() {
for i in 0..<CFArrayGetCount(interfaces) {
let interfaceName: UnsafePointer<Void> = CFArrayGetValueAtIndex(interfaces, i)
let rec = unsafeBitCast(interfaceName, AnyObject.self)
let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)")
if unsafeInterfaceData != nil {
let interfaceData = unsafeInterfaceData! as Dictionary!
currentSSID = interfaceData["SSID"] as! String
}
}
}
return currentSSID
}
}
Run Code Online (Sandbox Code Playgroud)
我接受并调整了Ray Wenderlich网站的代码(曾经在这里: 在iOS9中检索SSID,但现在特定线程已从网站中删除)
iOS 12
您必须从功能启用Access WiFi信息.
重要信息要在iOS 12及更高版本中使用此功能,请在Xcode中为您的应用启用Access WiFi信息功能.启用此功能后,Xcode会自动将Access WiFi信息权利添加到您的权利文件和应用程序ID中.文档链接
Swift4.2
public class SSID {
class func fetchSSIDInfo() -> String {
var currentSSID = ""
if let interfaces = CNCopySupportedInterfaces() {
for i in 0..<CFArrayGetCount(interfaces) {
let interfaceName: UnsafeRawPointer = CFArrayGetValueAtIndex(interfaces, i)
let rec = unsafeBitCast(interfaceName, to: AnyObject.self)
let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString)
if let interfaceData = unsafeInterfaceData as? [String: AnyObject] {
currentSSID = interfaceData["SSID"] as! String
let BSSID = interfaceData["BSSID"] as! String
let SSIDDATA = interfaceData["SSIDDATA"] as! String
debugPrint("ssid=\(currentSSID), BSSID=\(BSSID), SSIDDATA=\(SSIDDATA)")
}
}
}
return currentSSID
}
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*Rob 14
这是我的解决方案 Swift 3 iOS 10,它适用于Xcode 8
import Foundation
import SystemConfiguration.CaptiveNetwork
class network : NSObject {
func getSSID() -> String? {
let interfaces = CNCopySupportedInterfaces()
if interfaces == nil {
return nil
}
let interfacesArray = interfaces as! [String]
if interfacesArray.count <= 0 {
return nil
}
let interfaceName = interfacesArray[0] as String
let unsafeInterfaceData = CNCopyCurrentNetworkInfo(interfaceName as CFString)
if unsafeInterfaceData == nil {
return nil
}
let interfaceData = unsafeInterfaceData as! Dictionary <String,AnyObject>
return interfaceData["SSID"] as? String
}
}
Run Code Online (Sandbox Code Playgroud)
要使用它:
let wifiName = network().getSSID()
guard wifiName != nil else {
//// TODO: Alert -----
print("no wifi name")
return
}
print("my network name is: \(wifiName!)")
Run Code Online (Sandbox Code Playgroud)
PS:注意它不适用于模拟器
目前提出的所有解决方案看起来相当复杂,丑陋的不安全演员.
我能够制作出这样一个简洁的解决方案(根本没有黑魔法):
import Foundation
import SystemConfiguration.CaptiveNetwork
func getSSID() -> 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
}
Run Code Online (Sandbox Code Playgroud)
在Swift 3中(在真实设备和模拟器中工作):
import SystemConfiguration.CaptiveNetwork
internal class SSID {
class func fetchSSIDInfo() -> String {
var currentSSID = ""
if let interfaces:CFArray = CNCopySupportedInterfaces() {
for i in 0..<CFArrayGetCount(interfaces){
let interfaceName: UnsafeRawPointer = CFArrayGetValueAtIndex(interfaces, i)
let rec = unsafeBitCast(interfaceName, to: AnyObject.self)
let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString)
if unsafeInterfaceData != nil {
let interfaceData = unsafeInterfaceData! as Dictionary!
currentSSID = ((interfaceData as? [String : AnyObject])?["SSID"])! as! String
}
}
}
return currentSSID
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
SSID.fetchSSIDInfo()
//will return "" if no connected wifi or running in simulator
Run Code Online (Sandbox Code Playgroud)
在 swift 2 中,您不必调用takeRetainedValue.
将代码替换interfaces.takeRetainedValue() as [String : AnyObject]为Array(arrayLiteral: interfaces).
还记得将代码更改interfacesArray[0] as String为String(interfacesArray[0]).
完整代码 \xef\xbc\x9a
\n\npublic class SSID {\nclass func getSSID() -> String{\n var currentSSID = ""\n let interfaces = CNCopySupportedInterfaces()\n if interfaces != nil {\n let interfacesArray = Array(arrayLiteral: interfaces)\n if interfacesArray.count > 0 {\n let interfaceName = String(interfacesArray[0])\n let unsafeInterfaceData = CNCopyCurrentNetworkInfo(interfaceName)\n if unsafeInterfaceData != nil {\n let interfaceData = unsafeInterfaceData.takeRetainedValue() as Dictionary!\n currentSSID = interfaceData[kCNNetworkInfoKeySSID] as! String\n let ssiddata = NSString(data:interfaceData[kCNNetworkInfoKeySSIDData]! as! NSData, encoding:NSUTF8StringEncoding) as! String\n // ssid data from hex\n print(ssiddata)\n }\n }\n }\n return currentSSID\n}\nRun Code Online (Sandbox Code Playgroud)\n\n}
\n| 归档时间: |
|
| 查看次数: |
12503 次 |
| 最近记录: |