Żewġ kodiċijiet ta’ żball jispjegaw il-biċċa l-kbira tal-ewwel tentativi ta’ VPN Network Extension fuq iOS: NEVPNErrorDomain Code=4 u Code=5. Ebda wieħed mhu ilment tas-server. Wieħed jidher meta l-app tikteb is-settings f’oġġett li qatt ma nqara mid-diska, u l-ieħor meta l-kitba stess tfalli, ħafna drabi għax il-profil jiġi ssalvat waqt li għadu diżattivat. It-tnejn jiġu ffissati billi tinbidel l-ordni ta’ erba’ sejħiet, mhux billi tmiss il-parametri tal-IKEv2.

L-ewwel tagħbija, inkella s-salvataġġ m’għandux x’jqabbel

Il-maniġer iżomm kopja tal-profil issalvat, u l-oġġett li qed teditja mhu dik il-kopja sakemm taqrah. Sejjaħ l-ewwel loadFromPreferences, editja fil-handler tat-tlestija tiegħu, imbagħad issalva. Jekk taqbeż il-qari, il-qafas jara nuqqas ta’ qbil bejn dak li għandu u dak li qed tikteb. Fi Swift il-forma hija l-istess f’kull pass, u kull pass jappartjeni għall-closure tiegħu stess:

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
    }
}

Li tibda t-tunnel minn ġewwa l-closure tas-salvataġġ huwa l-istess żball f’post ieħor. Dan jaħdem qabel ma l-profil jerġa’ jinqara, għalhekk is-sejħa tal-bidu tara l-istat li bnejt u mhux l-istat li ġie ssalvat. Il-closure tas-salvataġġ jispiċċa bi tieni loadFromPreferences, u biss dak il-handler tat-tlestija jsejjaħ startVPNTunnel.

Il-bandiera tal-attivazzjoni hija parti mis-salvataġġ

Profil issalvat huwa inerti sakemm jixgħel. Issettja isEnabled = true fl-istess kitba, inkella l-profil jinżel fuq id-diska diżattivat u startVPNTunnel jirrifjuta anke jekk is-Settings juru konfigurazzjoni li tidher kompleta.

L-editjar estern huwa n-nofs l-ieħor. Jekk il-utent ibiddel xi ħaġa fis-Settings, jew il-mezz jiċċaqlaq bejn netwerks, erġa’ aqra qabel ma tafda l-valuri li għadek qed iżżomm fil-memorja. L-oġġett ma josservax dawk il-bidliet għalik. Kopja skaduta hija l-mod kif app tikteb profil li bil-kwiet iġib lura l-editjar tal-utent. Żewġ oqsma maġenb xulxin joħolqu inkwiet sieket fl-istess mument: ir-regoli on-demand għandhom ikunu array ta’ oġġetti regola u mhux sostitut vojt, u disconnectOnSleep għandu jirrifletti l-imġiba li għażilt u mhux default ikkupjat.

Huma biss żewġ protokolli disponibbli għall-apps ta’ partijiet terzi

Network Extension jagħti lill-apps IPsec u IKEv2. L2TP u PPTP jibqgħu ġewwa s-sistema, għalhekk app li teħtieġhom ma tistax ikollha, u t-tweġibiet realistiċi huma gateway li jappoġġja IKEv2 jew profil ta’ konfigurazzjoni ġestit.

Il-kredenzjali jsegwu l-istess mudell. Poġġi l-password fil-Keychain u għaddi referenza persistenti minflok is-string. Referenza nulla waqt is-salvataġġ normalment tfisser li t-tiftixa mxiet qabel ma nkiteb l-element, mhux li l-maniġer huwa mibjugħ.

It-tnejn huma deċiżjonijiet ta’ disinn u mhux soluzzjonijiet ta’ kumbinazzjoni. App li żżomm il-password fil-preferenzi tagħha stess tagħżel triq li l-qafas ma jħeġġeġx, u l-falliment li tipproduċi jinqara bħala żball tas-salvataġġ.

Ħoll id-dritt qabel ma terġa’ tikteb il-kodiċi

Meta loadFromPreferences qatt ma jerġa’ jsejjaħ lura, il-kawża probabbli hija kapaċità Network Extension nieqsa jew profil tal-provvista li ma jġorrhex. Dak il-falliment jiddendel minflok ma jagħti żball, u għalhekk kodiċi li jaħdem jerġa’ jinkiteb għal sigħat. Iċċekkja d-dritt fuq il-build iffirmat li beħsiebek tibgħat, għax tħaddima fis-simulatur u tħaddima fuq il-mezz jistgħu jvarjaw u l-mira li timporta hija l-mezz. Iftaħ is-settings tal-firma tal-mira u kkonferma li l-kapaċità Network Extension hija preżenti għal dak il-build eżatt.

Profil tal-provvista mingħajr id-dritt ifalli bl-istess mod fuq il-hardware, filwaqt li l-istess build jista’ jitgħabba b’mod normali fis-simulatur. Ipprova l-arkivju iffirmat fuq mezz veru qabel ma terġa’ tikteb l-ordni tas-sejħiet.

Ħares lejn il-bidliet tal-istat, mhux lejn is-suppożizzjonijiet

Osserva NEVPNStatusDidChangeNotification u rreġistra manager.connection.status wara kull pass. Stat li qatt ma joħroġ mill-invalid ifisser li l-profil ma ġiex issalvat jew li d-dritt huwa nieqes. Konnessjoni li tasal għall-connecting u qatt ma tikkonnettja tindika lejn il-proposta jew il-kredenzjali, u dik hija investigazzjoni differenti bi provi differenti.

Ikkonferma li l-profil jidher taħt Settings, Ġenerali, VPN, u rreġistra l-iżball minn kull closure. Dawn iż-żewġ fatti jifirdu bug tal-ordni minn bug tal-permessi mingħajr tbassir.

Artikli relatati