Управление и переключение нескольких NEPacketTunnelProvider - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть приложение iOS (назовем это «APP A»), которое правильно устанавливает и использует профиль VPN с NEPacketTunnelProvider. Я вижу этот профиль в настройках («ПРОФИЛЬ А»), и он корректно используется каждый раз, когда запрашивается сеть, потому что я настроил его для этого.

Этот VPN должен всегда работать, в соответствии с требованиями компании. Если я отключаю его в настройках, он автоматически перестраивается из-за этого правила.

let connectRule = NEOnDemandRuleConnect()
manager.onDemandRules = [connectRule]
manager.isOnDemandEnabled = true  

У меня есть другое приложение («APP B») в той же группе приложений (мы управляем ими обоими). APP B имеет свой собственный профиль VPN с NEPacketTunnelProvider («PROFILE B»), и я вижу его в настройках.

Этот VPN-канал PROFILE B предназначен только для использования на переднем плане, так как он запускается при запуске APP B и закрывается, когда мы выключить (есть несколько сторожевых псов и др. c). Это сделано специально, и это нормально, что он отменяет PROFILE A только при использовании APP B.

Когда у меня активен PROFILE A, все работает хорошо. Он управляет всеми запросами и возобновляет работу, если я отключаю его в настройках. Когда я запускаю приложение B, PROFILE B правильно выбран, активирован и используется. Но когда я возвращаюсь домой / переключаюсь из приложения B, ПРОФИЛЬ B деактивируется правильно, но профиль A никогда не активируется автоматически. Похоже, что последний - тот, у которого ✓ в настройках - теперь имеет приоритет; в данном случае это ПРОФИЛЬ В. Если я вручную включу ПРОФИЛЬ А. в настройках, это, конечно, сработает.

Можно ли как-нибудь go вернуться в ПРОФИЛЬ А после закрытия ПРИЛОЖЕНИЯ В? Я думал, что присутствие в одной группе приложений может помочь, но я не могу найти способ сделать это.

Я мог бы попытаться переместить оба профиля в APP B, который затем будет управлять переключением, но Я не уверен, что это может быть решением. Кроме того, я бы предпочел, чтобы в APP B не было еще большего количества материалов, которые являются критически важными и имеют много дел (безопасность и т. Д. c.)

. Как я могу управлять переходом в лучший способ?

Есть ли какой-нибудь способ, позволяющий приложению программно переключаться на профиль другого приложения (той же группы)?

PS: я также думал об использовании фоновых режимов для проверки статус (например, Background App Refre sh или новые BackgroundTasks), но я думаю, что они не имеют точной синхронизации, поэтому у меня будет время, когда VPN не будет активен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...