Að greina virkt VPN inni í sandboxuðu Mac forriti
Ekkert opinbert API er til fyrir þessa spurningu, og brellan með viðmótsheitið er aðeins þumalputtaregla. Sex athuganir til að ákveða hvað forritið þitt ætti í raun að reiða sig á.
Þú þarft einn skjá sem hagar sér öðruvísi þegar göngin eru uppi, og ekkert kall segir þér það. Það er sendingartakmörkunin: á macOS tilkynnir ekkert opinbert kerfi hvort handahófskennt VPN sé tengt, og á iOS tilheyrir staðan forritinu sem setti upp stillinguna. Athuganirnar hér að neðan fara frá þessum mörkum að einhverju sem þú getur sent frá þér, og hver þeirra getur endað leitina snemma.
Athugun 1: er hægt að svara spurningunni yfirhöfuð?
Sandboxið leysir spurninguna áður en nokkurt API gerir það. Ferli þriðja aðila getur ekki talið upp viðbót annars söluaðila og getur heldur ekki lesið stillingu þeirrar viðbótar, svo ekkert studd hlutur er til að spyrja.
Sérhver krókaleið rekst á sama vegg. Viðmótslistar, scutil --nc list og bein lestur kerfisstillinga krefjast annaðhvort heimilda sem sandboxið heldur eftir eða byggjast á hegðun sem Apple lofaði aldrei. Ef áætlunin þarf eitthvað af þessu er áætlunin vandamálið. Eiginleiki byggður á óskjalfestum smáatriðum er stuðningsmiði með afhendingardag.
Athugun 2: stýrir forritið þitt göngunum sjálft?
Ef svo er hefur þú studd svar fyrir þína eigin stillingu. Hladdu stillingunum, meðhöndlaðu villuna, lestu síðan stöðuna og gerðu áskrift að breytingum í stað þess að spyrja endurtekið:
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
}Vertu nákvæmur um hvað þetta skilar: stöðu gangnanna sem þú settir upp. Notandi sem keyrir annan biðlara birtist sem aftengdur, og það er ekki villa í kóðanum þínum. Ákveddu hvora þessara tveggja spurninga eiginleikinn þinn spyr í raun áður en þú byggir á svarinu.
Athugun 3: hvað myndi þumalputtaregla í raun segja þér?
Víða afritaða aðferðin spyr kerfisproxyorðabókina um skilyrtu færslurnar sínar og les lyklana, sem eru fyrir tilviljun viðmótsheiti:
let settings = CFNetworkCopySystemProxySettings()?.takeRetainedValue() as NSDictionary?
let scoped = settings?["__SCOPED__"] as? [String: Any]
let names = scoped?.keys ?? []Lykill sem byrjar á tap, tun, ppp, ipsec eða utun gefur til kynna að viðmót með gagnatakmörkum gangna sé til staðar. Að passa allt heitið mistekst samstundis, því iOS 12 kom með utun1 og utun2 og sumar prófílar birtast sem ipsec4, ppp0 eða utun0. Berðu saman forskeyti í staðinn.
Engu að síður greinir heiti engan eiganda. Kerfiseiginleikar og viðbætur annarra söluaðila búa einnig til utun-viðmót, og eitt getur verið til án þess að bera neitt af umferðinni þinni. Lestu það sem vísbendingu um að eitthvað í lögun gangna sé nálægt, ekkert sterkara. Fölsk jákvæð niðurstaða er ódýr hér ef þú hleypir aðeins einum eiginleika í gegn, og dýr ef þú hleypir innskráningarskjánum í gegn.
Athugun 4: geturðu prófað áfangastaðinn í staðinn?
Ef forritið þarf aðeins að vita hvort innri þjónusta sé aðgengileg, prófaðu þá þjónustu. Stutt prófun með tímamörkum svarar spurningunni sem eiginleikinn byggist í raun á, og hún heldur áfram að virka þegar notandinn skiptir um biðlara eða göngin breyta um lögun.
Aðgengi er athugun á slóðinni þinni. Viðmótsheiti er ályktun um eitthvað sem liggur við slóðina þína, og þess vegna framleiðir þumalputtareglan rökræður í villuskýrslum en prófunin framleiðir sönnunargögn. Ef prófunin mistekst á meðan notandinn fullyrðir að VPN-ið sé á, hefurðu nú ákveðna slóð til að aflúsa: nafnupplausn, leið eða þjónustuheimild.
Athugun 5: getur kerfið framfylgt því sem þú þarft?
Þegar krafan er trygging um að ekkert sleppi út úr göngunum á prófíllinn heima þar, ekki skynjarinn. Að kveikja á includeAllNetworks í fullri gangnastillingu á iOS 14 eða nýrri breytir hegðun kerfisins í stað þess að biðja forritið þitt að álykta það. Fáninn er skjalfestur í NEVPNProtocol tilvísuninni.
Það er önnur tegund svars: framfylgd í stað athugunar. Það á líka aðeins við prófíla sem þú stýrir, svo það hjálpar ekki neytendaforriti sem fylgist með göngum einhvers annars.
Athugun 6: gerðu bilunina örugga og sýnilega
Slökktu aðeins á getunni sem þarf göngin og láttu restina af forritinu vera nothæfa. Skynjari sem felur allt viðmótið hvenær sem hann er óviss framleiðir niðurföll fyrir hvern þann sem göngin hans nota heiti sem þú bjóst aldrei við. Farðu í staðinn aftur í íhaldssama hegðun: staðbundnir eiginleikar halda áfram að virka og aðeins fjarkallið sem raunverulega þarf göngin er gert óvirkt. Það val er vöruákvörðun, og hún á skilið að vera skrifuð niður við hlið þumalputtareglunnar.
Skráðu það sem þú sást: viðmótsheiti, útgáfu kerfisins og niðurstöðu einnar prófunar. Það breytir næstu skýrslu úr rökræðu í athugun. Veldu síðan studda yfirlýsingu þar sem þú hefur hana, því stýrð stilling getur borið áformið skýrt og fjarlægt mestu ástæðuna til að skoða heiti yfirhöfuð.
Ef athuganir 1 til 5 skildu þig eftir án studds svars, sendu prófunina frá þér og merktu niðurstöðuna heiðarlega. Skjalfest merki um bestu viðleitni er betri vöruákvörðun en einkarekstur API sem brotnar í næstu útgáfu.