iPhoneプライベートライブラリなしですべてのSSIDのリストを入手
質問
プライベートライブラリを使用せずにiPhone上の利用可能なすべてのSSIDの list を取得することは可能ですか?
私は iPhone Get SSIDを取得します。 電流ネットワークについて
この回答言及:
あなたがあなたのデバイスを脱獄するなら、 apple80211 プライベートフレームワークを使用することができます。利用可能なWi-Fiネットワークとその信号強度を検索する。しかし、それはまたあなたのアプリが拒否されることを意味します。
Appleは、 captvivenetwork API しかし、利用可能なすべてのネットワークのリストを取得するための解決策はないようです。 Apple80211プライベートライブラリを使用して行うことは可能です。またはそれらすべてへの接続。
解決
プライベートライブラリ(Apple80211
)を使用せずに、デバイスが現在接続されているネットワークのSSIDを取得できます。
他のヒント
iOS 9以降、 nehotspothelper を使用してSSIDのリストを取得できます。しかし、リクエストを送信することによってAppleからcom.apple.developer.networking.HotspotHelper
エンタイトルメントを取得する必要があります。
iOS 9およびiOS 11のネットワーク拡張の一部として新しいAPIがリリースされています。アプリの実行中にネットワークをスキャンすることはできません。両方とも、関連タスクを実行できます。例えば。 HotSpot Helperを使用して設定Wi-Fiページが実行されている間は、ネットワークをスキャンでき、ユーザーがこれらのいずれかを使用してネットワークに参加できるようにすることができます。
これは2つのフレームワークの比較です。
ホットスポットヘルパー
-
NEHotspotHelper
(IOS 9で導入された、 wwdc 2015 )。 - アップルから特別な許可を必要とします。
-
com.apple.developer.networking.HotspotHelper
エンタイトルメントを要求します。 - ステップバイステップの指示にこの作業を取得するには、この回答 を参照してください。
-
設定アプリのWi-Fi画面を介してDiscovery /認証にWi-Fiネットワークに参加することができます。ネットワークがスキャンされているときに通知されるように登録します(たとえば、ユーザーが設定アプリのWi-Fiを起動したときに、パスワードを自動的にプリメリに記入してネットワーク名の近くに注釈を表示できます。ユーザーはまだ接続するためにネットワーク名をタップする必要がありますが、それを事前に記入した場合はパスワードの入力を求められません。
ホットスポット構成
-
NEHotspotConfigurationManager
(IOS 11で導入された、 WWDC 2017 )。 - アップルから特別な許可を必要としません。
-
com.apple.developer.networking.HotspotConfiguration
エンタイトルメントを要求します。 -
Wi-Fiネットワークへの接続を開始することができます。アプリが実行されている間に接続する必要があるSSID /パスワードのリストを提供します。ネットワークに接続したい場合は、ユーザーに尋ねるダイアログを表示します。
href="https://i.stack.imgur.com/5y5yym.png" rel="nofollow noreferrer">
まず2つのシステムヘッダファイルを超えるとインポート
import SystemConfiguration/SystemConfiguration.h
import SystemConfiguration/CaptiveNetwork.h
.
下記関数/メソッドReturn 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"
}
}
. #import SystemConfiguration#
##import SystemConfiguration.CaptiveNetwork##
//create variable
var SSIDNameArray = NSMutableArray()
var nameArray : NSArray = [];
// Here function to return all SSIDName
func getUsedSSID()->NSArray{
let interfaces = CNCopySupportedInterfaces()
if interfaces != nil {
let interfacesArray = CFBridgingRetain(interfaces) as! NSArray
if interfacesArray.count > 0 {
for interfaceName in interfacesArray {
let unsafeInterfaceData = CNCopyCurrentNetworkInfo(interfaceName as! CFString)! as NSDictionary
let SSIDName = unsafeInterfaceData["SSID"] as! String
self.SSIDNameArray .add(SSIDName)
}
nameArray = self.SSIDNameArray .copy() as! NSArray
return nameArray;
}else{
return nameArray;
}
}else{
return nameArray;
}
}
.