Objective c can';无法在MacOS上获取实际的bssid值
我试图在Mac OS X 10.14上获取当前WiFi连接的BSSID,但获取Objective c can';无法在MacOS上获取实际的bssid值,objective-c,macos,Objective C,Macos,我试图在Mac OS X 10.14上获取当前WiFi连接的BSSID,但获取nil 返回nil的代码如下: NSString *bssid = [[[CWWiFiClient sharedWiFiClient] interface] bssid]; 尽管SSID返回有效值: NSString *ssid = [[[CWWiFiClient sharedWiFiClient] interface] ssid]; 其他解决方案适用于iOS,例如使用此处提出的CaptiveNetworks框架,
nil
返回nil
的代码如下:
NSString *bssid = [[[CWWiFiClient sharedWiFiClient] interface] bssid];
尽管SSID返回有效值:
NSString *ssid = [[[CWWiFiClient sharedWiFiClient] interface] ssid];
其他解决方案适用于iOS,例如使用此处提出的CaptiveNetworks框架,但有些方法,如
CNCopyCurrentNetworkInfo
,不支持MacOS。我的两分钱用于OSX,以防:
- 使用无线局域网
- 添加NetworkExtensions
- 电话:
let client = CWWiFiClient.shared() guard let interfaces : [CWInterface] = client.interfaces() else{ return nil } // on iOS we got the first, here we should return multiple interfaces. var ssid: String? var bssid: String? var interfaceNameString: String? for interface in interfaces{ ssid = interface.ssid() bssid = interface.bssid() interfaceNameString = interface.interfaceName ...
如果在OSX应用商店中,激活沙箱时。这不是最好的解决方案,但至少在Qt中有效:
QString getBssidOnMac() {
QStringList arguments;
arguments << "-I";
QProcess process;
process.start("/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport", arguments);
process.waitForFinished();
QString outp = process.readAllStandardOutput();
QRegExp re_bssid(".*(BSSID\\:\\s([0-9a-fA-F]{1,2}(\\:[0-9a-fA-F]{1,2}){5})).*");
if (re_bssid.indexIn(outp) !=-1) {
return re_bssid.cap(2);
}
else {
return QString();
}
}
QString getBssidOnMac(){
QStringList参数;
参数可能重复否,@CinderBiscuits,这不是重复,因为我的问题是关于MacOS而不是iOS。您是否尝试了另一个问题的解决方案?您对MacOS和iOS使用相同的API。我建议的解决方案的问题是,CNCopyCurrentNetworkInfo
仅在iOS上受支持。我让BSSID执行/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport-I
在单独的过程和解析结果中,但它看起来不是一个好的解决方案。@atlascoder您找到解决方案了吗?我们需要导入哪些文件和框架在objective c项目中运行此代码好的,此代码是针对我的Qt的这不是为了包含到Xcode项目中,而是为了替换它。我建议您找到一种从ObjC运行终端命令的方法——它将以同样的方式工作