Начиная с iOS 7 или 8, вы можете сделать это, используя преимущества ARC и модулей, которые автоматически свяжутся в необходимой среде:
@import SystemConfiguration.CaptiveNetwork;
/** Returns first non-empty SSID network info dictionary.
* @see CNCopyCurrentNetworkInfo */
- (NSDictionary *)fetchSSIDInfo
{
NSArray *interfaceNames = CFBridgingRelease(CNCopySupportedInterfaces());
NSLog(@"%s: Supported interfaces: %@", __func__, interfaceNames);
NSDictionary *SSIDInfo;
for (NSString *interfaceName in interfaceNames) {
SSIDInfo = CFBridgingRelease(
CNCopyCurrentNetworkInfo((__bridge CFStringRef)interfaceName));
NSLog(@"%s: %@ => %@", __func__, interfaceName, SSIDInfo);
BOOL isNotEmpty = (SSIDInfo.count > 0);
if (isNotEmpty) {
break;
}
}
return SSIDInfo;
}
(Это модернизация образца кода, написанного для iOS 4.1+. Единственными изменениями были введение более четких имен переменных и принятие ARC и модулей.)
Пример вывода:
2011-03-04 15:32:00.669 ShowSSID[4857:307] -[ShowSSIDAppDelegate fetchSSIDInfo]: Supported interfaces: (
en0
)
2011-03-04 15:32:00.693 ShowSSID[4857:307] -[ShowSSIDAppDelegate fetchSSIDInfo]: en0 => {
BSSID = "ca:fe:ca:fe:ca:fe";
SSID = XXXX;
SSIDDATA = <01234567 01234567 01234567>;
}
Обратите внимание, что в симуляторе не поддерживаются ifs. Тест на вашем устройстве.
До версии 4.1 вам, может быть, повезло, если вы изучили словарь конфигурации системы. Например, используя scutil
на моем Mac:
$ scutil
> show State:/Network/Interface/en1/AirPort
<dictionary> {
Power Status : 1
SecureIBSSEnabled : FALSE
BSSID : <data> 0xcafecafecafe
SSID_STR : XXXX
SSID : <data> 0x012345670123456701234567
Busy : FALSE
CHANNEL : <dictionary> {
CHANNEL : 1
CHANNEL_FLAGS : 10
}
}
> exit
iOS 12
Вы должны включить доступ к информации Wi-Fi из возможностей.
Важно
Чтобы использовать эту функцию в iOS 12 и позже, включите возможность Доступа к Информации WiFi для своего приложения в XCode. Когда вы включаете эту возможность, XCode автоматически добавляет право доступа к информации Wi-Fi в ваш файл разрешений и идентификатор приложения. Документация ссылка
Swift 4.2
func getConnectedWifiInfo() -> [AnyHashable: Any]? {
if let ifs = CFBridgingRetain( CNCopySupportedInterfaces()) as? [String],
let ifName = ifs.first as CFString?,
let info = CFBridgingRetain( CNCopyCurrentNetworkInfo((ifName))) as? [AnyHashable: Any] {
return info
}
return nil
}