Продуктов мениджър иска бутон, който включва корпоративния 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. Няма версия на тази размяна, която да си струва за един превключвател.

Телеметрията за управление е отделен канал: тя съобщава, че профил е инсталиран и дали устройството е съвместимо, което е отчетност, а не повърхност за контрол на приложение. Тествайте потока на реално устройство след всяка актуализация, защото поддържаното поведение живее в операционната система, а тя се движи.

Подобни статии