Wat den NEVPNManager op iOS ka schafen (a wat net)
D’iOS-VPN-API baut eng Konfiguratioun am Besëtz vun der App aus dräi Protokollklassen. L2TP, PPTP an ënnerschriwwe Profiler sinn net Deel vun dëser Uewerfläch.
Wann Dir en VPN-Écran an enger iOS-App baut, ass déi éischt Iwwerraschung, datt d’Protokoll-Lëscht vun der Astellungen-App net d’API-Lëscht ass. De Network Extension-Framework erlaabt Ärer App eng perséinlech VPN-Konfiguratioun ze schafen, déi där App gehéiert, an hie akzeptéiert just e puer Protokollobjekter. All dat anescht, wat d’Leit erwaarden, vum L2TP bis zu engem erofgeluedene Profil, läit baussent dëser Uewerfläch oder ass privat fir Apple. D’Feeler, déi duerno kommen, sinn normalerweis keng Bugs, et ass d’API, déi eng Aarbecht verweigert, déi et ni krut.
De Mythos: d’API ass en Astellungen-Editor
Et gëtt ugeholl, datt well iOS IKEv1-, IKEv2-, L2TP- an IPsec-Profiler konfiguréiere kann, eng App jiddweree vun hinnen programmatesch ka schafen. Kann et net. De Framework bitt der ruffender App genee eng Konfiguratiounsplaz, an déi Plaz akzeptéiert nëmmen eng kleng Rei ëffentlech Protokollklassen. All dat anescht, wat d’Leit erwaarden, vum L2TP bis zu engem erofgeluedene Profil, läit baussent dëser Uewerfläch oder ass privat fir Apple.
D’Feeler, déi duerno kommen, sinn normalerweis keng Bugs. Et ass d’API, déi eng Aarbecht verweigert, déi et ni krut, an de Fix ass den Écran ronderëm dat ze designen, wat d’API besëtzt.
Dräi Protokollobjekter an déi, déi et net gëtt
Är Optiounen sinn IKEv1 iwwer NEVPNProtocolIPSec, IKEv2 iwwer NEVPNProtocolIKEv2, an NETunnelProviderProtocol wann Dir eng eege Paket-Tunnel-Erweiderung liwwert. D’NEVPNManager-Referenz listet déi akzeptéiert Protokollobjekter op. L2TP an PPTP erschéngen ni an dëser Lëscht, well Apple keng Klasse fir si publizéiert huet. Een vun deenen zwee ze versichen endet beim Späicheren mat engem Feeler, oder schlëmmer, mat enger Konfiguratioun, déi de System stillech refuséiert ze benotzen.
Desktop-Code follegt aner Regelen. Op macOS stackt SCNetworkInterfaceCreateWithInterface en Interface-Typ wéi L2TP iwwer IPv4 a verbënnt en mat engem Netzwierksservice, an networksetup -connectpppoeservice startt d’Resultat. Administratorrechter an en Hëllefsinstrument sinn néideg, well de gemeinsame Geheimnis an d’Passwuert an de Systemschlësselbündel ginn. Kopéiert dësen Design op iOS an näischt kompiléiert.
Gitt eng Schlësselbündel-Referenz, net d’Passwuert
Keng vun den zwou IKE-Klassen akzeptéiert e Passwuert als Text. Déi zwou Eegeschaften passwordReference an sharedSecretReference wëllen eng permanent Schlësselbündel-Referenz, déi Dir vum SecItemCopyMatching kritt, andeems Dir kSecReturnPersistentRef ufrot. D’Donnéeë vum Element ze iwwerginn, oder eng Zeechekette an d’Feld ze setzen, produzéiert e Späicherfeeler oder eng Verbindung mat eidele Umeldungsinformatiounen. D’Referenz ass just esou dauerhaft wéi dat Schlësselbündel-Element hannendrun, dofir muss d’Element existéieren, ier d’Konfiguratioun zesummegesat gëtt. Erstellt et an der selwechter Transaktioun wéi d’Späicheren an Dir entfernt eng ganz Klass vu Reiefeeler.
Zertifikatsauthentifikatioun hëlt en aneren Wee: identityData plus identityDataPassword fir e PKCS#12-Blob. Dee Blob am App-Bundle ze liwweren ass eng Gewunnecht aus dem Beispillcode, net eng Release-Entscheedung, well d’Passwuert mat him reest an all Kopie vun der App déiselwecht Identitéit dréit.
Berechtegung a Verfügbarkeet begrenzen alles
De Manager existéiert vläicht guer net, an de Grond ass d’Provisioning. Ären App-Identifiant brauch d’Network Extension-Fähegkeet zesumme mam Recht fir perséinlech VPN, an de Profil, deen de Build ënnerschreift, muss béides droen.
Iwwerspréngt dat an déi gedeelt Instanz gëtt nil zréck, oder d’Späichere schléit mat engem Feeler fehl, deen ni d’Recht ernimmt. D’Verfügbarkeet ass dat anert Paart. Wann Dir op eppes méi Altes wéi iOS 8 zilt, feelt d’Symbol zur Laufzäit, also ass de Feeler en Crash oder en nil-Manager, net en Manager ouni Konfiguratioun. Préift d’Laufzäit an d’Recht, ier Dir Äre Objektgraph debuggt.
Lued, ännert, späichert a kuckt duerno d’Reiefolleg op Ufro
Behandelt de Liewenszyklus als lueden, änneren, späicheren, a spréngt ni d’Lueden. Bis loadFromPreferences fäerdeg ass, hält de Manager näischt a kann den Protokollobjekt net gelies oder getosch ginn.
Eng zweet Späicherung ersetzt d’Konfiguratioun amplaz eng aner dobäizesetzen, dofir kann eng hallef fäerdeg Späicherung e Profil beschiedegen, dee funktionéiert huet. Op-Ufro-Regele bilden en uerdentlecht Array, an déi Reiefolleg ass d’Politik. Setzt eng Regel fir iwwerall-verbannen virun d’Trennungsregel an op eng manuell Trennung folgt eng direkt Nei-Verbindung, wat wéi en Defekt ausgesäit awer der dokumentéierter Evaluatioun follegt.
Verreckt d’Trennungsregel no vir, wann d’Aktioun vum Benotzer muss gewannen. Wat baussent der Kontroll vun der App bleift, ass just esou wichtich. Route komme vum Tunnel oder vun der Serverpolitik an net vun enger Preferenz, déi Dir setzt, woubäi en Paket-Tunnelprovider se beim Start mellt. D’App kann Profiler, déi vun aneren Apps oder Konfiguratiounsprofiler installéiert goufen, net oplëschten oder änneren, also versprécht keen Écran, deen all VPN um Apparat weist.