NEVPNManager ei tallenna? Järjestys on lataa, ota käyttöön, tallenna, yhdistä
Koodi 4 ja koodi 5 tarkoittavat yleensä, että profiilia muokattiin ennen lataamista tai se tallennettiin pois päältä. Korjaa kutsujen järjestys ja tarkista sitten oikeus.
Kaksi virhekoodia selittää suurimman osan ensimmäisistä yrityksistä Network Extension VPN:n kanssa iOS:ssa: NEVPNErrorDomain Code=4 ja Code=5. Kumpikaan ei ole palvelimen valitus. Toinen ilmestyy, kun sovellus kirjoittaa asetuksia objektiin, jota ei koskaan luettu levyltä, ja toinen, kun itse kirjoitus epäonnistuu, useimmiten siksi, että profiili tallennetaan sen ollessa vielä pois päältä. Molemmat korjataan muuttamalla neljän kutsun järjestystä, ei koskemalla IKEv2-parametreihin.
Lataa ensin, muuten tallennuksella ei ole mitään vertailtavaa
Hallinta pitää kopiota tallennetusta profiilista, eikä muokkaamasi objekti ole tuo kopio ennen kuin luet sen. Kutsu ensin loadFromPreferences, muokkaa sen valmistumiskäsittelijän sisällä ja tallenna sitten. Jos ohitat lukemisen, kehys näkee ristiriidan sen välillä, mitä sillä on, ja sen välillä, mitä kirjoitat. Swiftissä muoto on sama joka vaiheessa, ja jokainen vaihe kuuluu omaan sulkeumaansa:
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
}
}
Tunnelin käynnistäminen tallennuksen sulkeuman sisältä on sama virhe toisessa paikassa. Se ajetaan ennen kuin profiili on luettu uudelleen, joten käynnistyskutsu näkee rakentamasi tilan eikä sitä tilaa, joka tallennettiin. Tallennuksen sulkeuma päättyy toiseen loadFromPreferences-kutsuun, ja vain tuo valmistumiskäsittelijä kutsuu startVPNTunnelia.
Käyttöönottolippu on osa tallennusta
Tallennettu profiili on toimintakyvytön, kunnes se kytketään päälle. Aseta isEnabled = true samassa kirjoituksessa, tai profiili päätyy levylle pois päältä ja startVPNTunnel kieltäytyy, vaikka Asetukset näyttävät täydelliseltä vaikuttavan kokoonpanon.
Ulkoiset muokkaukset ovat tämän toinen puoli. Jos käyttäjä muuttaa jotain Asetuksissa tai laite siirtyy verkkojen välillä, lue uudelleen ennen kuin luotat arvoihin, joita vielä pidät muistissa. Objekti ei seuraa näitä muutoksia puolestasi. Vanhentunut kopio on tapa, jolla sovellus kirjoittaa profiilin, joka hiljaa palauttaa käyttäjän muokkauksen. Kaksi vierekkäistä kenttää aiheuttaa hiljaisen ongelman samalla hetkellä: on-demand-sääntöjen on oltava sääntöobjektien taulukko eikä tyhjä paikkamerkki, ja disconnectOnSleepin on heijastettava valitsemaasi käyttäytymistä eikä kopioitua oletusarvoa.
Kolmannen osapuolen sovelluksille on tarjolla vain kaksi protokollaa
Network Extension antaa sovelluksille IPsecin ja IKEv2:n. L2TP ja PPTP pysyvät järjestelmän sisällä, joten sovellus, joka tarvitsee niitä, ei voi saada niitä, ja realistiset vastaukset ovat IKEv2-yhteensopiva yhdyskäytävä tai hallittu kokoonpanoprofiili.
Tunnistetiedot noudattavat samaa kaavaa. Laita salasana Keychainiin ja välitä pysyvä viite merkkijonon sijaan. Nollaviite tallennettaessa tarkoittaa yleensä, että haku ajettiin ennen kohteen kirjoittamista, ei että hallinta on rikki.
Molemmat ovat suunnittelupäätöksiä, eivät kiertoteitä. Sovellus, joka pitää salasanan omissa asetuksissaan, valitsee polun, jota kehys ei suosittele, ja sen tuottama epäonnistuminen luetaan tallennusvirheeksi.
Sulje oikeus pois ennen koodin uudelleenkirjoittamista
Kun loadFromPreferences ei palaa lainkaan, todennäköinen syy on puuttuva Network Extension -ominaisuus tai provisiointiprofiili, joka ei kanna sitä. Tämä epäonnistuminen roikkuu virheen antamisen sijaan, ja siksi toimivaa koodia kirjoitetaan uudelleen tunteja. Tarkista oikeus allekirjoitetusta buildista, jonka aiot toimittaa, koska simulointiajo ja laiteajo voivat erota ja ratkaiseva kohde on laite. Avaa kohteen allekirjoitusasetukset ja vahvista, että Network Extension -ominaisuus on läsnä juuri siinä buildissa.
Provisiointiprofiili ilman oikeutta epäonnistuu laitteistolla samalla tavalla, kun taas sama build voi latautua normaalisti simulaattorissa. Testaa allekirjoitettu arkisto oikealla laitteella ennen kutsujen järjestyksen uudelleenkirjoittamista.
Seuraa tilamuutoksia, älä oletuksia
Tarkkaile NEVPNStatusDidChangeNotificationia ja kirjaa manager.connection.status jokaisen vaiheen jälkeen. Tila, joka ei koskaan poistu invalid-tilasta, tarkoittaa, että profiilia ei tallennettu tai oikeus puuttuu. Yhteys, joka saavuttaa connecting-tilan eikä koskaan yhdistä, viittaa ehdotukseen tai tunnistetietoihin, ja se on toinen tutkinta eri todisteilla.
Vahvista, että profiili näkyy kohdassa Asetukset, Yleiset, VPN, ja kirjaa virhe jokaisesta sulkeumasta. Nämä kaksi seikkaa erottavat järjestysvirheen oikeusvirheestä arvaamatta.