Tveir villukóðar útskýra flestar fyrstu tilraunir með Network Extension VPN á iOS: NEVPNErrorDomain Code=4 og Code=5. Hvorugur er kvörtun frá netþjóninum. Annar birtist þegar appið skrifar stillingar í hlut sem aldrei var lesinn af disknum, og hinn þegar skrifin sjálf mistakast, oftast vegna þess að prófíllinn er vistaður á meðan hann er enn óvirkur. Báðir lagast með því að breyta röð fjögurra kalla, ekki með því að snerta IKEv2-færibreyturnar.

Hlaðið fyrst, annars hefur vistunin ekkert til að bera saman við

Stjórnandinn heldur afriti af vistaða prófílnum, og hluturinn sem þú breytir er ekki það afrit fyrr en þú lest hann. Kallaðu fyrst á loadFromPreferences, breyttu inni í lokameðferðinni og vistaðu svo. Ef þú sleppir lestrinum sér ramminn ósamræmi milli þess sem hann hefur og þess sem þú skrifar. Í Swift er formið það sama fyrir hvert skref, og hvert skref tilheyrir sínu eigin 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
    }
}

Að ræsa göngin innan úr vistunar-closure er sama mistökið á öðrum stað. Það keyrir áður en prófíllinn hefur verið lesinn aftur, svo ræsikallið sér ástandið sem þú byggðir, ekki ástandið sem var vistað. Vistunar-closure endar með öðru loadFromPreferences, og aðeins sú lokameðferð kallar á startVPNTunnel.

Virkjunarflagginn er hluti af vistuninni

Vistaður prófíll er óvirkur þar til kveikt er á honum. Stilltu isEnabled = true í sömu skrifunum, annars lendir prófíllinn óvirkur á disknum og startVPNTunnel neitar þótt Stillingar sýni stillingar sem líta út fyrir að vera fullkomnar.

Ytri breytingar eru hinn helmingurinn. Ef notandinn breytir einhverju í Stillingum, eða tækið færist milli neta, lestu aftur áður en þú treystir gildunum sem þú heldur enn í minninu. Hluturinn fylgist ekki með þessum breytingum fyrir þig. Úrelt afrit er leiðin sem app skrifar prófíl sem veltir breytingu notandans hljóðlaust til baka. Tvö aðliggjandi svæði valda hljóðlátum vanda á sama augnabliki: on-demand reglur verða að vera fylki af regluhlutum en ekki tómur staðgengill, og disconnectOnSleep á að endurspegla hegðunina sem þú valdir en ekki afritað sjálfgefið gildi.

Aðeins tveir samskiptareglur eru í boði fyrir forrit þriðju aðila

Network Extension gefur forritum IPsec og IKEv2. L2TP og PPTP halda sig inni í kerfinu, svo forrit sem þarf á þeim að halda getur ekki fengið þau, og raunhæfu svörin eru gátt sem styður IKEv2 eða stýrður stillingaprófíll.

Skírteini fylgja sama mynstri. Setjaðu lykilorðið í Keychain og sendu varanlega tilvísun í stað strengsins. Núlltilvísun við vistun þýðir venjulega að uppflettingin hafi keyrt áður en hluturinn var skrifaður, ekki að stjórnandinn sé bilaður.

Bæði eru hönnunarákvarðanir en ekki krókaleiðir. Forrit sem heldur lykilorðinu í eigin stillingum velur leið sem ramminn mælir ekki með, og bilunin sem hún framleiðir er lesin sem vistunarvilla.

Útilokaðu réttindin áður en þú skrifar kóðann upp á nýtt

Þegar loadFromPreferences kallar aldrei til baka er líkleg orsök skortur á Network Extension-hæfni eða veitluprófíll sem ber hana ekki. Sú bilun hangir í stað þess að gefa villu, og þess vegna er virkur kóði endurskrifaður í klukkustundir. Athugaðu réttindin á undirritaðri byggingu sem þú ætlar að senda frá þér, því keyrsla í hermi og keyrsla á tæki geta verið ólík og markið sem skiptir máli er tækið. Opnaðu undirritunarstillingar marksins og staðfestu að Network Extension-hæfnin sé til staðar fyrir nákvæmlega þá byggingu.

Veitluprófíll án réttindanna mistekst á sama hátt á vélbúnaði, á meðan sama bygging getur hlaðist venjulega í herminum. Prófaðu undirritaða skjalasafnið á raunverulegu tæki áður en þú endurskrifar röð kallanna.

Fylgstu með stöðubreytingunum, ekki forsendunum

Fylgstu með NEVPNStatusDidChangeNotification og skráðu manager.connection.status eftir hvert skref. Staða sem yfirgefur aldrei invalid þýðir að prófíllinn var ekki vistaður eða að réttindin vantar. Tenging sem nær connecting og tengist aldrei bendir á tillöguna eða skírteinin, sem er önnur rannsókn með öðrum sönnunargögnum.

Staðfestu að prófíllinn birtist undir Stillingar, Almennt, VPN, og skráðu villuna frá hverju closure. Þessar tvær staðreyndir aðgreina röðunarvillu frá réttindavillu án giskana.

Tengdir greinar