Wi-Fi . , , ,, , . , , -, , -, Wi-Fi , , . , . , ( , ) (, , ), .
, , . , - , . Network Helper! , . UI , .
. NEHotspotHelper, iOS 9. Wi-Fi- . NEHotspotHelper NetworkExtension. iOS 11 :
:
Hotspot Network Subsystem Programming Guide. , . , , Hotspot Helper.
GitHub.
Hotspot Helper Wi-Fi- Helper , . , Apple :
, .
:
- Helper, (Evaluate).
- , Hotspot Helper(Authenticating).
- UI, Hotspot Helper (PresentingUI). , Helper (Authenticated).
- Hotspot Helper , (Maintain).
- Helper , .
: Hotspot Helper, c Maintain, .
Hotspot Helper Wi-Fi- . Hotspot Helper , ( (
silent-push ). . , . , .
, : Wi-Fi-Hotspot Helper .
, , StateMachine Authenticated. , Hotspot Helper
Evaluate. Reachability, .
, NEHotspotHelper target, extension, , Hotspot Helper. , , - , . , , . ,
.
Hotspot Helper Apple. Team Agent
.
:
, provisioning profile
https://developer.apple.com entitlement com.apple.developer.networking.HotspotHelper, .

,
Background Mode Capability Info.plist UIBackgroundModesnetwork-authentication. .
Hotspot Helper, . :
class NEHotspotHelper
class func register(options: [String : NSObject]? = nil, queue: DispatchQueue,
handler: @escaping NetworkExtension.NEHotspotHelperHandler) -> Bool
:
Helper . false. , , .
. , , c
.
, ( , ), Wi-Fi- Hotspot Helper ( ).
NEHotspotHelperCommand, , ( , ).
NEHotspotHelperResponse , .
NEHotspotHelperResponse :
funccreateResponse(_result:NEHotspotHelperResult) ->NEHotspotHelperResponse
,
TCP-UDP- , , :
funccreateTCPConnection(_endpoint:NWEndpoint) ->NWTCPConnection
funccreateUDPSession(_endpoint:NWEndpoint) ->NWUDPSession
NSURLRequest. , Hotspot Helper , Wi-Fi-. -. IYKWIM
funcbind(to command:NEHotspotHelperCommand)
, Hotspot Helper, , . State Machine, .
45 (, , 60 ). , Hotspot Helper. , , , Wi-Fi Status Bar. , , Hotspot Helper, , ( ).
NEHotspotHelperCommandType.filterScanList
, , , StateMachine . Hotspot Helper, ,
5 . , Wi-Fi- Settings.app.
, Hotspot Helper. :
varnetworkList: [NEHotspotNetwork]? { get }
, . .
, Hotspot Helper , . , Helper .
.
, Hotspot Helper , . , Hotspot Helper kNEHotspotHelperOptionDisplayName. . ( ), -, , .
,
, . . , . , , . , .
:
letnetwork =
network.setPassword("PASSWORD")
letresponse = command.createResponse(.success)
response.setNetworkList([network])
response.deliver()
:
, filterScanList . Hotspot Helper , , .
: , .
NEHotspotHelperCommandType.evaluate
Hotspot Helper, .
Note: evaluate , maintain Hotspot Helper, evaluate.
Hotspot Helper. Hotspot Helper , :
varnetwork:NEHotspotNetwork? { get }
Network , evaluate :
//
varssid:String{ get }
varbssid:String{ get }
// 0.0 1.0 (, , )
varsignalStrength:Double{ get }
//
varisSecure:Bool{ get }
// , ,
//
vardidAutoJoin:Bool{ get }
,Hotspot Helper ( )
confidence:
// Helper , .
casenone
// Helper , , *.
caselow
// Helper , .
casehigh
* , Helper, , , StateMachine evaluate, Helper .
:Apple , confidence high ( low), UX .
:
letnetwork = command.network
// confidence...
network.setConfidence()
letresponse = command.createResponse(.success)
response.setNetwork(network)
response.deliver()
45 , . , high confidence, . Hotspot Helper , suspended state.
NEHotspotHelperCommandType.authenticate
authenticate Hotspot Helper evaluate.
, Wi-Fi-. Hotspot Helper , :
varnetwork:NEHotspotNetwork? { get }
Hotspot Helper. Hotspot Helper, , .
45 , response :
.success . .StateMachine authenticated.
.unsupportedNetwork Helper: evaluate. StateMachine evaluate, Helper . , , Helper low confidence evaluate, , .
.uiRequired . , - . :
UI .
:Hotspot HelperUILocalNotification, . , . ,StateMachine presentingUI .
.temporaryFailure . , .StateMachine failure, .
.failure ( , ) . - , : , , .StateMachine failure, ., temporaryFailure,
auto-join.
:
letnetwork = command.network
//
// UILocalNotification (.uiRequired)
command.createResponse().deliver()
NEHotspotHelperCommandType.presentUI
Hotspot Helper , uiRequired authenticate.
, . , , , UILocalNotification authenticate.
, , , , , . , .
response :
.success . . StateMachine authenticated.
.unsupportedNetwork Helper: evaluate.StateMachine evaluate, Helper . , , Helper low confidence evaluate, , .
.temporaryFailure . , . StateMachine failure, .
.failure ( , ) . - , : , , . StateMachine failure, . , temporaryFailure,
auto-join.
:
letnetwork = command.network
//
//
command.createResponse().deliver()
NEHotspotHelperCommandType.maintain
maintain, , . Hotspot Helper evaluate :
- 300 ( ) Wi-Fi-.
- evaluate, Hotspot Helper .
, Hotspot Helper :
- ( ) , response .success;
- , response .authenticationRequired ( StateMachine Authenticating Hotspot Helper authenticate).
- , ,(.temporaryFailure/.failure , ). StateMachine Evaluating Hotspot Helper, .
maintain , ,
didJustJoin.
:
letnetwork = command.network
ifnetwork.didJustJoin{
// , Helper
}
else{
// , ( 300 .)
}
//
//
command.createResponse().deliver()
, Authenticated.
NEHotspotHelperCommandType.logoff
logoff, ,
.
Hotspot Helper.
Hotspot Helper NEHotspotHelper:
classfunclogoff(_network:NEHotspotNetwork) ->Bool
, Hotspot Helper, , . false .
StateMachine LoggingOff, Hotspot Helper
45 .
, , :
letnetwork =NEHotspotHelper.supportedNetworkInterfaces().first
use-case: UI , presentUI.
Hotspot Helper ( ),StateMachine inactive, Wi-Fi-.
:
letnetwork = command.network
// logoff
letresponse = command.createResponse(.success).deliver()
, - , UX ( , ).
Hotspot Helper. , , , :
- Hotspot Helper .
- Hotspot Helper , . , background fetch, low power mode ..
- Hotspot Helper ( logoff : Helper). , reachability( , ).
- , , :
letnetwork =NEHotspotHelper.supportedNetworkInterfaces().first
, , swift- ( non-optional- ) ( ), SSID BSSID 0.0. , , nil ( crash). , .
Note:C iOS 11 .
- , StateMachine Authenticated. reachbility, , Hotspot Helper .
, , reachability Wi-Fi, Hotspot Helper . , :

, . , , .
- Helper .
Hotspot Helper, . , , .
evaluate: Hotspot Helper, high-confidence . Helper. Helper , . , Hotspot Helper .
, -Helper. : , . Apple UI ( SSID).
, - Hotspot Helper . , , , Hotspot Helper . :
letnetwork =NEHotspotHelper.supportedNetworkInterfaces().first
if!network.isChosenHelper{
// Hotspot Helper
}
,false , Helper (, evaluate). , , . .
- , . :
funccreateTCPConnection(_endpoint:NWEndpoint) ->NWTCPConnection
funccreateUDPSession(_endpoint:NWEndpoint) ->NWUDPSession
NSMutableURLRequest:
funcbind(to command:NEHotspotHelperCommand)
- iOS10.3, , . - , . : . , - .
, , .
- iOS 11 NEHotspotHelper NEHotspotConfigurationManager, Wi-Fi . . :
- , (, - .);
- , Wi-Fi- (, ). .
NEHotspotHelper, , . . , , . , Helper, .
, , . , - , , .
- GitHub
- Hotspot Network Subsystem Programming Guide
- Network Extension
- NEHotspotHelper reference
- WWDC15 What's New in Network Extension and VPN
- WWDC17 Advances in Networking, Part 1
- Forum: How to cancel register an app as a Hotspot Helper (NEHotspotHelper)?
- Forum: entitlements
- Forum: UI
- HotspotHelper
https://habrahabr.ru/post/335028/