Starta om appen, fråga hanteraren om anslutningsstatus, och den rapporterar frånkopplad medan systemmenyn tydligt visar en aktiv tunnel. Eller så returnerar ett sparanrop ett fel som inte förklarar något, eller så förklaras en delad hemlighet saknas sekunder efter att den tilldelats. Tre symptom, en mekanism: hanteraren är en vy över ett systemlager, och en vy läses tom tills någon laddar den.

Innan du felsöker något av detta, avgör vilket API du ska använda. En systemtunnel med IPsec eller IKEv2 passar den inbyggda hanteraren; ett protokoll som systemet inte implementerar kräver en tunnelleverantör med din egen pakethantering, och ingen kombination av fält ändrar det.

Hanteraren är en vy över ett lager

Skapa eller hämta hanteraren, be den ladda sina inställningar och låt slutförandehanteraren bli klar innan du läser status eller ändrar protokollinställningar. När uppgiften är att lista sparade konfigurationer, använd anropet för alla varianter i stället för att återanvända en enda instans för två syften. Innan laddningen kommer är statusen vanligtvis ogiltig, och att tolka ogiltig som av är precis den bugg som får en app att se fel ut först efter en omstart.

Skrivning följer samma ordning. Ett sparförsök på en hanterare som aldrig har laddat något kan misslyckas utan ett användbart meddelande, eftersom det inte finns någon lagrad identitet som ändringen kan tillämpas på. Ladda, ändra, spara och läs sedan statusen igen. Objektet som systemet ansluter är den sparade profilen, inte den du redigerade i minnet.

Statusändringar kommer bara medan du tittar

När inställningarna är laddade går statusen genom frånkopplad, ansluter, ansluten, bekräftar på nytt och kopplar från. Initiera gränssnittet från en enda läsning och lyssna sedan efter ändringsmeddelandet i stället för att polla med en timer. Polling fungerar i förgrunden och ljuger i bakgrunden, och så blir appar kvar med en snurra som aldrig löses upp.

Meddelanden kommer bara medan appen är i förgrunden. Allt som håller tillstånd i bakgrunden kommer att se inaktuellt ut efter en omstart, så uppdatera vid start och igen när appen återvänder till förgrunden. Om en leverantör äger tunneln, styr den via motsvarande sessionsobjekt; den enkla anslutningsegenskapen modellerar inte en leverantörs livscykel.

Hemligheter är referenser, inte strängar

Ett meddelande om att en delad hemlighet saknas betyder sällan att ingen har tilldelat en. Protokollobjektet vill ha en referens: en för användarlösenordet och en för den fördelade IPsec-nyckeln. Att skicka nil, eller en referens som härletts från fel nyckelringspost, ger samma klagomål som en tom plats. Felet namnger symptomet och döljer orsaken, därför skriver folk in samma hemlighet flera gånger.

Skriv hemligheten först som ett generiskt lösenordsobjekt och läs sedan tillbaka en beständig referens till den. En beständig referens överlever omstart, till skillnad från en pekare i minnet, och det är representationen som profilen serialiserar. Välj en tillgänglighetsklass som fortfarande tillåter åtkomst när enheten har låsts upp, annars misslyckas en tunnel som måste återansluta på en låst skärm med autentiseringen trots en fullt giltig hemlighet.

Utökningen har sin egen nyckelringsvy

En nätverksutökning är en separat process, så appens standardåtkomst till nyckelringen når inte den. Ge båda målen samma nyckelringsåtkomstgrupp i deras rättigheter, lagra posten en gång inom den gruppen och låt varje process läsa den. Utan gruppen hittar utökningen ingenting och rapporterar ett autentiseringsfel som appen inte kan återskapa.

Om leverantören konfigureras via sitt leverantörskonfigurationsobjekt ska du inte också bädda in hemligheten i appen. Två kopior glider isär, och glidningen visar sig som dåliga autentiseringsuppgifter snarare än som duplicering. En widget eller en andra process som rapporterar en annan status har samma förklaring: var och en behöver gruppen, och var och en måste ladda inställningarna innan den läser.

Anpassa API:et till protokollet

Den inbyggda hanteraren bär IPsec- och IKEv2-protokollobjekt. Den blir inte en generisk SSL VPN-klient genom extra fält, och en opassande profil kan sparas rent och ändå aldrig ansluta. Avgör vilken kategori du tillhör innan du undersöker statusen, för en statusbugg och ett protokoll som inte stöds ser identiska ut utifrån.

För nästa omstart är checklistan kort: ladda inställningarna, läs statusen, håll ändringsprenumerationerna i förgrunden, bygg om referenserna från den delade gruppen och bekräfta att protokollobjektet matchar det API du implementerade. Att gå igenom listan tar en minut; att gissa på den tar en hel eftermiddag.

Relaterade artiklar