iPhone在沒有私有庫的情況下獲得SSID我有一個商業應用程序,它有一個完全合法的理由來查看它連接到的網絡的SSID:如果它連接到一個第三方硬件設備的Adhoc網絡,它需要以一種不同于連接到互聯網的方式運行。我所看到的有關獲得SSID的一切都告訴我,我必須使用Apple80211,據我所知,它是一個私有庫。我還讀到,如果我使用一個私人圖書館,蘋果將不會批準該應用程序。我是被困在一個蘋果和一個艱難的地方之間,還是這里缺少什么東西?
3 回答
慕桂英3389331
TA貢獻2036條經驗 獲得超8個贊
@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>;}scutil
$ scutil> show State:/Network/Interface/en1/AirPort<dictionary> {
Power Status : 1
SecureIBSSEnabled : FALSE
BSSID : <data> 0xcafecafecafe
SSID_STR : XXXX
SSID : <data> 0x012345670123456701234567
Busy : FALSE
CHANNEL : <dictionary> {
CHANNEL : 1
CHANNEL_FLAGS : 10
}}> exitIOS 12
在iOS 12及更高版本中使用此功能非常重要,請在Xcode中為您的應用程序啟用訪問WiFi信息功能。啟用此功能時,Xcode會自動將訪問WiFi信息權限添加到應享權利文件和應用程序ID中。 文檔鏈接
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}
當年話下
TA貢獻1890條經驗 獲得超9個贊
- (id)fetchSSIDInfo {
NSArray *ifs = (__bridge_transfer NSArray *)CNCopySupportedInterfaces();
NSLog(@"Supported interfaces: %@", ifs);
NSDictionary *info;
for (NSString *ifnam in ifs) {
info = (__bridge_transfer NSDictionary *)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
NSLog(@"%@ => %@", ifnam, info);
if (info && [info count]) { break; }
}
return info;}- 3 回答
- 0 關注
- 657 瀏覽
添加回答
舉報
0/150
提交
取消
