我有一个商业应用程序,它有一个完全合法的理由来查看它连接到的网络的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.在您的设备上测试.

iOS 12

您必须启用从功能访问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

}

Ios相关问答推荐

SwiftUI文本编辑器内部滚动填充,无需文本裁剪

如何保持拖动预览与原始项目完全相同?

为什么Reaction-Native-Vision-Camera不能与闪光灯一起使用?

Xamarin Forms CustomPin iOS Render

当文本为空时,具有垂直轴的SwiftUI文本字段不会与FirstTextBaseline对齐

带菜单的选取器不适用于Int32,但适用于Int

在最新版本的 iOS 中,设备上的Localized.strings文件发生了什么变化?

在 SwiftUI 中以编程方式插入内嵌图像

如何使用 Rxswift 处理程序最喜欢的按钮

当任何 TextEditor 有多于一行时,所有 TextEditor 都会调整大小

如何更改 SwiftUI 弹出视图的大小?

从 PHAssets 生成图像时,iOS 应用程序因内存问题而崩溃

如何在 SwiftUI 中创建两个大小相同的正方形占据整个屏幕宽度?

在使用 Github Actions 时,我面临权限被拒绝错误

如何在 Swift 上的 sendSynchronousRequest 中判断 Response.statusCode

Xcode intellisense 彩色框中字母的含义,如 f、T、C、M、P、C、K、# 等

如何使用 Swift 从assets资源 中加载特定图像

在 Swift 中追加字符串

正确的领域使用模式/最佳实践?

关闭通过模态 segue 显示的视图