Kwa nini programu yako ya VPN ya iOS inaonyesha imekatika wakati handaki linafanya kazi
Programu yako ya iOS inadhibiti handaki lakini haimiliki, na hali ya msimamizi iko kwenye akiba. Pakia mapendeleo kwanza, kisha soma hali na vihesabu vya kiolesura.
Programu yako inasema imekatika, upau wa menyu unasema imeunganishwa, na trafiki inatiririka waziwazi. Pengo hilo si hali ya mbio ambayo unairekebisha kwa jaribio lingine: programu na handaki ni michakato tofauti, na kitu ambacho msimbo wako unasoma ni mwonekano uliohifadhiwa kwenye akiba wa usanidi ambao mfumo unahifadhi. Uso wa Personal VPN wa Apple ni API ya udhibiti, si njia ya data, na mengi ya tabia yake ya ajabu yanatokana na ukweli huo mmoja. Hivi ndivyo kinachotokea kweli kwenye kila wito.
Kitu cha msimamizi ni mwonekano kwenye akiba, si handaki
NETunnelProviderManager hujazwa kutoka hazina ya mapendeleo inayomilikiwa na mfumo, kwa hivyo sifa zake hazimaanishi chochote hadi loadFromPreferences ikamilike. Ukisoma connection.status kabla ya hapo utapata thamani ya chaguo-msingi, na ndiyo sababu uboreshaji wa kwanza wa hali baada ya kuwasha upya huripoti imekatika wakati handaki linafanya kazi. Pakia kwanza, kisha soma hali na usanidi wa itifaki kutoka kwa kishikilia kikamilishaji kimoja. Fuatilia mabadiliko ya baadaye kupitia NEVPNStatusDidChange badala ya kuuliza-uliza, na angalia kwamba arifa pia huwaka kwa miunganisho iliyoanzishwa na On Demand, ambapo hakuna wito wa programu unaoweza kurudisha chochote. Ndivyo ilivyo pia kwa mipangilio ya itifaki: husomwa kutoka kwa usanidi uliopakiwa, si kutoka kwa kile programu ilichopitisha.
Handaki lenyewe linaishi katika mchakato wa mtoa huduma wa Network Extension, kwa hivyo programu inaweza kupoteza hali yake bila kupoteza muunganisho. Kila kitu kiolesura kinachoonyesha lazima kijengwe upya kutoka kwa msimamizi, si kukumbukwa kutoka kipindi kilichopita.
Mpangilio wa kuanza: hifadhi, pakia, kisha anza
Muunganisho unaotegemea mtoa huduma unahitaji hatua tatu kwa mpangilio. Andika usanidi wa mtoa huduma na uite saveToPreferences, pakia msimamizi ili usanidi uliohifadhiwa uwe ndio ulio mkononi mwako, kisha anza kupitia NETunnelProviderSession.startVPNTunnel(). Ukiruka uhifadhi, uanzishaji hauna cha kuanzisha; ukipakia kabla ya uhifadhi, msimamizi bado anaakisi usanidi wa zamani.
Thamani ya boolean inayorudishwa na startVPNTunnel inasema tu kwamba ombi lilikubaliwa. Hitilafu za kiwango cha mtoa huduma huja baadaye kama mabadiliko ya hali kwenda imekatika, ambayo unaiona kupitia arifa NEVPNStatusDidChange, na kishikilia arifa lazima kisome tena connection.status baada ya loadFromPreferences kwa sababu thamani iliyo kwenye akiba inaweza kuwa ya zamani bado. Hitilafu za kiwango cha ombi hurudi mara moja kutoka kwa umbo la wito linalotupa kasoro, au kupitia kigezo cha pato la hitilafu cha startVPNTunnelAndReturnError:. Msimbo unaochukulia thamani inayorudishwa kama matokeo huripoti muunganisho ambao haukuwahi kuanzishwa. Hitilafu nyingine ya kimya ni kitambulisho cha kifurushi cha mtoa huduma ambacho hakilingani na kiendelezi kilichosakinishwa: ombi hukataliwa, na hakuna chochote kwenye ujumbe kinachoelekeza kwenye kitambulisho. Ikiwa kitambulisho si sahihi, ombi kwa kawaida hushindwa mara moja, kabla ya mstari wowote wa kumbukumbu wa mtoa huduma kuonekana.
Kupakia upya mapendeleo baada ya kuanza ndiko kunakofanya skrini za hali ziwe sahihi. Msimamizi hakusukumi usanidi mpya wakati mfumo unaubadilisha.
Nyenzo za uaminifu huja kupitia wasifu, kamwe hazitoki kwa msimbo wa programu
Programu haina njia inayotumika ya kuongeza cheti cha mzizi kwenye hazina ya uaminifu ya iOS, kwa hivyo usanidi wa Personal VPN unaweza kurejelea nyenzo ambazo kifaa tayari kinaziamini tu: mnyororo ulioanzishwa na wasifu uliosakinishwa, na usimamizi wa kifaa, au na CA ambayo mfumo unaamini kwa sababu nyingine. Programu inayotengeneza CA yake mwenyewe kwenye uzinduzi wa kwanza na kutarajia mfumo kuikubali itashindwa uthibitishaji ndani ya mtoa huduma, ambapo kiolesura cha programu hakiwezi kuona sababu.
Chukulia mpaka huo kama kizuizi cha ubunifu kilivyo, na wasilisha nanga ya uaminifu pamoja na wasifu wa uandikishaji. Weka uthibitishaji wa VPN kando na uamuzi wa uaminifu, kwa sababu hushindwa mahali tofauti na husuluhishwa na watu tofauti.
Vihesabu hutoka kwenye kiolesura, si kwenye API ya VPN
Msimamizi huweka wazi hali na usanidi, na hakuna kinachohesabu baiti kwa kila handaki. Ikiwa unahitaji takwimu za matumizi, ita getifaddrs() na soma if_data kwa kiolesura husika: en0 kwa Wi-Fi, violesura vya pdp_ip kwa simu, na kifaa cha utun kwa handaki lenyewe. Vihesabu vya utun vinaelezea trafiki ya ndani na vinajumuisha gharama ya ziada ya itifaki.
Takwimu hizi ni makadirio, si uhasibu kwa kila programu, na hurejeshwa upya kiolesura kinapoundwa upya. Zipe lebo hivyo kwenye kiolesura, la sivyo mtu atazitumia kumtoza mteja bili. Ikiwa unahitaji takwimu kwa kila programu, unahitaji utaratibu tofauti kabisa, si usomaji bora wa sehemu hizi.
Usafishaji uko kwenye stopVPNTunnel, si kwenye kumaliza
applicationWillTerminate inakupa sekunde chache kabla mfumo uweze kuua mchakato, na hiyo si mahali pa kuaminika pa kuvunja muunganisho. Tuma kusimamisha kwa stopVPNTunnel() au shughulikia kwenye callback ya kusimamisha ya mtoa huduma, na uhifadhi kitambulisho cha msimamizi au usanidi ulioanza nao, ili kusimamisha kulenge muunganisho huo badala ya kila usanidi kwenye kifaa.
Hifadhi kitambulisho hicho kando ya wasifu kinaohusika, kwa sababu kitu cha msimamizi hakirekodi usanidi ambao mtumiaji alichagua. Na kumbuka kwamba muunganisho unaoinuliwa na On Demand hauna wito wowote wa programu nyuma yake, kwa hivyo skrini ya hali bado inapaswa kupakia mapendeleo kabla ya kuchora chochote.