之前项目里一直用下面的方法获取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框架需要单独给苹果发邮件申请权限,感觉现在应该是不用了,直接在开发者后台开启权限即可。