ОБНОВЛЕНИЕ для iOS 12, swift 4.2
iOS 12
Вы должны включить Access WiFi Information из возможностей.
Важно
Чтобы использовать эту функцию в iOS 12 и позже, включите возможность Доступа к Информации WiFi для своего приложения в XCode. Когда вы включаете эту возможность, XCode автоматически добавляет право доступа к информации Wi-Fi в ваш файл разрешений и идентификатор приложения. Ссылка на документацию
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"]
debugPrint("ssid=\(currentSSID), BSSID=\(BSSID), SSIDDATA=\(SSIDDATA)")
}
}
}
return currentSSID
}
}
ОБНОВЛЕНИЕ ДЛЯ iOS 10
CNCopySupportedInterfaces больше не поддерживается в iOS 10. ( Справочник по API )
Вам необходимо импортировать SystemConfiguration / CaptiveNetwork.h и добавить SystemConfiguration.framework в связанные библиотеки вашей цели (в стадии сборки).
Вот фрагмент кода в быстром (ответ RikiRiocma) :
import Foundation
import SystemConfiguration.CaptiveNetwork
public class SSID {
class func fetchSSIDInfo() -> String {
var currentSSID = ""
if let interfaces:CFArray! = 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
}
}
( Важно: CNCopySupportedInterfaces возвращает ноль на симуляторе.)
Для Objective-c см. Ответ Эсада здесь и ниже
+ (NSString *)GetCurrentWifiHotSpotName {
NSString *wifiName = nil;
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *ifnam in ifs) {
NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
if (info[@"SSID"]) {
wifiName = info[@"SSID"];
}
}
return wifiName;
}
ОБНОВЛЕНИЕ ДЛЯ iOS 9
Начиная с iOS 9 Captive Network устарела *. ( источник * * тысяча сорок-девять)
* Больше не рекомендуется в iOS 10, см. Выше.
Рекомендуется использовать NEHotspotHelper ( источник )
Вам необходимо будет отправить электронное письмо по адресу networkextension@apple.com и запросить права. ( источник )
Пример кода ( Не мой код. См. Ответ Пабло А ):
for(NEHotspotNetwork *hotspotNetwork in [NEHotspotHelper supportedNetworkInterfaces]) {
NSString *ssid = hotspotNetwork.SSID;
NSString *bssid = hotspotNetwork.BSSID;
BOOL secure = hotspotNetwork.secure;
BOOL autoJoined = hotspotNetwork.autoJoined;
double signalStrength = hotspotNetwork.signalStrength;
}
Примечание: Да, они отказались от CNCopySupportedInterfaces в iOS 9 и полностью изменили свою позицию в iOS 10. Я поговорил с сетевым инженером Apple, и отмена произошла после того, как очень много людей подали заявки на Radars и высказались о проблеме на форумах Apple Developer ,