NEVPNManager bewarret net? De folchoarder is lade, aktivearje, bewarje, ferbine
Koad 4 en koad 5 betsjutte meast dat it profyl bewurke waard foar it laden of bewarre waard wylst it útskeakele wie. Reparearje de folchoarder fan ’e oproppen, kontrolearje dan it rjocht.
Twa floutsjes ferklearje de measte earste besykjen foar in Network Extension VPN op iOS: NEVPNErrorDomain Code=4 en Code=5. Gjin fan beide is in klacht fan ’e tsjinner. De iene ferskynt as de app ynstellings skriuwt yn in objekt dat nea fan ’e skiif lêzen is, en de oare as it skriuwen sels mislearret, meast omdat it profyl bewarre wurdt wylst it noch útskeakele is. Beide wurde reparearre troch de folchoarder fan fjouwer oproppen te feroarjen, net troch de IKEv2-parameters oan te reitsjen.
Laad earst, oars hat it bewarjen neat om mei te fergelykjen
De behearder hâldt in kopy fan it bewarre profyl, en it objekt dat jo bewurkje is dy kopy net foar’t jo it lêze. Rop earst loadFromPreferences oan, bewurkje yn syn foltôgingshandler, bewarje dan. Sla jo it lêzen oer, dan sjocht it ramt in misferhâlding tusken wat it hat en wat jo skriuwe. Yn Swift is de foarm by elke stap itselde, en elke stap heart by syn eigen 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
}
}
De tunnel starte fanút de bewar-closure is deselde flater op in oare plak. It rint foar’t it profyl opnij lêzen is, dus de startoprop sjocht de tastân dy’t jo boud hawwe, net de tastân dy’t bewarre is. De bewar-closure einiget mei in twadde loadFromPreferences, en allinnich dy foltôgingshandler ropt startVPNTunnel oan.
De aktivearringsflagge is diel fan it bewarjen
In bewarre profyl is ynaktyf oant it oanset wurdt. Set isEnabled = true yn itselde skriuwen, oars komt it profyl útskeakele op ’e skiif en wegeret startVPNTunnel sels as Ynstellings in konfiguraasje sjen litte dy’t folslein liket.
Eksterne bewurkings binne de oare helte. As de brûker wat yn Ynstellings feroaret, of it apparaat ferpleatst him tusken netwurken, lês dan opnij foar’t jo de wearden fertrouwe dy’t jo noch yn it ûnthâld hâlde. It objekt merkt dy feroarings net foar jo op. In ferâldere kopy is de manier wêrop in app in profyl skriuwt dat de bewurking fan ’e brûker stil weromdraait. Twa oanbuorjende fjilden feroarsaakje op itselde momint stil misbrûk: on-demand-regels moatte in array fan regelobjekten wêze en net in lege plekhâlder, en disconnectOnSleep moat it gedrach wjerspegelje dat jo keazen hawwe en net in kopiaarre standert.
Allinnich twa protokollen binne beskikber foar apps fan tredden
Network Extension jout apps IPsec en IKEv2. L2TP en PPTP bliuwe binnen it systeem, dus in app dy’t se nedich hat kin se net krije, en de realisyske antwurden binne in IKEv2-gaadlike poarte of in beheard konfiguraasjeprofyl.
Bewiisstikken folgje itselde patroan. Set it wachtwurd yn ’e Keychain en jou in permaninte ferwizing troch ynstee fan ’e string. In nulferwizing by it bewarjen betsjut meast dat it sykjen rûn foar’t it item skreaun waard, net dat de behearder stikken is.
Beide binne ûntwerpbeslissingen en gjin needsoplossingen. In app dy’t it wachtwurd yn syn eigen foarkarren hâldt, kiest in paad dat it ramt ûntmoediget, en it mislearjen dat it oplevert lêst as in bewarflout.
Slút it rjocht út foar’t jo koade oerskriuwe
As loadFromPreferences hielendal net weromkomt, is de wierskynlike oarsaak in ûntbrekkende Network Extension-mooglikheid of in leveringsprofyl dat dy net draacht. Dat mislearjen hinget ynstee fan in flout te jaan, en dêrom wurdt wurkjende koade oerenlang oerskreaun. Kontrolearje it rjocht op ’e ûndertekene build dy’t jo fan plan binne te leverjen, want in simulatordracht en in apparaatdracht kinne ferskille en it doel dat telt is it apparaat. Iepenje de ûndertekeningynstellings fan it doel en befêstigje dat de Network Extension-mooglikheid foar krekt dy build oanwêzich is.
In leveringsprofyl sûnder it rjocht mislearret op hardware itselde, wylst deselde build normaal yn ’e simulator lade kin. Test it ûndertekene argyf op in echte apparaat foar’t jo de folchoarder fan ’e oproppen oerskriuwe.
Sjoch nei de tastânferoarings, net nei oannames
Observearje NEVPNStatusDidChangeNotification en log manager.connection.status nei elke stap. In tastân dy’t nea invalid ferlit betsjut dat it profyl net bewarre is of dat it rjocht ûntbrekt. In ferbining dy’t connecting berikt en nea ferbynt wiist op it foarstel of de bewiisstikken, en dat is in oar ûndersyk mei oar bewiis.
Befêstigje dat it profyl ûnder Ynstellings, Algemien, VPN ferskynt, en notearje de flout fan elke closure. Dy twa feiten skiede in folchoarderflout fan in tastimmingsflout sûnder rieden.