Produktový manažer žádá tlačítko, které zapne firemní VPN, a požadavek zní banálně. Na iOS to není malá funkce; stojí mimo veřejný kontrakt a každý obchvat buď neprojde recenzí, nebo se rozbije v dalším vydání. Projděte požadavek tím, co platforma skutečně dovoluje, a návrh se z velké části napíše sám. Aplikace může vlastnit konfiguraci VPN a spustit ji. Aplikace nedosáhne na systémový přepínač, nedokáže přečíst stav profilu, který sama nevytvořila, a nedokáže udržet uživatele připojeného proti jeho vůli.

Začněte třemi věcmi, které uživatel míní

Oddělte významy, než oddělíte API. Někdy chce uživatel, aby byl tunel vaší aplikace připojený, někdy chce přepnout přepínač v Nastavení pro profil, který nainstaloval někdo jiný, a někdy chce, aby telefon nemohl bez tunelu brouzdat. To odpovídá třem různým mechanismům a jen první je otevřený běžné aplikaci.

Druhý význam je ten, který plodí otázky na Stack Overflow, a nemá podporovanou odpověď. Přepínač v Nastavení patří uživateli a na spravovaných zařízeních profilu. Žádné veřejné API nevyjmenovává konfigurace VPN, nehlásí, zda je systémový tunel nahoře, ani jím nepřepíná.

Co aplikace skutečně může vytvořit

NetworkExtension dává aplikaci vlastní konfiguraci prostřednictvím NEVPNManager. S oprávněním Personal VPN a souhlasem uživatele aplikace uloží konfiguraci, která se v Nastavení objeví pod jejím jménem, a může toto jediné připojení spustit nebo zastavit. To je skutečná schopnost, která projde recenzí, a zároveň celý rozsah: správce čte a zapisuje jen to, co sám vytvořil.

Oprávnění není automatické. Žádáte je od Applu a zdůvodňujete, proč aplikace vůbec potřebuje tunel, a klient, jehož jediným cílem je zapnout cizí profil, nemá dobrou odpověď. Poskytovatelé paketových tunelů se řídí stejným pravidlem s jinou třídou: NETunnelProviderManager vlastní konfigurace založené na poskytovateli, které aplikace sama nainstalovala. Ani jedna cesta nedosáhne na profil, který dodal MDM.

Souhlas platí i v okamžiku uložení. Zápis konfigurace se uživatele ptá a tento dotaz není něco, co by aplikace mohla kvůli pohodlí potlačit.

Čtení stavu naráží na stejnou zeď

Stav vypadá přátelštěji než ovládání a je stejně uzavřený. NEVPNStatus hlásí neplatné, odpojeno, připojování, připojeno, znovupotvrzování nebo odpojování pro vlastní konfiguraci aplikace a při každé změně se spustí oznámení. O tunelu nainstalovaném profilem správy neříká nic, a to je právě stav, který helpdesk chce vidět.

Sledování síťové cesty a změny rozhraní se při návrhových revizích nabízejí jako náhrada. Popisují cestu, kterou provoz aplikace jde, a ta se mění z důvodů nesouvisejících se stavem VPN, a jejich použití jako ukazatele VPN dává rozhraní, které lže oběma směry.

On Demand a Always On jsou skutečné páky

Podporované páky žijí v profilu, ne v aplikaci. Pravidla On Demand říkají systému, kdy se připojit: uspořádaný seznam podmínek s akcemi, který vyhodnocuje operační systém, ne váš kód. Pravidlo, které se připojí na jakémkoli rozhraní, vytváří pocit trvalého připojení, aniž by aplikaci dalo jakoukoli kontrolu.

Always On VPN je donucovací mechanismus a je svázán s dohledem. Na zařízení pod dohledem nainstaluje MDM profil, který drží tunel nahoře; na osobním telefonu bez dohledu stejné klíče neprodukují stejné chování. Tato asymetrie je záměrná a žádná kombinace klíčů užitečného zatížení ji neodstraní. Když je požadavkem skutečně to, že VPN musí být zapnutá, požadavkem je ve skutečnosti to, že zařízení musí být spravované.

Mezi nimi sedí slabší bratranec: pravidlo, které se znovu připojí poté, co se uživatel odpojí. Připojí se při dalším vyhodnocení pravidla, což není totéž jako okamžitě, a uživatel, který se odpojil schválně, rozdíl pozná. Navrhněte rozhraní kolem této mezery, místo abyste slibovali zámek.

Dodávejte podporovanou cestu

Čtyři otázky rozhodnou mechanismus dřív, než existuje jakýkoli kód: kdo vlastní zařízení, zda je pod dohledem, který klient ukončuje tunel a odkud profil pochází. Pokud je cokoli z toho neznámé, požadavek na funkci není připraven k odhadu.

Soukromé API, které šťourá do systémové VPN, projde demem a propadne recenzí, a pokud se dodá jinudy, rozbije se v dalším vydání iOS. Neexistuje verze této výměny, která by stála za jeden přepínač.

Telemetrie správy je samostatný kanál: hlásí, že je profil nainstalován a zda je zařízení v souladu, což je výkaznictví, ne ovládací plocha pro aplikaci. Testujte tok na skutečném zařízení po každé aktualizaci, protože podporované chování žije v operačním systému a operační systém se hýbe.

Související články