獲取iOS設備WiFi名字和mac地址+iOS12系統獲取失敗解決


蘋果提供了 NetworkExtension框架讓開發者實現VPN以及WiFi熱點相應的功能,雖然iOS9系統出來之后,這個框架的很多功能被蘋果屏蔽了,需要申請權限才能用,但是今天介紹的的獲取WiFi名字和mac地址信息的方法還是可以用的。

獲取WiFi相關信息的時候需要引入一下頭文件
#import <SystemConfiguration/CaptiveNetwork.h>
#import <NetworkExtension/NetworkExtension.h>

實現方法如下:

1、獲取SSIDService Set Identifier),服務集標識,也就是WiFi網絡所取的名字。

+ (NSString *)wifiName
{
    NSArray *ifs = CFBridgingRelease(CNCopySupportedInterfaces());
    id info = nil;
    for (NSString *ifname in ifs) {
        info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef) ifname);
        if (info && [info count]) {
            break;
        }
    }
    NSDictionary *dic = (NSDictionary *)info;
    NSString *ssid = [[dic objectForKey:@"SSID"] lowercaseString];

    return ssid;
}

 2、獲取BSSID即mac地址。

+ (NSString *)wifiMac
{
    NSArray *ifs = CFBridgingRelease(CNCopySupportedInterfaces());
    id info = nil;
    for (NSString *ifname in ifs) {
        info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef) ifname);
        if (info && [info count]) {
            break;
        }
    }
    NSDictionary *dic = (NSDictionary *)info;
    NSString *bssid = [dic objectForKey:@"BSSID"];

    return bssid;
}

 返回獲取到的結果如下:

SSID = mywifiname
BSSID = e3:fc:40:38:ac:e6

 這個方法在iOS12以下的系統完全可以勝任我們的任務,但是iOS12+的系統無法正常獲取到WiFi信息。蘋果對方法的使用提升了要求。

Important
To use this function in iOS 12 and later, enable the Access WiFi Information capability for your app in Xcode. When you enable this capability, Xcode automatically adds the Access WiFi Information entitlement to your entitlements file and App ID.
重要描述
在iOS 12+中使用此方法需要在Xcode中為應用授權獲取WiFi信息的能力。授權后,Xcode會自動在App ID和應用的權限列表中增加獲取WiFi信息的權限。

 

通過上面我們可以了解到,要在iOS12以上的系統中繼續使用方法,就需要獲取授權。如果你使用的是自動簽名,授權之后Xcode會自動在App ID和應用的權限列表中增加WiFi的權限。如果你使用的是手動簽名,可能還需要去App ID中配置一下權限,並生成新的profile文件。
具體的操作如下:
設置 Capabilities步驟: Target->  Capabilities->  Access WiFi Information->  ON
如果項目使用的是手動簽名,上面打開 Access WiFi Information之后,可能 Add the Access WiFi Information feature to your App ID這一項會報錯,需要手動去App ID賬號中設置。
打開 Access WiFi Information之后,工程會在 .entitlements文件中添加 Access WiFi Information信息,如果沒有 .entitlements文件會同時創建文件。

配置好上面的信息,在iOS12+的系統中獲取WiFi名字和mac信息的方法就可以正常獲取信息了。
如果采用的是手動簽名,App ID中配置Access WiFi Information的方法如下,編輯App ID,勾選相應的選項。

 

然后重新生成項目的Provisioning Profiles文件,包括Distribution的和Development的,下載之后雙擊打開,項目就可以正常簽名,並獲取到WiFi信息了。

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM