Prečo vaša aplikácia pre iPhone nemôže zapnúť ani vypnúť systémovú VPN
Verejná aplikácia nemôže prepnúť systémovú VPN, prečítať jej stav ani vynútiť pripojenie. Možnosťami sú pravidlá On Demand, profily Always On na spravovaných zariadeniach a MDM.
Produktový manažér žiada tlačidlo, ktoré zapne firemnú VPN, a požiadavka znie banálne. Na iOS to nie je malá funkcia; stojí mimo verejného kontraktu a každé obídenie buď neprejde recenziou, alebo sa rozbije v ďalšom vydaní. Preveďte požiadavku tým, čo platforma skutočne dovoľuje, a návrh sa z veľkej časti napíše sám. Aplikácia môže vlastniť konfiguráciu VPN a spustiť ju. Aplikácia nedosiahne na systémový prepínač, nedokáže prečítať stav profilu, ktorý sama nevytvorila, a nedokáže udržať používateľa pripojeného proti jeho vôli.
Začnite tromi vecami, ktoré používateľ myslí
Oddeľte významy, kým oddelíte API. Niekedy chce používateľ, aby bol tunel vašej aplikácie pripojený, niekedy chce prepnúť prepínač v Nastaveniach pre profil, ktorý nainštaloval niekto iný, a niekedy chce, aby telefón nemohol bez tunela prehliadať. To zodpovedá trom rôznym mechanizmom a len prvý je otvorený bežnej aplikácii.
Druhý význam je ten, ktorý plodí otázky na Stack Overflow, a nemá podporovanú odpoveď. Prepínač v Nastaveniach patrí používateľovi a na spravovaných zariadeniach profilu. Žiadne verejné API nevyjmenúva konfigurácie VPN, nehlási, či je systémový tunel hore, ani ním neprepína.
Čo aplikácia skutočne môže vytvoriť
NetworkExtension dáva aplikácii vlastnú konfiguráciu prostredníctvom NEVPNManager. S oprávnením Personal VPN a súhlasom používateľa aplikácia uloží konfiguráciu, ktorá sa v Nastaveniach objaví pod jej menom, a môže toto jediné pripojenie spustiť alebo zastaviť. Je to skutočná schopnosť, ktorá prejde recenziou, a zároveň celý rozsah: správca číta a zapisuje len to, čo sám vytvoril.
Oprávnenie nie je automatické. Žiadate ho od Applu a zdôvodňujete, prečo aplikácia vôbec potrebuje tunel, a klient, ktorého jediným cieľom je zapnúť cudzí profil, nemá dobrú odpoveď. Poskytovatelia paketových tunelov sa riadia rovnakým pravidlom s inou triedou: NETunnelProviderManager vlastní konfigurácie založené na poskytovateľovi, ktoré aplikácia sama nainštalovala. Ani jedna cesta nedosiahne profil, ktorý dodal MDM.
Súhlas platí aj v okamihu uloženia. Zápis konfigurácie sa pýta používateľa a tento dotaz nie je niečo, čo by aplikácia mohla pre pohodlie potlačiť.
Čítanie stavu naráža na rovnakú stenu
Stav vyzerá priateľskejšie ako ovládanie a je rovnako uzavretý. NEVPNStatus hlási neplatné, odpojené, pripájanie, pripojené, opätovné potvrdzovanie alebo odpájanie pre vlastnú konfiguráciu aplikácie a pri každej zmene sa spustí oznámenie. O tuneli nainštalovanom profilom správy nehovorí nič, a to je práve stav, ktorý chce helpdesk vidieť.
Sledovanie sieťovej cesty a zmeny rozhrania sa pri návrhových recenziách ponúkajú ako náhrada. Opisujú cestu, ktorou ide prevádzka aplikácie, a tá sa mení z dôvodov nesúvisiacich so stavom VPN, a ich použitie ako indikátora VPN dáva rozhranie, ktoré klame oboma smermi.
On Demand a Always On sú skutočné páky
Podporované páky žijú v profile, nie v aplikácii. Pravidlá On Demand hovoria systému, kedy sa pripojiť: usporiadaný zoznam podmienok s akciami, ktorý vyhodnocuje operačný systém, nie váš kód. Pravidlo, ktoré sa pripojí na akomkoľvek rozhraní, vytvára pocit trvalého pripojenia bez toho, aby aplikácii dalo akúkoľvek kontrolu.
Always On VPN je mechanizmus presadzovania a je zviazaný s dohľadom. Na zariadení pod dohľadom nainštaluje MDM profil, ktorý drží tunel hore; na osobnom telefóne bez dohľadu tie isté kľúče neprodukujú rovnaké správanie. Táto asymetria je zámerná a žiadna kombinácia kľúčov užitočného zaťaženia ju neodstráni. Keď je požiadavkou skutočne to, že VPN musí byť zapnutá, požiadavkou je v skutočnosti to, že zariadenie musí byť spravované.
Medzi nimi sedí slabší bratranec: pravidlo, ktoré sa znova pripojí po tom, čo sa používateľ odpojí. Pripojí sa pri ďalšom vyhodnotení pravidla, čo nie je to isté ako okamžite, a používateľ, ktorý sa odpojil zámerne, rozdiel spozná. Navrhnite rozhranie okolo tejto medzery, namiesto toho, aby ste sľubovali zámok.
Dodávajte podporovanú cestu
Štyri otázky rozhodnú mechanizmus skôr, než existuje akýkoľvek kód: kto vlastní zariadenie, či je pod dohľadom, ktorý klient ukončuje tunel a odkiaľ profil pochádza. Ak je čokoľvek z toho neznáme, požiadavka na funkciu nie je pripravená na odhad.
Súkromné API, ktoré sa hrabe v systémovej VPN, prejde demom a prepadne pri recenzii, a ak sa dodá inou cestou, rozbije sa v ďalšom vydaní iOS. Neexistuje verzia tejto výmeny, ktorá by stála za jeden prepínač.
Telemetria správy je samostatný kanál: hlási, že profil je nainštalovaný a či je zariadenie v súlade, čo je výkazníctvo, nie ovládacia plocha pre aplikáciu. Testujte tok na skutočnom zariadení po každej aktualizácii, pretože podporované správanie žije v operačnom systéme a operačný systém sa hýbe.