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 }}> exit
IOS 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 關注
- 651 瀏覽
添加回答
舉報
0/150
提交
取消