之前項(xiàng)目里一直用下面的方法獲取WiFi BSSID,但是升級(jí)到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 : @"";
}
查閱官方接口文檔發(fā)現(xiàn),需要用新的接口來(lái)獲取WiFi設(shè)備信息:

進(jìn)一步查詢發(fā)現(xiàn),該接口在NetworkExtension框架下:

網(wǎng)上各種用到NetworkExtension框架的文章都說(shuō)要給蘋(píng)果發(fā)郵件申請(qǐng)權(quán)限,而且可能要等半個(gè)月左右。
但是在開(kāi)發(fā)者后臺(tái)發(fā)現(xiàn),就有NetworkExtension的自主申請(qǐng),貌似和別的權(quán)限沒(méi)什么太大差別,于是直接在開(kāi)發(fā)者后臺(tái)開(kāi)啟權(quán)限后:

在Xcode內(nèi)Capability處開(kāi)啟NetworkExtension,由于項(xiàng)目?jī)?nèi)只是為了獲取WiFi信息,并沒(méi)有深入使用框架,于是隨便勾選了兩個(gè)權(quán)限聲明:

于是更改項(xiàng)目代碼如下:
+ (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);
}
}
}
最后需要從開(kāi)發(fā)者后臺(tái)重新生成開(kāi)發(fā)和發(fā)布用的profile文件,導(dǎo)入Xcode。
調(diào)試后發(fā)現(xiàn)已經(jīng)可以正常獲取到WiFi BSSID和SSID信息。
打包提交審核,蘋(píng)果員未提出仍和意見(jiàn),一次通過(guò)。可能之前使用NetworkExtension框架需要單獨(dú)給蘋(píng)果發(fā)郵件申請(qǐng)權(quán)限,感覺(jué)現(xiàn)在應(yīng)該是不用了,直接在開(kāi)發(fā)者后臺(tái)開(kāi)啟權(quán)限即可。