Zer sor dezakeen NEVPNManager-ek iOS-en (eta zer ez)
iOS-en VPN APIak hiru protokolo-klasetatik abiatuta aplikazioaren jabetzako konfigurazio bat eraikitzen du. L2TP, PPTP eta sinatutako profilak ez dira gainazal horren parte.
iOS aplikazio baten barruan VPN pantaila eraikitzen duzunean, lehen ustekabea hau da: Ezarpenen aplikazioko protokolo-zerrenda ez da APIaren zerrenda. Network Extension framework-ak zure aplikazioari VPN konfigurazio pertsonal bat sortzen uzten dio, aplikazio horrena, eta protokolo-objektu gutxi batzuk baino ez ditu onartzen. Jendeak espero duen guztia, L2TPtik deskargatutako profil batera, gainazal horretatik kanpo dago edo Apple-ren pribatua da. Ondorengo huts egiteak ez dira normalean erroreak, APIak inoiz eman ez zitzaion lan bat ukatzea dira.
Mitoa: APIa Ezarpenen editorea da
Ustea da iOSek IKEv1, IKEv2, L2TP eta IPsec profilak konfigura dezakeenez, aplikazio batek horietako edozein sor dezakeela programatikoki. Ezin du. Framework-ak konfigurazio-toki zehatz bat baino ez dio uzten deitzen duen aplikazioari, eta toki horrek protokolo-klase publiko multzo txiki bat onartzen du. Jendeak espero duen guztia, L2TPtik deskargatutako profil batera, gainazal horretatik kanpo dago edo Apple-ren pribatua da.
Ondorengo huts egiteak ez dira normalean erroreak. APIak inoiz eman ez zitzaion lan bat ukatzea dira, eta konponbidea APIak duenaren inguruan diseinatzea da pantaila.
Hiru protokolo-objektu eta existitzen ez direnak
Zure aukerak IKEv1 dira NEVPNProtocolIPSec bidez, IKEv2 NEVPNProtocolIKEv2 bidez, eta NETunnelProviderProtocol zure pakete-tunel luzapena bidaltzen baduzu. NEVPNManager erreferentzia zerrendatzen ditu onartutako protokolo-objektuak. L2TP eta PPTP ez dira inoiz zerrenda horretan agertzen, Applek ez baitzuen haientzat klaserik argitaratu. Bietako bat saiatzeak errore batekin amaitzen du gordetzean, edo okerrago, sistemak isilpean erabiltzeari uzten dion konfigurazio batekin.
Mahaigaineko kodeak beste arau batzuk jarraitzen ditu. macOS-en, SCNetworkInterfaceCreateWithInterface funtzioak IPv4 gaineko L2TP bezalako interfaze-mota bat pilatzen du eta sare-zerbitzu bati eransten dio, eta networksetup -connectpppoeservice komandoak emaitza abiarazten du. Administratzaile-baimenak eta laguntza-tresna bat behar dira, sekretu partekatua eta pasahitza sistemako giltza-sortara joaten baitira. Kopiatu diseinu hori iOS-era eta ezer ez da konpilatzen.
Pasahitza eman beharrean, giltza-sortako erreferentzia eman
IKE klaseetako batek ere ez du pasahitzik testu gisa onartzen. passwordReference eta sharedSecretReference propietateek giltza-sorta erreferentzia iraunkor bat nahi dute, eta hori SecItemCopyMatching funtziotik lortzen duzu kSecReturnPersistentRef eskatuta. Elementuaren datuak pasatzeak edo kate bat eremura sartzeak gordetze-huts egitea edo kredentzial hutseko konexioa eragiten du. Erreferentzia bere atzean dagoen giltza-sortako elementua bezain iraunkorra baino ez da, eta horregatik elementuak konfigurazioa muntatu aurretik existitu behar du. Sortu ezazu gordetzearekin transakzio berean eta ordena-erroreen klase oso bat kentzen duzu.
Ziurtagiri-autentifikazioak beste bide bat hartzen du: identityData eta identityDataPassword PKCS#12 blob batentzat. Blob hori aplikazioaren sortan bidaltzea lagin-kodetxetik ekarritako ohitura da, ez bidaltze-erabakia, pasahitzak harekin bidaiatzen baitu eta aplikazioaren kopia bakoitzak identitate bera darama.
Baimenak eta erabilgarritasunak dena baldintzatzen dute
Kudeatzailea agian ez dago batere, eta arrazoia provisioning-a da. Zure aplikazioaren identifikatzaileak Network Extension gaitasuna behar du VPN pertsonalaren baimenarekin batera, eta builda sinatzen duen profilak biak eraman behar ditu.
Hori saihestean, instantzia partekatuak nil itzultzen du, edo gordetzeak huts egiten du baimena inoiz aipatzen ez duen errore batekin. Erabilgarritasuna da beste atea. iOS 8 baino zaharragoa den edozer helburu baduzu, sinboloa falta da runtimean, beraz huts egitea kraskatzea edo kudeatzaile nil bat da, ez konfiguraziorik gabeko kudeatzaile bat. Egiaztatu runtimea eta baimena zure objektu-grafoa araztu aurretik.
Kargatu, aldatu, gorde eta gero begiratu eskaripeko ordena
Bizitza-zikloa kargatze, aldatze eta gordetze gisa hartu, eta ez utzi inoiz kargatzea. loadFromPreferences amaitu arte, kudeatzaileak ez du ezer atxikitzen eta protokolo-objektua ezin da irakurri edo trukatu.
Bigarren gordetze batek konfigurazioa ordezkatzen du beste bat gehitzen duenaren ordez, beraz erdi egindako gordetze batek lanean ari zen profil bat honda dezake. Eskaripeko arauek ordenatutako array bat osatzen dute, eta ordena hori da politika. Jarri edozein lekutatik konektatzeko araua deskonexio-arauen aurretik, eta eskuzko deskonexioari berehalako berriz konektatze bat jarraitzen dio, eta hori akats baten itxura du, baina dokumentatutako ebaluazioari jarraitzen dio.
Eraman deskonexio-araua aurrera erabiltzailearen ekintzak irabazi behar duenean. Aplikazioaren kontrolaren kanpo geratzen denak beste hainbeste axola du. Ibilbideak tunelatik edo zerbitzariaren politikatik datoz, ez zuk ezartzen duzun hobespen batetik, eta pakete-tunel hornitzaileak hastean jakinarazten ditu. Aplikazioak ezin ditu zerrendatu edo editatu beste aplikazioek edo konfigurazio-profilek instalatutako profilak, beraz ez ziurtatu gailuan VPN guztiak erakusten dituen pantaila bat.