Kaks veakoodi seletavad enamikku esimesi katseid Network Extension VPN-iga iOS-is: NEVPNErrorDomain Code=4 ja Code=5. Kumbki ei ole serveri kaebus. Üks ilmub siis, kui rakendus kirjutab seadeid objektile, mida ei ole kunagi kettalt loetud, ja teine siis, kui kirjutamine ise ebaõnnestub, enamasti seetõttu, et profiil salvestatakse veel keelatud olekus. Mõlemad paranevad nelja kutse järjekorra muutmisega, mitte IKEv2 parameetrite puutumisega.

Laadi esmalt, muidu pole salvestusel millega võrrelda

Haldur hoiab salvestatud profiili koopiat ja objekt, mida muudate, ei ole see koopia enne, kui selle loete. Kutsuge esmalt loadFromPreferences, muutke selle lõpetamise töötlejas ja seejärel salvestage. Kui lugemise vahele jätate, näeb raamistik lahknevust selle vahel, mis tal on, ja selle vahel, mida te kirjutate. Swiftis on kuju iga sammu puhul sama ja iga samm kuulub oma sulundisse:

let mgr = NEVPNManager.shared()
mgr.loadFromPreferences { loadErr in
    guard loadErr == nil else { return }
    let proto = NEVPNProtocolIKEv2()
    proto.serverAddress = "vpn.example.net"
    proto.username = "alice"
    proto.useExtendedAuthentication = true
    mgr.protocolConfiguration = proto
    mgr.isEnabled = true
    mgr.saveToPreferences { saveErr in
        // do not start here; reload, then connect
    }
}

Tunneli käivitamine salvestamise sulundi seest on sama viga teises kohas. See jookseb enne, kui profiil on uuesti loetud, seega näeb käivitamise kutse teie ehitatud olekut, mitte salvestatud olekut. Salvestamise sulund lõpeb teise loadFromPreferences-iga ja ainult see lõpetamise töötleja kutsub startVPNTunnel.

Lubamise lipp on salvestamise osa

Salvestatud profiil on tegevusetu, kuni see sisse lülitatakse. Määrake isEnabled = true samas kirjutuses, muidu maandub profiil kettale keelatuna ja startVPNTunnel keeldub, kuigi Seaded näitavad täielikuna näivat konfiguratsiooni.

Välised muudatused on selle teine pool. Kui kasutaja muudab Seadetes midagi või seade liigub võrkude vahel, lugege uuesti enne, kui usaldate väärtusi, mida veel mälus hoiate. Objekt ei jälgi neid muudatusi teie eest. Aegunud koopia on viis, kuidas rakendus kirjutab profiili, mis pöörab kasutaja muudatuse vaikselt tagasi. Kaks kõrvutist välja tekitavad samal hetkel vaikse probleemi: on-demand reeglid peavad olema reegliobjektide massiiv, mitte tühi kohatäide, ja disconnectOnSleep peab peegeldama teie valitud käitumist, mitte kopeeritud vaikeväärtust.

Kolmandate osapoolte rakendustele on saadaval ainult kaks protokolli

Network Extension annab rakendustele IPsec ja IKEv2. L2TP ja PPTP jäävad süsteemi sisse, seega rakendus, mis neid vajab, ei saa neid, ja realistlikud vastused on IKEv2-tugine lüüs või hallatav konfiguratsiooniprofiil.

Mandaadid järgivad sama mustrit. Pange parool Keychaini ja edastage stringi asemel püsiv viide. Nullviide salvestamisel tähendab tavaliselt, et otsing jooksis enne üksuse kirjutamist, mitte et haldur on katki.

Mõlemad on disainiotsused, mitte möödahiilimised. Rakendus, mis hoiab parooli oma eelistustes, valib tee, mida raamistik ei soovita, ja selle tekitatud tõrge loetakse salvestusveana.

Välistage õigus enne koodi ümberkirjutamist

Kui loadFromPreferences ei kutsu üldse tagasi, on tõenäoline põhjus puuduv Network Extension võimekus või provisjoneerimisprofiil, mis seda ei kanna. Selline tõrge ripub, selle asemel et viga anda, ja seetõttu kirjutatakse töötavat koodi tunde ümber. Kontrollige õigust allkirjastatud buildil, mille kavatsete välja anda, sest simulatsioonis ja seadmes jooksmine võib erineda ning oluline siht on seade. Avage sihi allkirjastamise seaded ja kinnitage, et Network Extension võimekus on täpselt selle buildi jaoks olemas.

Provisjoneerimisprofiil ilma õiguseta ebaõnnestub riistvaral samamoodi, samas kui sama build võib simulatsioonis normaalselt laadida. Testige allkirjastatud arhiivi päris seadmes enne kutsete järjekorra ümberkirjutamist.

Jälgige oleku muutusi, mitte oletusi

Jälgige NEVPNStatusDidChangeNotification-i ja logige manager.connection.status pärast iga sammu. Olek, mis ei lahku kunagi invalid-ist, tähendab, et profiil ei ole salvestatud või õigus puudub. Ühendus, mis jõuab connectinguni ja ei ühendu kunagi, viitab ettepanekule või mandaatidele, mis on teine uurimine teiste tõenditega.

Kinnitage, et profiil ilmub jaotises Seaded, Üldine, VPN, ja kirjutage üles iga sulundi viga. Need kaks fakti eristavad järjekorravea õigusveast ilma oletamata.

Seotud artiklid