NEVPNManager yn methu cadw? Y drefn yw llwytho, galluogi, cadw, cysylltu
Mae cod 4 a chod 5 fel arfer yn golygu bod y proffil wedi'i olygu cyn ei lwytho neu wedi'i gadw tra oedd yn anabl. Trwsiwch drefn yr alwadau, yna gwiriwch yr hawl.
Mae dau god gwall yn cyfrif am y rhan fwyaf o'r ymdrechion cyntaf at VPN Network Extension ar iOS: NEVPNErrorDomain Code=4 a Code=5. Nid yw'r naill na'r llall yn gŵyn gan y gweinydd. Mae un yn ymddangos pan fo'r ap yn ysgrifennu gosodiadau i wrthrych na chafodd ei ddarllen erioed o'r disg, a'r llall pan fo'r ysgrifennu ei hun yn methu, yn aml oherwydd bod y proffil yn cael ei gadw tra mae'n dal yn anabl. Mae'r ddau yn cael eu trwsio drwy newid trefn pedair galwad, nid drwy gyffwrdd â pharamedrau IKEv2.
Llwythwch yn gyntaf, neu nid oes gan y cadwad ddim i gymharu ag ef
Mae'r rheolwr yn cadw copi o'r proffil a storiwyd, ac nid yw'r gwrthrych rydych chi'n ei olygu yn y copi hwnnw nes i chi ei ddarllen. Galwch loadFromPreferences yn gyntaf, golygwch y tu mewn i'w ddolen ddychwelyd, yna cadwch. Os byddwch yn hepgor y darllen, mae'r fframwaith yn gweld anghysondeb rhwng yr hyn sydd ganddo a'r hyn rydych chi'n ei ysgrifennu. Yn Swift mae'r siâp yr un peth ar gyfer pob cam, ac mae pob cam yn perthyn i'w glojwr ei hun:
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
}
}
Mae cychwyn y tiwnel o fewn clojwr y cadw yr un camgymeriad mewn man arall. Mae'n rhedeg cyn i'r proffil gael ei ailddarllen, felly mae'r alwad gychwyn yn gweld y cyflwr a adeiladwyd gennych chi yn hytrach na'r cyflwr a gadwyd. Mae clojwr y cadw yn gorffen gydag ail loadFromPreferences, a dim ond y ddolen ddychwelyd honno sy'n galw startVPNTunnel.
Mae'r faner galluogi yn rhan o'r cadw
Mae proffil a storiwyd yn anweithredol nes iddo gael ei droi ymlaen. Gosodwch isEnabled = true yn yr un ysgrifeniad, neu bydd y proffil yn glanio ar y disg yn anabl ac mae startVPNTunnel yn gwrthod er bod Gosodiadau yn dangos ffurfweddiad sy'n edrych yn gyflawn.
Golygiadau allanol yw hanner arall hyn. Os yw'r defnyddiwr yn newid rhywbeth yn Gosodiadau, neu os yw'r ddyfais yn symud rhwng rhwydweithiau, ailddarllenwch cyn ymddiried yn y gwerthoedd rydych chi'n dal i'w cadw mewn cof. Nid yw'r gwrthrych yn sylwi ar y newidiadau hynny drosoch. Copi hen yw'r ffordd y mae ap yn ysgrifennu proffil sy'n troi golygiad y defnyddiwr yn ôl yn dawel. Mae dau faes cyfagos yn achosi trafferth dawel ar yr un eiliad: rhaid i reolau on-demand fod yn arae o wrthrychau rheol yn hytrach na deiliad lle gwag, ac mae'n rhaid i disconnectOnSleep adlewyrchu'r ymddygiad a ddewiswyd gennych yn hytrach na diofyn a gopïwyd.
Dim ond dau brotocol sydd ar gael i apiau trydydd parti
Mae Network Extension yn rhoi IPsec ac IKEv2 i apiau. Mae L2TP a PPTP yn aros o fewn y system, felly ni all ap sydd eu hangen eu cael, a'r atebion realistig yw porth sy'n gallu IKEv2 neu broffil ffurfweddi a reolir.
Mae'r tystlythyrau yn dilyn yr un patrwm. Rhowch y cyfrinair yn y Keychain a throsglwyddwch gyfeirnod parhaus yn lle'r llinyn. Mae cyfeirnod nwl wrth gadw fel arfer yn golygu bod yr ymchwiliad wedi rhedeg cyn i'r eitem gael ei hysgrifennu, nid bod y rheolwr wedi torri.
Mae'r ddau yn benderfyniadau dylunio yn hytrach na chyfryngau dros dro. Mae ap sy'n cadw'r cyfrinair yn ei hoffterau ei hun yn dewis llwybr nad yw'r fframwaith yn ei annog, ac mae'r methiant a gynhyrchir ganddo yn darllen fel gwall cadw.
Diarddelwch yr hawl cyn ailysgrifennu cod
Pan nad yw loadFromPreferences byth yn galw'n ôl o gwbl, yr achos tebygol yw gallu Network Extension ar goll neu broffil darparu nad yw'n ei gario. Mae'r methiant hwnnw'n hongian yn lle rhoi gwall, a dyna pam mae cod sy'n gweithio yn cael ei ailysgrifennu am oriau. Gwiriwch yr hawl ar y build wedi'i lofnodi rydych chi'n bwriadu ei anfon, oherwydd gallai rhediad mewn efelychydd a rhediad ar ddyfais fod yn wahanol a'r targed sy'n cyfrif yw'r ddyfais. Agorwch osodiadau arwyddo'r targed a chadarnhewch fod y gallu Network Extension yn bresennol ar gyfer y build union hwnnw.
Mae proffil darparu heb yr hawl yn methu yr un ffordd ar galedwedd, tra gall yr un build lwytho'n normal yn yr efelychydd. Profwch yr archif wedi'i lofnodi ar ddyfais go iawn cyn ailysgrifennu trefn yr alwadau.
Gwyliwch y newidiadau statws, nid y tybiaethau
Arsylwch NEVPNStatusDidChangeNotification a chofnodwch manager.connection.status ar ôl pob cam. Mae statws nad yw byth yn gadael invalid yn golygu na chadwyd y proffil neu fod yr hawl ar goll. Mae cysylltiad sy'n cyrraedd connecting ac nad yw byth yn cysylltu yn pwyntio at y cynnig neu'r tystlythyrau, sef ymchwiliad gwahanol gyda thystiolaeth wahanol.
Cadarnhewch fod y proffil yn ymddangos o dan Gosodiadau, Cyffredinol, VPN, a chofnodwch y gwall o bob clojwr. Mae'r ddau ffaith hynny yn gwahanu byg trefn oddi wrth fyg caniatâd heb ddyfalu.