O nílò ojú-ìwé kan tí yóò hùwà yàtọ̀ nígbà tí ọ̀nà-ìsọlẹ̀ ń ṣiṣẹ́, kò sì sí ìpè tí yóò sọ fún ọ. Èyí ni ààlà ìgbéjáde: lórí macOS kò sí ètò gbangba tí ń sọ bóyá VPN àìdúró kan so mọ́, àti lórí iOS ipò jẹ́ ti àpù tí ó fi ìṣètò sórí ẹ̀rọ. Àwọn ìwádìí ní ìsàlẹ̀ ń lọ láti ààlà yẹn dé nnkan tí o lè gbé jáde, àti pé ọ̀kọ̀ọ̀kan wọn lè parí wíwá ní kùtùkùtù.

Ìwádìí 1: ṣé a lè dáhùn ìbéèrè náà rárá?

Sandbox ń yanjú ìbéèrè náà kí API kankan tó ṣe bẹ́ẹ̀. Ìlànà ẹnìkẹta kò lè ka àfikún olùtà mìíràn, kò sì lè ka ìṣètò àfikún yẹn pẹ̀lú, nítorí náà kò sí nnkan tí a ti gbà láàyè láti béèrè lọ́wọ́.

Gbogbo ọ̀nà àyípá ń kọlu odi kan náà. Àwọn àkójọ interface, scutil --nc list àti kíkà ìṣètò ẹ̀rọ tààrà yálà ń béèrè àwọn àṣẹ tí sandbox ń dá dúró tàbí ń gbára lé ìhùwàsí tí Apple kò ṣe ìlérí rẹ̀ rí. Bí ètò náà bá nílò ọ̀kan nínú ìwọ̀nyí, ìṣòro ni ètò náà. Ẹ̀yà tí a kọ́ sórí àlàyé tí a kò kọ sílẹ̀ jẹ́ tikẹ́ẹ̀tì ìtìlẹ́yìn pẹ̀lú ọjọ́ ìfilọ́lẹ̀.

Ìwádìí 2: ṣé àpù rẹ ń ṣàkóso ọ̀nà-ìsọlẹ̀ fúnra rẹ̀?

Bí ó bá ṣe bẹ́ẹ̀, o ní ìdáhùn tí a gbà láàyè fún ìṣètò rẹ fúnra rẹ. Gbé àwọn àṣàyàn wọlé, ṣàkóso àṣìṣe náà, lẹ́yìn náà ka ipò náà kí o sì forúkọ sílẹ̀ fún àwọn ìyípadà dípò ṣíṣe ìwádìí lọ́ọ̀lọ́ọ̀.

vpnManager.loadFromPreferences { error in
    // handle a load failure before reading status
}

NotificationCenter.default.addObserver(
    forName: .NEVPNStatusDidChange,
    object: nil,
    queue: nil
) { note in
    let status = (note.object as? NEVPNConnection)?.status
}

Jẹ́ pérépe nípa ohun tí èyí ń dá padà: ipò ọ̀nà-ìsọlẹ̀ tí o fi sórí ẹ̀rọ. Olùlò tí ń lo ẹ̀rọ ìbánisọ̀rọ̀ mìíràn yóò hàn bí ẹni tí a ti gé asopọ́, àti pé ìyẹn kì í ṣe àṣìṣe nínú kóòdù rẹ. Pinnu èwo nínú àwọn ìbéèrè méjì yìí ni ẹ̀yà rẹ ń béèrè gan-an kí o tó kọ́ lé ìdáhùn náà lórí.

Ìwádìí 3: kí ni ìdánwò kan yóò sọ fún ọ gan-an?

Ọ̀nà tí a ṣe àdàkọ rẹ̀ káàkiri ń béèrè lọ́wọ́ ìwé-ìtumọ̀ proxy ẹ̀rọ fún àwọn àkọsílẹ̀ tí ó ní ààlà, ó sì ń ka àwọn kọ́kọ́rọ́, tí wọ́n wá jẹ́ orúkọ interface lásán:

let settings = CFNetworkCopySystemProxySettings()?.takeRetainedValue() as NSDictionary?
let scoped = settings?["__SCOPED__"] as? [String: Any]
let names = scoped?.keys ?? []

Kọ́kọ́rọ́ tí ó bẹ̀rẹ̀ pẹ̀lú tap, tun, ppp, ipsec tàbí utun ń fi hàn pé interface tí ó ní ààlà ọ̀nà-ìsọlẹ̀ wà. Bíbi orúkọ kíkún kò ní ṣiṣẹ́ lẹ́sẹ̀kẹsẹ̀, nítorí iOS 12 wá pẹ̀lú utun1 àti utun2 àti àwọn profáìlì kan farahàn bí ipsec4, ppp0 tàbí utun0. Fi àwọn ìbẹ̀rẹ̀ wéwé.

Bí ó ti rí bẹ́ẹ̀, orúkọ kò dámọ̀ olówó kankan. Àwọn ẹ̀yà ẹ̀rọ àti àfikún àwọn olùtà mìíràn tún ń dá àwọn interface utun, àti pé ọ̀kan lè wà láìgbé nnkan kankan nínú ìrìnàjò rẹ. Kà á gẹ́gẹ́ bí àmì pé nnkan tó dà bí ọ̀nà-ìsọlẹ̀ wà nítòsí, kì í ṣe ju bẹ́ẹ̀ lọ. Ìdánilójú èké níbí kò wọ́n bí o bá ń dí ẹ̀yà kan ṣoṣo, ó sì wọ́n bí o bá ń dí ojú-ìwé ìwọlé.

Ìwádìí 4: ṣé o lè dán ibi tí a ń lọ wò dípò?

Bí àpù náà kò bá nílò ju kíkọ́ bóyá iṣẹ́ inú kan lè dé, dán iṣẹ́ yẹn wò. Ìwádìí kúkúrú pẹ̀lú àkókò ìparí ń dáhùn ìbéèrè tí ẹ̀yà náà gbára lé gan-an, ó sì ń ṣiṣẹ́ nígbà tí olùlò bá yí ẹ̀rọ ìbánisọ̀rọ̀ padà tàbí ọ̀nà-ìsọlẹ̀ bá yí ìrísí padà.

Ìdéwọ̀ ni àkíyèsí nípa ọ̀nà rẹ. Orúkọ interface jẹ́ ìparí èrò nípa nnkan tí ó wà lẹ́gbẹ̀ẹ́ ọ̀nà rẹ, ìdí ni ìdánwò fi ń dá ariyanjiyan nínú àwọn ìròyìn àṣìṣe tí ìwádìí sì ń dá ẹ̀rí. Bí ìwádìí bá kùnà nígbà tí olùlò ń tẹnumọ́ pé VPN wà ní ṣíṣí, ìwọ ní ọ̀nà pàtó láti ṣàtúnṣe: yíyanjú orúkọ, ipa-ọ̀nà tàbí àṣẹ iṣẹ́.

Ìwádìí 5: ṣé pẹpẹ lè fi ohun tí o nílò múlẹ̀?

Nígbà tí ohun tí a nílò bá jẹ́ ìdánilójú pé kò sí nnkan tí yóò bó kúrò nínú ọ̀nà-ìsọlẹ̀, profáìlì ni ibi tí ó yẹ, kì í ṣe olùwádìí. Pípa includeAllNetworks lórí nínú ìṣètò ọ̀nà-ìsọlẹ̀ kíkún lórí iOS 14 tàbí tí ó tẹ̀le ń yí ìhùwàsí pẹpẹ padà dípò bíbéèrè lọ́wọ́ àpù rẹ láti ṣe àfikún èrò. A kọ àmì náà sílẹ̀ nínú ìtọ́kasí NEVPNProtocol.

Ìyẹn jẹ́ irú ìdáhùn mìíràn: fífipá múlẹ̀ dípò àkíyèsí. Ó tún kan àwọn profáìlì tí ìwọ ń ṣàkóso nìkan, nítorí náà kò ràn àpù oníbàárà lọ́wọ́ tí ń wo ọ̀nà-ìsọlẹ̀ ẹlòmíràn.

Ìwádìí 6: jẹ́ kí ìkùnà jẹ́ àìléwu àti àríṣe

Pa agbára tí ó nílò ọ̀nà-ìsọlẹ̀ nìkan, kí o sì fi ìyókù àpù náà sílẹ̀ bí nnkan tí a lè lò. Olùwádìí tí ń fi gbogbo interface pa mọ́ nígbàkigbà tí kò bá dá a lójú ń dá ìdádúró fún ẹnikẹ́ni tí ọ̀nà-ìsọlẹ̀ rẹ̀ ń lo orúkọ tí ìwọ kò retí rí. Padà sí ìhùwàsí àìdánilójú: àwọn ẹ̀yà inú ń ṣiṣẹ́, a sì pa ìpè jíjìnnà tí ó nílò ọ̀nà-ìsọlẹ̀ gan-an nìkan. Ìyẹn jẹ́ ìpinnu ọjà, ó sì yẹ kí a kọ ọ́ sí ẹ̀gbẹ́ ìdánwò náà.

Ṣàkọsílẹ̀ ohun tí o kíyèsí: orúkọ interface, ẹ̀dà pẹpẹ àti èsì ìwádìí kan. Ìyẹn yí ìròyìn tó kàn padà láti ariyanjiyan sí ìwádìí. Lẹ́yìn náà gbé ìkéde tí a gbà láàyè ga níbikíbi tí o bá ní ọ̀kan, nítorí ìṣètò tí a ń ṣàkóso lè gbé èrò náà lọ́nà tààrà kí ó sì mú ọ̀pọ̀lọpọ̀ ìdí láti yẹ orúkọ wò kúrò.

Bí àwọn ìwádìí 1 sí 5 bá fi ọ́ sílẹ̀ láìsí ìdáhùn tí a gbà láàyè, gbé ìwádìí náà jáde kí o sì fi àmì sí èsì náà pẹ̀lú òtítọ́. Àmì ìsapá tó dára jùlọ tí a kọ sílẹ̀ jẹ́ ìpinnu ọjà tó dára ju API àdáni tí yóò fọ́ ní ìgbéjáde tó kàn lọ.

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