O estado de NEVPNManager non é válido ata que se cargan as preferencias
Ler o estado ou gardar antes de que remate loadFromPreferences dá resultados obsoletos ou fallidos. Decídeno a orde de carga, as referencias do chaveiro e os grupos de acceso.
Reinicie a aplicación, pregunte ao xestor polo estado da conexión e responderá que está desconectada mentres o menú do sistema mostra claramente un túnel activo. Ou ben unha chamada de gardado devolve un erro que non explica nada, ou ben un segredo compartido declárase ausente segundos despois de asignarse. Tres síntomas, un só mecanismo: o xestor é unha vista sobre un almacén do sistema, e unha vista lese baleira ata que alguén a carga.
Antes de depurar calquera desas cousas, decida que API debe usar. Un túnel IPsec ou IKEv2 do sistema encaixa co xestor integrado; un protocolo que o sistema non implementa necesita un provedor de túnel co seu propio manexo de paquetes, e ningunha combinación de campos cambia iso.
O xestor é unha vista sobre un almacén
Cree ou obteña o xestor, pídalle que cargue as súas preferencias e deixe que o controlador de finalización remate antes de ler o estado ou cambiar os axustes do protocolo. Cando a tarefa sexa enumerar configuracións gardadas, use a chamada de todas as variantes en vez de reutilizar unha soa instancia para dous propósitos. Antes de que chegue a carga, o estado adoita ser inválido, e converter inválido en apagado é xusto o erro que fai que unha aplicación pareza incorrecta só tras reiniciar.
A escritura segue a mesma orde. Un gardado intentado nun xestor que nunca cargou nada pode fallar sen unha mensaxe útil, porque non hai ningunha identidade gardada á que aplicar o cambio. Cargue, modifique, garde e logo volva ler o estado. O obxecto ao que se conecta o sistema é o perfil gardado, non o que estaba editando en memoria.
Os cambios de estado só chegan mentres mira
Unha vez cargadas as preferencias, o estado pasa por desconectado, conectando, conectado, reafirmando e desconectando. Inicialice a interface cunha soa lectura e despois escoite a notificación de cambio en lugar de sondar cun temporizador. A sondaxe funciona en primeiro plano e mente en segundo plano, e así é como as aplicacións acaban cun indicador que nunca se resolve.
As notificacións só chegan mentres a aplicación está en primeiro plano. Calquera cousa que manteña estado en segundo plano parecerá obsoleta tras un reinicio, así que refresque ao arrincar e de novo cando a aplicación volva ao primeiro plano. Se un provedor é dono do túnel, condúzao mediante o obxecto de sesión correspondente; a propiedade de conexión simple non modela o ciclo de vida dun provedor.
Os segredos son referencias, non cadeas
Que se informe dun segredo compartido ausente raramente significa que ninguén asignase un. O obxecto de protocolo quere unha referencia: unha para o contrasinal do usuario e outra para a clave precompartida de IPsec. Pasar nil, ou unha referencia derivada da entrada equivocada do chaveiro, produce a mesma queixa que un oco baleiro. O erro nomea o síntoma e esconde a causa, e por iso a xente volve introducir o mesmo segredo varias veces.
Escriba primeiro o segredo como elemento de contrasinal xenérico e logo lea unha referencia persistente a el. Unha referencia persistente sobrevive a un reinicio, a diferenza dun punteiro en memoria, e é a representación que serializa o perfil. Escolla unha clase de accesibilidade que aínda permita o acceso unha vez desbloqueado o dispositivo, ou un túnel que debe reconectarse coa pantalla bloqueada fallará a autenticación cun segredo perfectamente válido.
A extensión ten a súa propia vista do chaveiro
Unha extensión de rede é un proceso aparte, así que o acceso predeterminado da aplicación ao chaveiro non chega ata ela. Dea a ambos os obxectivos o mesmo grupo de acceso ao chaveiro nos seus dereitos, garde o elemento unha vez dentro dese grupo e deixe que cada proceso o lea. Sen o grupo, a extensión non atopa nada e informa dun fallo de credenciais que a aplicación non pode reproducir.
Se o provedor se configura mediante o seu obxecto de configuración de provedor, non incruste tamén o segredo dentro da aplicación. Dúas copias diverxen, e a diverxencia preséntase como credenciais malas en lugar de como duplicación. Un widget ou un segundo proceso que informe doutro estado ten a mesma explicación: cada un necesita o grupo e cada un debe cargar as preferencias antes de ler.
Axuste a API ao protocolo
O xestor integrado leva obxectos de protocolo IPsec e IKEv2. Non se converte nun cliente SSL VPN xenérico mediante campos adicionais, e un perfil desaxustado pode gardarse limpiamente e aínda así non conectarse nunca. Decida a que categoría pertence antes de investigar o estado, porque un fallo de estado e un protocolo non admitido ven idénticos desde fóra.
Para o próximo reinicio, a lista de comprobación é curta: cargue as preferencias, lea o estado, manteña as subscricións de cambios en primeiro plano, reconstrua as referencias desde o grupo compartido e confirme que o obxecto de protocolo coincide coa API que implementou. Percorrer esa lista leva un minuto; adiviñala leva unha tarde.