亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

iPhone在沒有私有庫的情況下獲得SSID

iPhone在沒有私有庫的情況下獲得SSID

滄海一幻覺 2019-06-28 15:44:43
iPhone在沒有私有庫的情況下獲得SSID我有一個商業應用程序,它有一個完全合法的理由來查看它連接到的網絡的SSID:如果它連接到一個第三方硬件設備的Adhoc網絡,它需要以一種不同于連接到互聯網的方式運行。我所看到的有關獲得SSID的一切都告訴我,我必須使用Apple80211,據我所知,它是一個私有庫。我還讀到,如果我使用一個私人圖書館,蘋果將不會批準該應用程序。我是被困在一個蘋果和一個艱難的地方之間,還是這里缺少什么東西?
查看完整描述

3 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

從iOS 7或8開始,您可以這樣做,它利用ARC和模塊,這些模塊將自動鏈接到所需的框架中:

@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;}

(這是為IOS 4.1+編寫的代碼示例的現代化。唯一的變化是引入了更清晰的變量名稱,并采用了ARC和模塊。

示例輸出:

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>;}

請注意,模擬器中不支持任何ifs。在你的設備上測試。

在4.1之前,您可能會很幸運地瀏覽系統配置字典。例如,使用scutil在我的Mac上:

$ 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

您必須啟用從功能訪問wifi信息。

在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}


查看完整回答
反對 回復 2019-06-28
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

以下是基于@elsurudo代碼的清理后的ARC版本:

- (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;}


查看完整回答
反對 回復 2019-06-28
  • 3 回答
  • 0 關注
  • 651 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號