プライベートライブラリを使用せずに、iPhoneで利用可能なすべてのSSIDのlistを取得することは可能ですか?
私は iPhoneがプライベートライブラリなしでSSIDを取得する を読みますcurrentネットワークに関する詳細を取得することについてです。
この回答 言及:
デバイスを脱獄する場合は、 Apple80211 プライベートフレームワークを使用して、利用可能なWi-Fiネットワークとその信号強度を調べることができます。ただし、これはアプリが拒否されることも意味します。
Appleは CaptiveNetwork API を持っていますが、利用可能なすべてのネットワークのリストを取得するソリューションはないようです。 Apple80211プライベートライブラリ を使用するか、それらすべてに接続することでのみ可能と思われます。
何か不足していますか、それとも解決策はありませんか?
プライベートライブラリ(Apple80211
)デバイスが現在接続しているネットワークのSSIDのみを取得できます。
IOS 9以降、NEHotspotHelperを使用してSSIDのリストを取得できます。しかし、あなたはcom.Apple.developer.networking.HotspotHelper
Apple=からの要求を送信することによる資格。
詳細は https://developer.Apple.com/documentation/networkextension/nehotspothelper を確認してください。
IOS 9およびiOS 11のネットワーク拡張機能の一部としていくつかの新しいAPIがリリースされました。どちらも、アプリの実行中にネットワークをスキャンすることはできませんが、どちらも関連するタスクを実行できます。例えば。 Hotspot Helperを使用して、設定Wi-Fiページの実行中にネットワークをスキャンできます。また、これらのいずれかを使用して、ユーザーがネットワークに簡単に参加できるようにすることができます。
2つのフレームワークの比較を次に示します。
NEHotspotHelper
(iOS 9で導入 WWDC 2015 )。com.Apple.developer.networking.HotspotHelper
資格が必要です。設定アプリのWi-Fi画面からWi-Fiネットワークの検出/認証に参加できます。通知を受け取るように登録しますネットワークがスキャンされており(ユーザーが設定アプリでWi-Fiを起動したときなど)、パスワードを自動的に事前入力し、ネットワーク名の近くに注釈を表示できます。ユーザーは引き続き接続するためにネットワーク名をタップする必要がありますが、事前に入力してもパスワードの入力は求められません。
NEHotspotConfigurationManager
(iOS 11で導入 WWDC 2017 )。com.Apple.developer.networking.HotspotConfiguration
資格が必要です。Wi-Fiネットワークへの接続を開始できます。アプリの実行中に接続する必要があるSSID /パスワードのリストを提供します。ユーザーがネットワークに接続するかどうかを尋ねるダイアログが表示されます。
まず、2つのシステムヘッダーファイルの上にインポートします。
import SystemConfiguration/SystemConfiguration.h
import SystemConfiguration/CaptiveNetwork.h
関数/メソッドからSSIDNameを返す
-(NSString *)getNetworkId{
NSString *string = CFBridgingRelease(CNCopySupportedInterfaces());
NSArray *interfacesArray = CFBridgingRelease(CFBridgingRetain(string));
if(interfacesArray.count > 0){
NSString *networkName = [interfacesArray objectAtIndex:0];
CFStringRef yourFriendlyCFString = (__bridge CFStringRef)networkName;
NSDictionary *unsafeInterfaceData = CFBridgingRelease(CNCopyCurrentNetworkInfo(yourFriendlyCFString));
NSString *ssidName = unsafeInterfaceData[@"SSID"];
return ssidName;
}
return @"No network Found";
}
ステップ1:フレームワークを追加SystemConfiguration.framework
ステップ2:次のヘッダーファイルをインポート
import SystemConfiguration
import SystemConfiguration.CaptiveNetwork
ステップ3:コードを使用:
func getUsedSSID()->String {
let interfaces = CNCopySupportedInterfaces()
if interfaces != nil {
let interfacesArray = CFBridgingRetain(interfaces) as! NSArray
if interfacesArray.count > 0 {
let interfaceName = interfacesArray[0] as! String
let unsafeInterfaceData = CNCopyCurrentNetworkInfo(interfaceName)! as Dictionary
let SSIDName = unsafeInterfaceData["SSID"] as! String
print(SSIDName)/* here print recentally used wifi name*/
return SSIDName
}else{
return "0"
}
}else{
return "0"
}
}