我有一个商业应用程序,它有一个完全合法的理由来查看它连接到的网络的SSID:如果它连接到第三方硬件设备的临时网络,它需要以不同于连接到互联网的方式运行.
我所看到的有关获得SSID的所有信息都告诉我,我必须使用Apple80211,据我所知,它是一个私有库.我还读到,如果我使用私有图书馆,苹果将不会批准这款apply.
我是被困在一个苹果和一个艰难的地方之间,还是我在这里错过了什么?
我有一个商业应用程序,它有一个完全合法的理由来查看它连接到的网络的SSID:如果它连接到第三方硬件设备的临时网络,它需要以不同于连接到互联网的方式运行.
我所看到的有关获得SSID的所有信息都告诉我,我必须使用Apple80211,据我所知,它是一个私有库.我还读到,如果我使用私有图书馆,苹果将不会批准这款apply.
我是被困在一个苹果和一个艰难的地方之间,还是我在这里错过了什么?
从iOS 7或8开始,您可以这样做(iOS 12+需要如下所示的授权):
@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;
}
示例输出:
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>;
}
请注意,模拟器上不支持if.在您的设备上测试.
您必须启用从功能访问wifi信息.
重要信息 要在iOS 12及更高版本中使用此功能,请在Xcode中为您的应用程序启用访问WiFi信息功能.启用此功能后,Xcode会自动将访问WiFi信息权限添加到您的权限文件和应用程序ID.Documentation link
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
}