Files
amnezia-client/tools/deeplink/ios-vpn-scheme-testing-for-qa.md
T

13 KiB

Проверка vpn:// на iOS для тестировщиков: Safari, Firefox и другие браузеры

Документ описывает как проверять диплинк вида vpn://… на iPhone/iPad и почему результат может отличаться между Safari и сторонними браузерами (Firefox, Chrome и т.д.). Это **ожидаемое различие платформы и продукта браузера **, а не признак того, что приложение Amnezia «не зарегистрировало» схему.


1. Что мы проверяем

Термин Смысл
Custom URL scheme Нестандартная «ссылка», начинающаяся с vpn:// (аналог tg://).
Обработчик ОС iOS знает, какое приложение должно открыть vpn://, по данным из Info.plist установленного бандла Amnezia (ключ CFBundleURLTypes / схема vpn).
Успешный тест После действия пользователя система предлагает открыть Amnezia или сразу открывает приложение и передаёт туда URI (или эквивалентное поведение, зафиксированное в чеклисте релиза).

Если vpn:// открывается из Safari, регистрация схемы в приложении на устройстве как правило уже корректна. Отсутствие того же поведения в Firefox не отменяет этот вывод.


2. Почему Safari «работает», а Firefox может «не работать»

2.1. Роль Safari

Safari на iOS — системный браузер от Apple. При навигации на URL с нестандартной схемой он опирается на * стандартные механизмы iOS*: зарегистрированные приложения, диалоги подтверждения (если включены), передачу URI в выбранное приложение.

Типичные сценарии, где Safari ведёт себя предсказуемо:

  • вставка vpn://… в адресную строку и переход;
  • тап по кликабельной ссылке vpn://… на странице;
  • открытие ссылки из Заметок, Сообщений, Почты (часто тоже через системный обработчик).

2.2. Роль Firefox (и других сторонних браузеров)

Firefox, Chrome и др. на iOS — это отдельные приложения со своим UI и политиками. Они используют WebKit (требование Apple), но:

  • не обязаны повторять Safari один в один для вставки в омнибокс;
  • могут не вызывать тот же системный путь «открыть зарегистрированное приложение по схеме»;
  • могут интерпретировать vpn:// как поисковый запрос, блокировать переход или показывать другое поведение без диалога «Открыть в приложении».

Итог: разное поведение Safari и Firefox на iOS для vpn:// — нормальная ситуация с точки зрения платформы. Это ограничение/особенность конкретного браузера, а не доказательство отсутствия CFBundleURLTypes в Amnezia.

2.3. Важно для отчётов о дефектах

Наблюдение Как трактовать в баг-трекере
vpn:// открывает Amnezia из Safari Схема на устройстве, скорее всего, зарегистрирована; базовый сценарий iOS пройден.
Тот же URI в Firefox не предлагает приложение Скорее ограничение/политика Firefox (или способ ввода: только вставка в адресную строку). Не дублировать как «Amnezia не регистрирует vpn» без проверки через Safari.
Не работает ни в Safari, ни в других местах Тогда имеет смысл инсталляция/сборка/конфликт (другая сборка, профиль, ограничения MDM и т.д.) — отдельное расследование.

3. Подготовка к тесту

  1. На тестовое устройство установлена тестируемая сборка Amnezia (тот же бандл, что и в релизных критериях).
  2. Приложение хотя бы один раз запускали после установки (чтобы исключить редкие сценарии с неполной установкой).
  3. Под рукой валидный тестовый URI, например из задачи/чеклиста (формат vpn:// + payload). Не публикуйте боевые секреты в открытых отчётах; для регрессии достаточно короткого тестового payload по внутренним правилам команды.

4. Чеклист: Safari (обязательный эталон на iOS)

Выполните по порядку и зафиксируйте результат (да/нет + версия iOS + версия приложения).

4.1. Вставка в адресную строку

  1. Откройте Safari.
  2. Тапните в адресную строку, вставьте полный vpn://…, нажмите Перейти / Go.
  3. Ожидаемо: система или Safari предлагает открыть Amnezia, либо приложение открывается (в зависимости от настроек и версии iOS).

4.2. Кликабельная ссылка на странице

  1. Откройте в Safari страницу, где есть ссылка <a href="vpn://…"> (например, внутренняя HTML-демо или стенд по HTTPS — см. README.md).
  2. Тап по ссылке (жест пользователя).
  3. Ожидаемо: переход в Amnezia или системный запрос на открытие.

4.3. Заметки / Сообщения

  1. Вставьте vpn://… в Заметки как ссылку или текст, который iOS распознаёт как ссылку, либо отправьте себе в * Сообщения*.
  2. Тап по ссылке.
  3. Ожидаемо: открытие Amnezia аналогично политике iOS для custom scheme.

Если Safari-проверка успешна — для истории «регистрация схемы на iOS» считаем успешной в типичном смысле QA.


5. Чеклист: Firefox на iOS (информативный, не эталон)

Цель — зафиксировать фактическое поведение продукта Mozilla, а не «починить» его со стороны Amnezia одним изменением plist.

5.1. Вставка в адресную строку Firefox

  1. Откройте Firefox.
  2. Вставьте vpn://… в адресную строку, подтвердите переход.
  3. Допустимые исходы: открытие Amnezia; отсутствие предложения; поиск; сообщение об ошибке — всё это важно записать (версия Firefox, шаги, скрин/видео).

5.2. Ссылка на странице внутри Firefox

  1. Откройте ту же HTTPS-страницу с демо-ссылкой, что и для Safari.
  2. Тап по vpn:// ссылке.
  3. Сравните с Safari на том же устройстве и той же сборке Amnezia.

5.3. Как оформлять результат в отчёте

Заголовок вроде: «iOS: Firefox не делегирует vpn:// в системное приложение (известное ограничение стороннего браузера); Safari — OK».
Приложите: модель устройства, iOS, версия Firefox, версия Amnezia, точные шаги (вставка vs тап по ссылке).


6. Другие браузеры на iOS (кратко)

По тем же причинам поведение Chrome, Edge, Opera и т.д. может отличаться от Safari. Рекомендация для единообразной регрессии:

  • Эталон: Safari + системные приложения (Заметки, Сообщения по внутренним правилам).
  • Дополнительно: 1–2 популярных сторонних браузера — как информативная матрица, без требования паритета с Safari, если в спецификации продукта не оговорено иное.

7. Частые ловушки (чтобы не завести ложный баг)

  1. Только вставка в омнибокс — у части браузеров это другой кодовый путь, чем тап по <a href="vpn://"> на странице. Всегда указывайте в отчёте оба варианта, если проверяли.
  2. HTTP vs HTTPS для страницы с кнопкой — на десктопе и в некоторых сценариях политики жёстче к HTTPS; на iOS для * прямого* vpn:// это вторично, но для демо-страницы лучше HTTPS (см. README.md).
  3. Копипаст с лишними пробелами/переносами — URI должен быть одной строкой без обрезки.
  4. Другая сборка / TestFlight vs Debug — убедитесь, что на устройстве именно та сборка, по которой ведёте учёт.

8. Продуктовый выход в будущем (не часть минимального теста vpn://)

Если нужно, чтобы ссылки стабильно открывали приложение из любых браузеров и мессенджеров, обычно переходят на * https-ссылки* и Universal Links (или свой лендинг с редиректом/кнопкой). Это отдельный объём (домен, apple-app-site-association, настройки Xcode). Текущий документ описывает только custom scheme vpn:// на iOS.