升级iOS26后无法获取WiFi BSSID

之前项目里一直用下面的方法获取WiFi BSSID,但是升级到iOS 26后,返回空

+ (NSString*)wifBSsid{
    NSArray *interfaces = (__bridge_transfer NSArray*)CNCopySupportedInterfaces();
    NSDictionary *info = nil;
    for (NSString *ifname in interfaces) {
        info = (__bridge_transfer NSDictionary*)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifname);
        if (info && [info count]) {
            break;
        }
        info = nil;
    }
    
    NSString *BSSID = nil;
    
    if ( info ){
        BSSID = [info objectForKey:@"BSSID"];
    }
    info = nil;
    return BSSID? BSSID : @"";
}

查阅官方接口文档发现,需要用新的接口来获取WiFi设备信息:


image.png

进一步查询发现,该接口在NetworkExtension框架下:

image.png

网上各种用到NetworkExtension框架的文章都说要给苹果发邮件申请权限,而且可能要等半个月左右。
但是在开发者后台发现,就有NetworkExtension的自主申请,貌似和别的权限没什么太大差别,于是直接在开发者后台开启权限后:

image.png

在Xcode内Capability处开启NetworkExtension,由于项目内只是为了获取WiFi信息,并没有深入使用框架,于是随便勾选了两个权限声明:

image.png

于是更改项目代码如下:

+ (void)getWiFiNameAndWiFiMac:(void (^)(NSString *BSSID, NSString *SSID))completionHandler {
    if (@available(iOS 26.0, *)) {
        [NEHotspotNetwork fetchCurrentWithCompletionHandler:^(NEHotspotNetwork * _Nullable currentNetwork) {
            if (completionHandler) {
                if (currentNetwork) {
                    completionHandler(currentNetwork.BSSID, currentNetwork.SSID);
                } else {
                    completionHandler(@"", @"");
                }
            }
        }];
    } else {
        NSString *Bssid = [self wifBSsid];
        NSString *ssid  = [self wifSsid];
        if (completionHandler) {
            completionHandler(Bssid, ssid);
        }
    }
}

最后需要从开发者后台重新生成开发和发布用的profile文件,导入Xcode。
调试后发现已经可以正常获取到WiFi BSSID和SSID信息。

打包提交审核,苹果员未提出仍和意见,一次通过。可能之前使用NetworkExtension框架需要单独给苹果发邮件申请权限,感觉现在应该是不用了,直接在开发者后台开启权限即可。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容