Kur ndërton një ekran VPN brenda një aplikacioni iOS, surpriza e parë është se lista e protokolleve në aplikacionin Cilësimet nuk është lista e API-së. Korniza Network Extension lejon aplikacionin tënd të krijojë një konfigurim personal VPN, në pronësi të atij aplikacioni, dhe pranon vetëm disa objekte protokolli. Çdo gjë tjetër që njerëzit presin, nga L2TP deri në një profil të shkarkuar, qëndron jashtë asaj sipërfaqeje ose është private për Apple. Dështimet që vijojnë zakonisht nuk janë të meta, është API-ja që refuzon një punë që nuk e ka marrë kurrë.

Miti: API-ja është një redaktues i Cilësimeve

Besohet se meqenëse iOS mund të konfigurojë profilet IKEv1, IKEv2, L2TP dhe IPsec, një aplikacion mund të krijojë cilindo prej tyre në mënyrë programatike. Nuk mundet. Korniza i ekspozon aplikacionit thirrës saktësisht një vend konfigurimi, dhe ai vend pranon vetëm një grup të vogël klasash protokolli publike. Çdo gjë tjetër që njerëzit presin, nga L2TP deri në një profil të shkarkuar, qëndron jashtë asaj sipërfaqeje ose është private për Apple.

Dështimet që vijojnë zakonisht nuk janë të meta. Është API-ja që refuzon një punë që nuk e ka marrë kurrë, dhe zgjidhja është të projektohet ekrani rreth asaj që zotëron API-ja.

Tri objekte protokolli dhe ato që nuk ekzistojnë

Opsionet e tua janë IKEv1 përmes NEVPNProtocolIPSec, IKEv2 përmes NEVPNProtocolIKEv2, dhe NETunnelProviderProtocol nëse dërgoni zgjerimin tënd të tunelit të paketave. Referenca e NEVPNManager liston objektet e protokollit të pranuara. L2TP dhe PPTP nuk shfaqen kurrë në atë listë sepse Apple nuk publikoi klasa për ta. Përpjekja për ndonjërin prej tyre përfundon në ruajtje me një gabim, ose më keq, me një konfigurim që sistemi refuzon në heshtje ta përdorë.

Kodi i desktopit ndjek rregulla të tjera. Në macOS, SCNetworkInterfaceCreateWithInterface grumbullon një lloj ndërfaqeje si L2TP mbi IPv4 dhe e lidh me një shërbim rrjeti, dhe networksetup -connectpppoeservice nis rezultatin. Kërkohen të drejta administratori dhe një mjet ndihmës, sepse sekreti i përbashkët dhe fjalëkalimi shkojnë në çelësin e sistemit. Kopjoje atë dizajn në iOS dhe asgjë nuk kompilohet.

Kalo një referencë të çelësit, jo fjalëkalimin

Asnjëra nga dy klasat IKE nuk pranon një fjalëkalim si tekst. Dy vetitë passwordReference dhe sharedSecretReference duan një referencë të qëndrueshme të çelësit, të cilën e merr nga SecItemCopyMatching duke kërkuar kSecReturnPersistentRef. Kalimi i të dhënave të elementit, ose futja e një vargu në fushë, prodhon një dështim ruajtjeje ose një lidhje me kredenciale bosh. Referenca është vetëm aq e qëndrueshme sa elementi i çelësit pas saj, prandaj elementi duhet të ekzistojë përpara se konfigurimi të montohet. Krijoje në të njëjtin transaksion me ruajtjen dhe eliminon një klasë të tërë të metash renditjeje.

Vërtetimi me certifikatë ndjek një rrugë tjetër: identityData plus identityDataPassword për një blob PKCS#12. Dërgimi i atij blob brenda paketës së aplikacionit është një zakon i trashëguar nga kodi shembull, jo një vendim publikimi, sepse fjalëkalimi udhëton me të dhe çdo kopje e aplikacionit mbart të njëjtin identitet.

E drejta dhe disponueshmëria portëzojnë gjithçka

Menaxheri mund të mos ekzistojë fare, dhe arsyeja është provizionimi. Identifikuesi i aplikacionit tënd ka nevojë për aftësinë Network Extension së bashku me të drejtën për VPN personal, dhe profili që nënshkruan ndërtimin duhet t'i mbajë të dyja.

Kapërceje këtë dhe instanca e përbashkët kthen nil, ose ruajtja dështon me një gabim që nuk përmend kurrë të drejtën. Disponueshmëria është porta tjetër. Nëse synon diçka më të vjetër se iOS 8, simboli mungon në kohën e ekzekutimit, kështu që dështimi është një përplasje ose një menaxher nil, jo një menaxher pa konfigurim. Kontrollo mjedisin e ekzekutimit dhe të drejtën përpara se të korrigjosh grafin e objekteve.

Ngarko, ndrysho, ruaj, pastaj vëzhgo rendin sipas kërkesës

Trajto ciklin e jetës si ngarkim, ndryshim, ruajtje dhe mos e kapërce kurrë ngarkimin. Derisa loadFromPreferences të përfundojë, menaxheri nuk mban asgjë dhe objekti i protokollit nuk mund të lexohet ose zëvendësohet.

Ruajtja e dytë zëvendëson konfigurimin në vend që të shtojë një tjetër, kështu që një ruajtje gjysmë e përfunduar mund të dëmtojë një profil që funksiononte. Rregullat sipas kërkesës formojnë një varg të renditur, dhe ai rend është politika. Vendos një rregull lidhu-nga-kudo përpara rregullit të shkëputjes dhe një shkëputje manuale ndiqet nga një rilidhje e menjëhershme, e cila duket si defekt por ndjek vlerësimin e dokumentuar.

Zhvendos rregullin e shkëputjes përpara kur veprimi i përdoruesit duhet të fitojë. Ajo që mbetet jashtë kontrollit të aplikacionit ka po aq rëndësi. Rutat vijnë nga tuneli ose politika e serverit në vend të një preference që vendos ti, dhe një ofrues tuneli paketash raporton për to kur nis. Aplikacioni nuk mund të listojë ose modifikojë profilet e instaluara nga aplikacione të tjera ose profile konfigurimi, prandaj mos premto një ekran që shfaq çdo VPN në pajisje.

Artikuj të ngjashëm