iOS 10以降のアップデート
CNCopySupportedInterfacesはiOS 10で廃止されなくなりました(APIリファレンス)
SystemConfiguration / CaptiveNetwork.hをインポートし、SystemConfiguration.frameworkをターゲットのリンクライブラリに(ビルドフェーズで)追加する必要があります。
以下は、swiftのコードスニペット(RikiRiocmaの回答)です。
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
}
}
(重要: CNCopySupportedInterfacesはシミュレータでnilを返します。)
Objective-cについては、ここと以下のEsadの回答を参照してください
+ (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宛てにメールを送信し、資格をリクエストする必要があります。(ソース)
サンプルコード(私のコードではありません。PabloAの回答を参照してください):
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;
}
補足:はい、彼らはiOS 9でのCNCopySupportedInterfacesを非推奨にし、iOS 10での立場を逆転させました。私はAppleのネットワークエンジニアと話しました。その逆は、非常に多くの人々がレーダーを提出し、Apple開発者フォーラムで問題について話し合った後に行われました。