L'estat de NEVPNManager no és vàlid fins que es carreguen les preferències
Llegir l'estat o desar abans que acabi loadFromPreferences dona resultats obsolets o fallits. L'ordre de càrrega, les referències del clauer i els grups d'accés ho decideixen.
Reengegueu l'aplicació, pregunteu al gestor l'estat de la connexió i us respondrà que està desconnectada mentre el menú del sistema mostra clarament un túnel actiu. O bé una crida de desament retorna un error que no explica res, o bé un secret compartit es declara absent segons després d'haver-se assignat. Tres símptomes, un sol mecanisme: el gestor és una vista sobre un magatzem del sistema, i una vista es llegeix buida fins que algú la carrega.
Abans de depurar res d'això, decidiu quina API heu d'utilitzar. Un túnel IPsec o IKEv2 del sistema encaixa amb el gestor integrat; un protocol que el sistema no implementa necessita un proveïdor de túnel amb la vostra pròpia gestió de paquets, i cap combinació de camps no ho canvia.
El gestor és una vista sobre un magatzem
Creeu o obteniu el gestor, demaneu-li que carregui les seves preferències i deixeu que el controlador de compleció acabi abans de llegir l'estat o canviar paràmetres del protocol. Quan la tasca sigui enumerar configuracions desades, feu servir la crida de totes les variants en lloc de reutilitzar una sola instància per a dos propòsits. Abans que arribi la càrrega, l'estat sol ser invàlid, i mapejar invàlid a apagat és precisament l'error que fa que una aplicació sembli incorrecta només després de reengegar.
L'escriptura segueix el mateix ordre. Un desament intentat en un gestor que no ha carregat mai res pot fallar sense cap missatge útil, perquè no hi ha cap identitat desada a la qual aplicar el canvi. Carregueu, modifiqueu, deseu i torneu a llegir l'estat. L'objecte al qual es connecta el sistema és el perfil desat, no el que estàveu editant a la memòria.
Els canvis d'estat arriben només mentre mireu
Un cop carregades les preferències, l'estat passa per desconnectat, connectant, connectat, reafirmant i desconnectant. Inicialitzeu la interfície amb una sola lectura i després escolteu la notificació de canvi en lloc d'enquestar amb un temporitzador. L'enquesta funciona en primer pla i menteix en segon pla, i així les aplicacions acaben amb un indicador que no es resol mai.
Les notificacions només arriben mentre l'aplicació és en primer pla. Qualsevol cosa que mantingui estat en segon pla semblarà obsoleta després d'un reengegament, així que refresqueu en arrencar i de nou quan l'aplicació torni al primer pla. Si un proveïdor posseeix el túnel, conduïu-lo mitjançant l'objecte de sessió corresponent; la propietat de connexió simple no modela el cicle de vida del proveïdor.
Els secrets són referències, no cadenes
Que s'informi que falta un secret compartit poques vegades vol dir que ningú no n'hagi assignat cap. L'objecte de protocol vol una referència: una per a la contrasenya de l'usuari i una per a la clau prèviament compartida d'IPsec. Passar nil, o passar una referència derivada de l'entrada equivocada del clauer, produeix la mateixa queixa que un lloc buit. L'error anomena el símptoma i amaga la causa, i per això la gent torna a introduir el mateix secret diverses vegades.
Escriviu primer el secret com a element de contrasenya genèrica i després llegiu una referència persistent a ell. Una referència persistent sobreviu a un reengegament, a diferència d'un punter a la memòria, i és la representació que serialitza el perfil. Trieu una classe d'accessibilitat que encara permeti l'accés un cop desbloquejat el dispositiu, o un túnel que ha de reconnectar-se amb la pantalla bloquejada fallarà l'autenticació amb un secret perfectament vàlid.
L'extensió té la seva pròpia vista del clauer
Una extensió de xarxa és un procés separat, així que l'accés predeterminat de l'aplicació al clauer no hi arriba. Doneu a tots dos objectius el mateix grup d'accés al clauer als seus entitlements, deseu l'element una vegada dins d'aquest grup i deixeu que cada procés el llegeixi. Sense el grup, l'extensió no troba res i informa d'un error de credencials que l'aplicació no pot reproduir.
Si el proveïdor es configura mitjançant el seu objecte de configuració, no incrusteu també el secret dins de l'aplicació. Dues còpies divergeixen, i la divergència es presenta com a credencials dolentes en lloc de com a duplicació. Un widget o un segon procés que informi d'un altre estat té la mateixa explicació: cadascun necessita el grup i cadascun ha de carregar les preferències abans de llegir.
Feu coincidir l'API amb el protocol
El gestor integrat porta objectes de protocol IPsec i IKEv2. No es converteix en un client SSL VPN genèric amb camps addicionals, i un perfil desajustat es pot desar net i no connectar-se mai. Decidiu a quina categoria pertanyeu abans d'investigar l'estat, perquè un error d'estat i un protocol no suportat semblen idèntics des de fora.
Per al proper reengegament, la llista de comprovació és curta: carregueu les preferències, llegiu l'estat, manteniu les subscripcions de canvi en primer pla, reconstruïu les referències des del grup compartit i confirmeu que l'objecte de protocol coincideix amb l'API que heu implementat. Recórrer aquesta llista costa un minut; endevinar-la costa una tarda.