Un xefe de produto pide un botón que acenda a VPN da empresa, e a petición soa trivial. En iOS non é unha función pequena; queda fóra do contrato público, e calquera solución alternativa falla na revisión ou rompe na seguinte versión. Pasa a petición polo que a plataforma permite de verdade e o deseño case se escribe só. Unha app pode posuír unha configuración de VPN e arrincala. Unha app non pode chegar ao interruptor do sistema, non pode ler o estado dun perfil que non creou e non pode manter un usuario conectado contra a súa vontade.

Comeza polas tres cousas que quere dicir o usuario

Separa os significados antes de separar as API. Ás veces o usuario quere o túnel da túa app conectado, ás veces quere que o interruptor de Axustes se active para un perfil que instalou outra persoa, e ás veces quere que o teléfono non poida navegar sen o túnel. Iso corresponde a tres mecanismos distintos, e só o primeiro está aberto a unha app corrente.

O segundo significado é o que xera as preguntas de Stack Overflow, e non ten resposta admitida. O interruptor de Axustes pertence ao usuario e, nos dispositivos xestionados, ao perfil. Ningunha API pública enumera configuracións de VPN, informa de se o túnel do sistema está levantado nin o conmuta.

Que pode crear de verdade unha app

NetworkExtension dálle a unha app unha configuración propia mediante NEVPNManager. Co dereito Personal VPN e o consentimento do usuario, a app garda unha configuración que aparece en Axustes co seu propio nome, e pode arrincar ou deter esa única conexión. É unha capacidade real e revisable, e tamén é todo o alcance: o xestor só le e escribe o que creou.

O dereito non é automático. Pídesllo a Apple e xustificas por que a app necesita un túnel, e un cliente cuxo único obxectivo é acender o perfil doutra persoa non ten boa resposta. Os provedores de túneles de paquetes seguen a mesma regra con outra clase: NETunnelProviderManager posúe configuracións baseadas en provedor que a propia app instalou. Ningún dos dous camiños chega a un perfil entregado polo MDM.

O consentimento tamén se aplica ao gardar. Escribir unha configuración pide confirmación ao usuario, e esa petición non é algo que unha app poida suprimir por comodidade.

Ler o estado choca coa mesma parede

O estado parece máis amable que o control e está igual de pechado. NEVPNStatus informa de non válido, desconectado, conectando, conectado, reafirmando ou desconectando para a configuración propia da app, e dispárase unha notificación en cada cambio. Non di nada dun túnel instalado por un perfil de xestión, que é xusto o estado que un servizo de asistencia quere ver.

A monitorización da ruta de rede e os cambios de interface ofrécense como substitutos nas revisións de deseño. Describen a ruta que segue o tráfico da app, que cambia por motivos alleos ao estado da VPN, e usalos como indicador de VPN dá unha interface que mente nas dúas direccións.

On Demand e Always On son as pancas reais

As pancas admitidas viven no perfil e non na app. As regras On Demand din ao sistema cando conectar: unha lista ordenada de condicións con accións, avaliada polo sistema operativo, non polo teu código. Unha regra que conecta en calquera interface crea unha sensación de conexión permanente sen dar ningún control á app.

Always On VPN é o mecanismo de imposición, e vai atado á supervisión. Nun dispositivo supervisado, o MDM instala un perfil que mantén o túnel levantado; nun teléfono persoal non supervisado as mesmas claves non producen o mesmo comportamento. Esa asimetría é deliberada, e ningunha combinación de claves de carga útil a elimina. Cando o requisito é de verdade que a VPN debe estar acesa, o requisito é en realidade que o dispositivo debe estar xestionado.

Entre as dúas senta o curmán máis feble: unha regra que reconecta despois de que o usuario se desconecte. Reconecta cando a regra se avalíe a próxima vez, o que non é o mesmo que de inmediato, e un usuario que se desconectou a propósito notará a diferenza. Deseña a interface arredor dese oco en lugar de prometer un cadeado.

Publica o camiño admitido

Catro preguntas fixan o mecanismo antes de que exista código: quen é o dono do dispositivo, se está supervisado, que cliente remata o túnel e de onde vén o perfil. Se algo diso é descoñecido, a petición de funcionalidade non está lista para estimarse.

Unha API privada que fedelle na VPN do sistema pasará unha demo e suspenderá a revisión, e se se publica por outra vía rompe na seguinte versión de iOS. Non hai versión dese intercambio que mereza a pena por un interruptor.

A telemetría de xestión é unha canle aparte: informa de que un perfil está instalado e de se o dispositivo cumpre, o que é informar e non unha superficie de control por app. Proba o fluxo nun dispositivo real despois de cada actualización, porque o comportamento admitido vive no sistema operativo e o sistema operativo móvese.

Artigos relacionados