Кіраўнік прадукта просіць кнопку, якая ўключае карпаратыўны VPN, і запыт гучыць банальна. На iOS гэта не дробная функцыя; яна знаходзіцца па-за публічным кантрактам, і любы абыход ці не праходзіць разгляд, ці ламаецца ў наступным рэлізе. Прайдзіце з запытам праз тое, што платформа фактычна дазваляе, і дызайн амаль напіша сябе сам. Праграма можа валодаць канфігурацыяй VPN і запускаць яе. Праграма не можа дасягнуць сістэмнага перамыкача, не можа прачытаць стан профілю, які яна не стварала, і не можа ўтрымліваць карыстальніка ў сетцы супраць яго волі.

Пачніце з трох рэчаў, якія мае на ўвазе карыстальнік

Аддзяліце значэнні, перш чым аддзяляць API. Часам карыстальнік хоча, каб тунель вашай праграмы быў падключаны, часам — каб перамыкач у Наладах быў уключаны для профілю, які ўсталяваў нехта іншы, а часам — каб тэлефон не мог выходзіць у сетку без тунеля. Гэта адпавядае тром розным механізмам, і толькі першы адкрыты для звычайнай праграмы.

Другое значэнне і спараджае пытанні на Stack Overflow, і падтрыманага адказу на яго няма. Перамыкач у Наладах належыць карыстальніку, а на кіраваных прыладах — профілю. Ніводнае публічнае API не пералічвае канфігурацыі VPN, не паведамляе, ці падняты сістэмны тунель, і не пераключае яго.

Што праграма сапраўды можа стварыць

NetworkExtension дае праграме ўласную канфігурацыю праз NEVPNManager. З правам Personal VPN і згодай карыстальніка праграма захоўвае канфігурацыю, якая з’яўляецца ў Наладах пад яе імем, і можа запускаць або спыняць гэта адзінае злучэнне. Гэта рэальная магчымасць, якую можна прайсці разгляд, і гэта таксама ўвесь аб’ём: менеджар чытае і запісвае толькі тое, што стварыў.

Права не даецца аўтаматычна. Вы запытваеце яго ў Apple і абгрунтоўваеце, навошта праграме наогул тунель, а кліент, чыя адзіная мэта — уключыць чужы профіль, добрага адказу не мае. Пастаўшчыкі пакетных тунеляў ідуць па тым жа правіле з іншым класам: NETunnelProviderManager валодае канфігурацыямі на аснове пастаўшчыка, якія праграма ўсталявала сама. Ні адзін з шляхоў не дасягае профілю, які даставіў MDM.

Згода дзейнічае і ў момант захавання. Запіс канфігурацыі запытвае ў карыстальніка пацверджанне, і гэта не тое, што праграма можа замаўчаць дзеля зручнасці.

Чытанне стану ўпіраецца ў той самы мур

Статус выглядае прыязней за кіраванне і гэтак жа зачынены. NEVPNStatus паведамляе несапраўдны, адключаны, падключэнне, падключаны, пацвярджэнне або адключэнне для ўласнай канфігурацыі праграмы, і пры кожнай змене з’яўляецца апавяшчэнне. Ён нічога не кажа пра тунель, усталяваны профілем кіравання, а гэта менавіта той стан, які хоча бачыць служба падтрымкі.

Маніторынг сеткавага шляху і змены інтэрфейса прапануюць як замену на аглядах дызайну. Яны апісваюць шлях, які праходзіць трафік праграмы, а ён змяняецца па прычынах, не звязаных са станам VPN, і выкарыстанне іх як індыкатара VPN дае інтэрфейс, які хлусіць у абодва бакі.

On Demand і Always On — сапраўдныя рычагі

Падтрыманыя рычагі жывуць у профілі, а не ў праграме. Правілы On Demand кажуць сістэме, калі падключацца: упарадкаваны спіс умоў з дзеяннямі, які ацэньвае аперацыйная сістэма, а не ваш код. Правіла, якое падключаецца на любым інтэрфейсе, стварае адчуванне пастаяннага злучэння, не даючы праграме ніякага кантролю.

Always On VPN — гэта механізм прымусу, і ён прывязаны да нагляду. На паднаглядной прыладзе MDM усталёўвае профіль, які трымае тунель узнятым; на асабістым тэлефоне без нагляду тыя ж ключы не даюць той жа паводзіны. Гэтая асіметрыя наўмысная, і ніякая камбінацыя ключоў карыснай нагрузкі яе не знішчае. Калі патрабаванне сапраўды ў тым, што VPN павінен быць уключаны, патрабаванне насамрэч у тым, што прыладай трэба кіраваць.

Паміж імі стаіць больш слабы брат: правіла, якое перападключаецца пасля адключэння карыстальнікам. Яно падключаецца пры наступнай ацэнцы правіла, а гэта не тое ж, што імгненна, і карыстальнік, які адключыўся наўмысна, заўважыць розніцу. Праектуйце інтэрфейс вакол гэтай шчыліны, а не абяцайце замак.

Адпраўляйце падтрыманы шлях

Чатыры пытанні вырашаюць механізм да таго, як з’явіцца код: каму належыць прылада, ці пад наглядам яна, які кліент завяршае тунель і адкуль бярэцца профіль. Калі хоць адно з гэтага невядома, запыт на функцыю не гатовы да ацэнкі.

Прыватнае API, якое торкае сістэмны VPN, пройдзе дэма і праваліць разгляд, а калі яго адправяць іншым шляхам, ён зламаецца ў наступным рэлізе iOS. Няма варыянту гэтага абмену, які варты перамыкача.

Тэлеметрыя кіравання — асобны канал: яна паведамляе, што профіль усталяваны і ці адпавядае прылада, а гэта справаздачнасць, а не паверхня кіравання для кожнай праграмы. Тэстуйце паток на рэальнай прыладзе пасля кожнага абнаўлення, бо падтрыманыя паводзіны жывуць у АС, а АС рухаецца.

Падобныя артыкулы