NEVPNManager späichert net? D’Reiefolleg ass lueden, aktivéieren, späicheren, verbannen
Code 4 a Code 5 bedeiten normalerweis, datt de Profil virum Luede geännert oder deaktivéiert gespäichert gouf. Korrigéiert d’Reiefolleg vun de Aufruffer, da kontrolléiert d’Berechtegung.
Zwee Fehlercodë erklären déi meescht éischt Versich mat engem Network Extension VPN op iOS: NEVPNErrorDomain Code=4 a Code=5. Keen dovun ass eng Plainte vum Server. Dee een erschéngt, wann d’App Astellungen an en Objet schreift, deen ni vun der Plack gelies gouf, an deen aneren, wann d’Schreiwen selwer feelt, meeschtens well de Profil gespäichert gëtt, während hien nach deaktivéiert ass. Béid ginn duerch eng geännert Reiefolleg vu véier Aufruffer behuewen, net duerch d’Ugräifen an d’IKEv2-Parameter.
Fir d’éischt lueden, soss huet d’Späicheren näischt zum Vergläichen
Den Manager hält eng Kopie vum gespäicherte Profil, an den Objet, deen Dir ännert, ass déi Kopie net, bis Dir se liest. Rufft fir d’éischt loadFromPreferences op, ännert am Completion-Handler a späichert duerno. Wann Dir d’Liesen iwwerspréngt, gesäit de Framework eng Diskrepanz tëscht deem, wat en huet, a deem, wat Dir schreift. An Swift ass d’Form bei all Schrëtt déi selwecht, an all Schrëtt gehéiert an säin eegene Closure:
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
}
}
Den Tunnel vun innerhalb vum Späicher-Closure ze starten ass dee selwechte Fehler op enger anerer Plaz. Et leeft, ier de Profil nei gelies gouf, sou datt den Uruff vum Start den Zoustand gesäit, deen Dir gebaut hutt, an net deen, dee gespäichert gouf. De Späicher-Closure endet mat engem zweete loadFromPreferences, a just dee Completion-Handler rufft startVPNTunnel op.
De Flag vum Aktivéieren ass Deel vum Späicheren
E gespäicherte Profil ass inaktiv, bis en ageschalt gëtt. Setzt isEnabled = true am selwechte Schreiwen, soss landt de Profil deaktivéiert op der Plack an startVPNTunnel refuséiert, obwuel d’Astellungen eng Konfiguratioun weisen, déi komplett ausgesäit.
Extern Ännerunge sinn déi aner Halschent. Wann de Benotzer eppes an den Astellungen ännert, oder den Apparat tëscht Netzwierker wechselt, liest nach emol, ier Dir de Wäerter traut, déi Dir nach am Späicher hält. Den Objet observéiert déi Ännerungen net fir Iech. Eng al Kopie ass de Wee, wéi eng App e Profil schreift, deen d’Ännerung vum Benotzer stëll zrécksetzt. Zwee ugrenzend Felder verursaachen am selwechte Moment stëll Problemer: on-demand-Regele mussen eng Array vu Regelobjete sinn an net en eidelen Platzhalter, an disconnectOnSleep sollt d’Verhalen reflektéieren, dat Dir gewielt hutt, an net en kopéierte Standard.
Nëmmen zwee Protokoller sinn fir Drëttparteien-Appen disponibel
Network Extension gëtt Apps IPsec an IKEv2. L2TP an PPTP bleiwen am System, eng App, déi se brauch, kann se also net kréien, an déi realistesch Äntwerten sinn en IKEv2-fähege Gateway oder e verwalt Konfiguratiounsprofil.
D’Zougangsdaten follegen dem selwechte Muster. Setzt d’Passwuert an de Keychain a gitt eng persistent Referenz amplaz vum String. Eng Null-Referenz beim Späichere bedeit meeschtens, datt d’Sich leeft, ier den Element geschriwwe gouf, an net datt den Manager futti ass.
Béid si Design-Entscheedungen an net Ëmweeër. Eng App, déi d’Passwuert an hiren eegene Virléiften hält, wielt e Wee, deen de Framework net empfielt, an de Fehler, deen se produzéiert, liest sech wéi e Späicherfehler.
Schléisst d’Berechtegung aus, ier Dir de Code nei schreift
Wann loadFromPreferences guer net zréckrufft, ass déi wahrscheinlech Ursaach eng fehlend Network Extension-Fähegkeet oder e Provisioning-Profil, deen se net dréit. Dee Fehler hänkt, amplaz en Fehler ze ginn, an dofir gëtt funktionéierende Code stonnenlaang nei geschriwwen. Kontrolléiert d’Berechtegung op dem ënnerschriwwene Build, deen Dir wëllt ausliwweren, well e Simulaterlaf an e Gerätlaf sech kënnen ënnerscheeden an d’Zil, op dat et ukënnt, ass de Gerät. Maacht d’Signéierungsastellungen vum Zil op a bestätegt, datt d’Network Extension-Fähegkeet fir genee dee Build do ass.
E Provisioning-Profil ouni d’Berechtegung feelt op Hardware op déiselwecht Manéier, woubäi dee selwechte Build am Simulater normal luede kann. Testt d’ënnerschriwwenen Archiv op engem richtegen Apparat, ier Dir d’Reiefolleg vun den Aufruffer nei schreift.
Kuckt op d’Statusännerungen, net op d’Unahmen
Observéiert NEVPNStatusDidChangeNotification a loggt manager.connection.status no all Schrëtt. En Status, deen invalid ni verléisst, bedeit, datt de Profil net gespäichert gouf oder d’Berechtegung feelt. Eng Verbindung, déi connecting erreecht an ni verbënnt, weist op de Virschlag oder d’Zougangsdaten, an dat ass eng aner Enquête mat aneren Beweiser.
Bestätegt, datt de Profil ënner Astellungen, Allgemeng, VPN erschéngt, a notéiert de Fehler aus all Closure. Déi zwou Tatsaachen trennen e Reiefollegfehler vun engem Berechtegungsfehler ouni ze roden.