Àwọn kóòdù àṣìṣe méjì ń ṣàlàyé ọ̀pọ̀lọpọ̀ àkọ́kọ́ ìgbìyànjú fún Network Extension VPN lórí iOS: NEVPNErrorDomain Code=4 àti Code=5. Kò sí ọ̀kan nínú wọn tí ó jẹ́ ẹ̀dùn ọkàn láti ọ̀dọ̀ server. Ọ̀kan máa ń farahàn nígbà tí app ń kọ àwọn ètò sínú ohun tí a kò kà láti disk rí, èkejì sì nígbà tí kíkọ fúnra rẹ̀ kùnà, ní ọ̀pọ̀ ìgbà nítorí pé a ń fi fáìlì pamọ́ nígbà tí ó ṣì wà ní àìṣiṣẹ́. A ń tún àwọn méjèèjì ṣe nípa yíyí ọ̀nà àwọn ìpè mẹ́rin padà, kì í ṣe nípa fíwọ́ àwọn ètò IKEv2.

Gbé e kọ́, bí bẹ́ẹ̀ kọ́ fífi pamọ́ kò ní ohun tí yóò fi wé e

Olùṣàkóso ń di ẹ̀dà fáìlì tí a fi pamọ́ mú, àti ohun tí o ń ṣàtúnṣe kì í ṣe ẹ̀dà yẹn títí tí ìwọ yóò fi kà á. Pe loadFromPreferences kọ́, ṣàtúnṣe nínú olùṣàkóso ìparí rẹ̀, lẹ́yìn náà fi pamọ́. Bí o bá fo kíkà náà, ilana yóò rí àìbáramu láàrin ohun tí ó ní àti ohun tí o ń kọ. Nínú Swift, ìrísí jẹ́ kan náà ní gbogbo ìgbésẹ̀, àti pé ìgbésẹ̀ kọ̀ọ̀kan wà nínú closure tirẹ̀:

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

Bíbẹ̀rẹ̀ tunnel láti inú closure fífi pamọ́ jẹ́ àṣìṣe kan náà ní ibòmíì. Ó ń ṣiṣẹ́ kí a tó tún fáìlì kà, nítorí náà ìpè ìbẹ̀rẹ̀ rí ipò tí o kọ́, kì í ṣe ipò tí a fi pamọ́. Closure fífi pamọ́ parí pẹ̀lú loadFromPreferences kejì, àti pé olùṣàkóso ìparí yẹn nìkan ni ó ń pe startVPNTunnel.

Àmì ìmúṣiṣẹ́ jẹ́ apá kan fífi pamọ́

Fáìlì tí a fi pamọ́ kò ṣiṣẹ́ títí tí a ó fi tan án. Ṣètò isEnabled = true nínú kíkọ kan náà, bí bẹ́ẹ̀ kọ́ fáìlì yóò dé lórí disk ní àìṣiṣẹ́, àti pé startVPNTunnel yóò kọ̀ pẹ̀lú bí Àwọn ètò bá fi àdàpọ̀ tí ó dàbí ẹni pé ó pé hàn.

Àwọn àtúnṣe ita jẹ́ ìdajì kejì. Bí olùlò bá yí nǹkan padà nínú Àwọn ètò, tàbí bí ẹ̀rọ bá ṣí láàrin àwọn nẹ́tíwọ́kì, kà á lẹ́ẹ̀kan sí i kí o tó gbẹ́kẹ̀lé àwọn iye tí o ṣì ń di mú nínú ìrántí. Ohun náà kì í ṣàkíyèsí àwọn ìyípadà yẹn fún ọ. Ẹ̀dà àtijọ́ ni ọ̀nà tí app fi ń kọ fáìlì tí ó ń yí àtúnṣe olùlò padà ní ìdákẹ́jẹ́ẹ́. Àwọn pápá méjì tí ó wà lẹ́gbẹ̀ẹ́ ara wọn ń dá wàhálà ìdákẹ́jẹ́ẹ́ ní àkókò kan náà: àwọn òfin on-demand gbọ́dọ̀ jẹ́ àkójọ àwọn ohun òfin kì í ṣe ààyè òfo, àti pé disconnectOnSleep gbọ́dọ̀ ṣàfihàn ìhùwàsí tí o yàn kì í ṣe àìsí ìpilẹ̀ tí a dà kọ.

Àwọn ètò ìtumọ̀ méjì péré ni ó wà fún àwọn app ẹlẹ́ẹ̀kẹta

Network Extension ń fún àwọn app ní IPsec àti IKEv2. L2TP àti PPTP ń gbé inú ètò náà, nítorí náà app tí ó nílò wọn kò lè ní wọn, àti pé àwọn ìdáhùn tòótọ́ ni ẹnubodè tí ó ń gbà IKEv2 tàbí fáìlì ìṣètò tí a ń ṣàkóso.

Àwọn ẹ̀rí ìdánimọ̀ tẹ̀lé àpẹẹrẹ kan náà. Fi ọ̀rọ̀ ìkọ̀kọ̀ sínú Keychain kí o sì fi ìtọ́kasí tí ó dúró pẹ́ pàṣẹ́ dípò okùn ọ̀rọ̀. Ìtọ́kasí òdo nígbà fífi pamọ́ máa ń túmọ̀ sí pé ìwádìí ṣiṣẹ́ kí a tó kọ ohun náà, kì í ṣe pé olùṣàkóso ti bàjẹ́.

Àwọn méjèèjì jẹ́ ìpinnu àpẹẹrẹ, kì í ṣe ọ̀nà àbáyọ. App tí ó ń pa ọ̀rọ̀ ìkọ̀kọ̀ mọ́ nínú àwọn ààyò tirẹ̀ ń yan ọ̀nà tí ilana kò gbà ní ìyànjú, àti pé ìkùnà tí ó ń dá jẹ́ kí a kà á bí àṣìṣe fífi pamọ́.

Yọ ẹ̀tọ́ kúrò kí o tó tún kóòdù kọ

Nígbà tí loadFromPreferences kò bá pe padà rárá, ìdí tí ó ṣeé ṣe ni àìsí agbára Network Extension tàbí fáìlì ìpèsè tí kò gbé e. Ìkùnà yẹn ń gbé kọ́kọ́rọ́ dípò fífúnni ní àṣìṣe, ìdí nìyẹn tí a fi ń tún kóòdù tí ó ń ṣiṣẹ́ kọ fún wákàtí. Ṣàyẹ̀wò ẹ̀tọ́ lórí build tí a fi ọwọ́ sí tí o fẹ́ fi ránṣẹ́, nítorí pé ìṣeré lórí simulator àti lórí ẹ̀rọ lè yàtọ̀ àti pé ibi-afẹ́ tí ó ṣe pàtàkì ni ẹ̀rọ. Ṣí àwọn ètò ìfọwọ́sí ibi-afẹ́ kí o sì jẹ́rìí pé agbára Network Extension wà fún build gan-an yẹn.

Fáìlì ìpèsè tí kò ní ẹ̀tọ́ ń kùnà ní ọ̀nà kan náà lórí hardware, nígbà tí build kan náà lè gbé jáde lọ́nà deede nínú simulator. Dán àkójọpọ̀ tí a fi ọwọ́ sí wò lórí ẹ̀rọ gidi kí o tó tún ọ̀nà àwọn ìpè kọ.

Wo àwọn ìyípadà ipò, kì í ṣe àwọn àròsọ

Ṣàkíyèsí NEVPNStatusDidChangeNotification kí o sì kọ manager.connection.status lẹ́yìn ìgbésẹ̀ kọ̀ọ̀kan. Ipò tí kò fi invalid sílẹ̀ rárá túmọ̀ sí pé a kò fi fáìlì pamọ́ tàbí pé ẹ̀tọ́ kò sí. Ìsopọ̀ tí ó dé connecting tí kò sì so mọ́ rárá ń tọ́ka sí àbá tàbí àwọn ẹ̀rí ìdánimọ̀, ìyẹn sì jẹ́ ìwádìí mìíràn pẹ̀lú ẹ̀rí mìíràn.

Jẹ́rìí pé fáìlì farahàn lábẹ́ Àwọn ètò, Gbogbogbò, VPN, kí o sì kọ àṣìṣe láti closure kọ̀ọ̀kan. Àwọn òtítọ́ méjì yẹn ń yà àṣìṣe ọ̀nà kúrò nínú àṣìṣe àṣẹ láìsí àròsọ.

Àwọn àpilẹ̀kọ tó jọra