Misimbo miwili ya hitilafu inaeleza mengi ya majaribio ya kwanza ya VPN ya Network Extension kwenye iOS: NEVPNErrorDomain Code=4 na Code=5. Hakuna lipo linalolalamika kutoka kwa seva. Moja linaonekana wakati programu inaandika mipangilio ndani ya kitu ambacho hakijasomwa kamwe kutoka diski, na lingine wakati uandishi wenyewe unashindikana, mara nyingi kwa sababu wasifu unahifadhiwa ukiwa bado umezimwa. Yote mawili hurekebishwa kwa kubadilisha mpangilio wa miito minne, sio kwa kugusa vigezo vya IKEv2.

Pakia kwanza, vinginevyo uhifadhi hauna cha kulinganisha

Msimamizi anashikilia nakala ya wasifu uliohifadhiwa, na kitu unachohariri si nakala hiyo hadi uisome. Ita loadFromPreferences kwanza, hariri ndani ya kishikiliaji chake cha kukamilisha, kisha hifadhi. Ukiruka usomaji, mfumo wa jengo unaona kutolingana kati ya kile kilicho nacho na kile unachoandika. Katika Swift umbo ni sawa kwa kila hatua, na kila hatua ni ya closure yake mwenyewe:

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

Kuanzisha handaki kutoka ndani ya closure ya uhifadhi ni kosa lilelile mahali pengine. Hukimbia kabla wasifu kusomwa tena, kwa hivyo wito wa kuanza unaona hali uliyoijenga na sio hali iliyohifadhiwa. Closure ya uhifadhi inaisha na loadFromPreferences ya pili, na kishikiliaji hicho cha kukamilisha pekee ndicho kinaita startVPNTunnel.

Bendera ya kuwasha ni sehemu ya uhifadhi

Wasifu uliohifadhiwa hautumiki hadi uwashwe. Weka isEnabled = true katika uandishi huo huo, vinginevyo wasifu utafika kwenye diski ukiwa umezimwa na startVPNTunnel utakataa hata kama Mipangilio inaonyesha usanidi unaoonekana kamili.

Uhariri wa nje ni nusu nyingine. Ikiwa mtumiaji anabadilisha kitu kwenye Mipangilio, au kifaa kinasogea kati ya mitandao, soma tena kabla ya kuamini thamani ambazo bado unashikilia kwenye kumbukumbu. Kitu hicho hakiangalii mabadiliko hayo kwa ajili yako. Nakala ya zamani ndiyo njia ambayo programu huandika wasifu unaorudisha kimyakimya uhariri wa mtumiaji. Sehemu mbili zilizo karibu husababisha shida ya kimya wakati huo huo: sheria za on-demand lazima ziwe safu ya vitu vya sheria na sio kishika nafasi tupu, na disconnectOnSleep inapaswa kuakisi tabia uliyochagua na sio chaguo-msingi lililonakiliwa.

Itifaki mbili pekee zinapatikana kwa programu za wahusika wengine

Network Extension huwapa programu IPsec na IKEv2. L2TP na PPTP hubaki ndani ya mfumo, kwa hivyo programu inayohitaji haziwezi kuzipata, na majibu ya kweli ni lango linalotumia IKEv2 au wasifu wa usanidi unaosimamiwa.

Vitambulisho hufuata mtindo huo huo. Weka nenosiri kwenye Keychain na pitisha rejeleo la kudumu badala ya mfuatano. Rejeleo sifuri wakati wa kuhifadhi kwa kawaida humaanisha kuwa utafutaji ulikimbia kabla ya kipengee kuandikwa, sio kwamba msimamizi umevunjika.

Zote mbili ni maamuzi ya usanifu na sio suluhisho za mkato. Programu inayohifadhi nenosiri kwenye mapendeleo yake mwenyewe huchagua njia ambayo mfumo hauishauri, na kushindikana kunakotokea husomwa kama hitilafu ya uhifadhi.

Ondoa haki kabla ya kuandika upya msimbo

Wakati loadFromPreferences hairejei kabisa, sababu inayowezekana ni uwezo wa Network Extension unaokosekana au wasifu wa utoaji ambao hauubeba. Kushindikana huko huning'inia badala ya kutoa hitilafu, na ndiyo sababu msimbo unaofanya kazi huandikwa upya kwa masaa. Angalia haki kwenye build iliyotiwa saini unayokusudia kuwasilisha, kwa sababu kukimbia kwenye kiigaji na kwenye kifaa kunaweza kutofautiana na lengo muhimu ni kifaa. Fungua mipangilio ya utiaji saini wa lengo na uthibitishe kuwa uwezo wa Network Extension upo kwa build hiyo hususa.

Wasifu wa utoaji usio na haki unashindikana vivyo hivyo kwenye maunzi, wakati build hiyo hiyo inaweza kupakiwa kawaida kwenye kiigaji. Jaribu kumbukumbu iliyotiwa saini kwenye kifaa halisi kabla ya kuandika upya mpangilio wa miito.

Angalia mabadiliko ya hali, sio dhana

Angalia NEVPNStatusDidChangeNotification na andika manager.connection.status baada ya kila hatua. Hali ambayo haiondoki kamwe kutoka invalid humaanisha wasifu haukuhifadhiwa au haki haipo. Muunganisho unaofikia connecting na haoungani kamwe unaonyesha pendekezo au vitambulisho, na hilo ni uchunguzi tofauti na ushahidi tofauti.

Thibitisha wasifu unaonekana chini ya Mipangilio, Jumla, VPN, na andika hitilafu kutoka kwa kila closure. Mambo hayo mawili hutenganisha hitilafu ya mpangilio na hitilafu ya ruhusa bila kukisia.

Makala zinazohusiana