Għandek bżonn skrin wieħed li jġib ruħu b'mod differenti meta t-tunnel ikun mixgħul, u m'hemm l-ebda sejħa li tgħidlek dan. Dan huwa l-limitu tat-tbaħħir: fuq macOS l-ebda framework pubbliku ma jirrapporta jekk VPN arbitrarju huwiex konness, u fuq iOS l-istat jappartjeni lill-app li installat il-konfigurazzjoni. Il-verifiki hawn taħt jimxu minn dan il-limitu għal xi ħaġa li tista' tbaħħar, u waħda minnhom tista' ttemm it-tfittxija kmieni.

Verifika 1: il-mistoqsija tista' tingħata risposta xejn?

Is-sandbox jissolva l-mistoqsija qabel kwalunkwe API. Proċess ta' parti terza ma jistax jelenka l-estensjoni ta' bejjiegħ ieħor, u lanqas ma jista' jaqra l-konfigurazzjoni ta' dik l-estensjoni, għalhekk m'hemm l-ebda oġġett appoġġat biex tistaqsi.

Kull bypass jiltaqa' mal-istess ħajt. Il-listi tal-interface, scutil --nc list u qari dirett tal-konfigurazzjoni tas-sistema jew jeħtieġu drittijiet li s-sandbox iżżomm lura jew jiddependu fuq imġieba li Apple qatt ma wiegħdet. Jekk il-pjan jeħtieġ waħda minn dawn, il-problema huwa l-pjan. Karatteristika mibnija fuq dettall mhux dokumentat hija ticket ta' appoġġ b'data ta' kunsinna.

Verifika 2: l-app tiegħek tamministra t-tunnel hi stess?

Jekk tagħmel, għandek risposta appoġġata għall-konfigurazzjoni tiegħek stess. Tagħbija l-preferenzi, immaniġġja l-iżball, imbagħad aqra l-istat u abbona għall-bidliet minflok tagħmel stħarriġ:

vpnManager.loadFromPreferences { error in
    // handle a load failure before reading status
}

NotificationCenter.default.addObserver(
    forName: .NEVPNStatusDidChange,
    object: nil,
    queue: nil
) { note in
    let status = (note.object as? NEVPNConnection)?.status
}

Kun preċiż dwar x'jirritorna dan: l-istat tat-tunnel li installajt. Utent li jmexxi klijent ieħor jidher bħala skonnettjat, u dan mhuwiex bug fil-kodiċi tiegħek. Iddeċiedi liema minn dawn iż-żewġ mistoqsijiet il-karatteristika tiegħek qiegħda verament tistaqsi qabel tibni fuq ir-risposta.

Verifika 3: x'jgħidlek tassew heuristic?

L-approċċ kopjat ħafna jistaqsi lid-dizzjunarju tal-proxy tas-sistema għall-entrati bl-iskop tiegħu u jaqra ċ-ċwievet, li jiġri li huma ismijiet ta' interface:

let settings = CFNetworkCopySystemProxySettings()?.takeRetainedValue() as NSDictionary?
let scoped = settings?["__SCOPED__"] as? [String: Any]
let names = scoped?.keys ?? []

Ċavetta li tibda b'tap, tun, ppp, ipsec jew utun timplika li hemm interface bl-iskop tat-tunnel preżenti. Li tqabbel l-isem sħiħ ifalli mill-ewwel, għax iOS 12 ġie b'utun1 u utun2 u xi profili jidhru bħala ipsec4, ppp0 jew utun0. Qabbel il-prefissi minflok.

Minkejja dan, isem ma jidentifika l-ebda sid. Karatteristiċi tas-sistema u estensjonijiet ta' bejjiegħa oħra joħolqu wkoll interfaces utun, u waħda tista' teżisti mingħajr ma ġġorr xejn mit-traffiku tiegħek. Aqrah bħala ħjiel li hemm xi ħaġa f'forma ta' tunnel fil-qrib, xejn aktar b'saħħtu. Pożittiv falz hawn huwa irħis jekk tikkontrolla karatteristika waħda biss, u għali jekk tikkontrolla l-iskrin tad-dħul.

Verifika 4: tista' tittestja d-destinazzjoni minflok?

Jekk l-app trid biss tkun taf jekk servizz intern huwiex aċċessibbli, ittestja dak is-servizz. Probe qasira b'timeout twieġeb il-mistoqsija li l-karatteristika tassew tiddependi fuqha, u tibqa' taħdem meta l-utent ibiddel il-klijent jew it-tunnel ibiddel il-forma.

L-aċċessibbiltà hija osservazzjoni dwar il-passaġġ tiegħek. L-isem tal-interface hija inferenza dwar xi ħaġa ħdejn il-passaġġ tiegħek, u għalhekk il-heuristic tipproduċi argumenti fir-rapporti tal-bugs filwaqt li l-probe tipproduċi evidenza. Jekk il-probe tfalli waqt li l-utent jinsisti li l-VPN mixgħul, issa għandek passaġġ konkret biex tneħħi l-bugs: riżoluzzjoni tal-ismijiet, rotta jew permess tas-servizz.

Verifika 5: il-pjattaforma tista' tinforza dak li għandek bżonn?

Meta l-ħtieġa hija garanzija li xejn ma jaħrab mit-tunnel, il-profil huwa l-post tiegħu, mhux id-ditektif. Li tixgħel includeAllNetworks f'konfigurazzjoni ta' tunnel sħiħ fuq iOS 14 jew aktar tard ibiddel l-imġieba tal-pjattaforma minflok ma jitlob lill-app tiegħek tiddeduċiha. Il-bandiera hija dokumentata fir-referenza NEVPNProtocol.

Dik hija tip differenti ta' risposta: infurzar minflok osservazzjoni. Tapplika wkoll biss għall-profili li tikkontrolla, għalhekk ma tgħinx app tal-konsumatur li tħares it-tunnel ta' xi ħadd ieħor.

Verifika 6: agħmel il-falliment sikur u osservabbli

Itfi biss il-kapaċità li teħtieġ it-tunnel u ħalli l-bqija tal-app użabbli. Ditektif li jaħbi l-interface kollha kull meta ma jkunx ċert joħloq waqfien għal kulmin it-tunnel tiegħu juża isem li qatt ma ħsibt. Erġa' lura għall-imġieba konservattiva minflok: il-karatteristiċi lokali jibqgħu jaħdmu u hija biss is-sejħa remota li verament teħtieġ it-tunnel li tiġi diżattivata. Dik l-għażla hija deċiżjoni tal-prodott, u jistħoqqilha li tinkiteb ħdejn il-heuristic.

Irreġistra dak li osservajt: ismijiet tal-interface, verżjoni tal-pjattaforma u r-riżultat ta' probe waħda. Dan ibiddel ir-rapport li jmiss minn argument għal verifika. Imbagħad ippreferi dikjarazzjoni appoġġata fejn għandek waħda, għax konfigurazzjoni ġestita tista' ġġorr l-intenzjoni b'mod espliċitu u tneħħi l-biċċa l-kbira tar-raġuni biex tispezzjona l-ismijiet xejn.

Jekk il-verifiki 1 sa 5 ħallewk mingħajr risposta appoġġata, ibgħat il-probe u ttikketta r-riżultat b'onestà. Sinjal dokumentat tal-aħjar sforz huwa deċiżjoni tal-prodott aħjar minn API privata li tinkiser fil-ħarġa li jmiss.

Artikli relatati