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. Подготовка к тесту
- На тестовое устройство установлена тестируемая сборка Amnezia (тот же бандл, что и в релизных критериях).
- Приложение хотя бы один раз запускали после установки (чтобы исключить редкие сценарии с неполной установкой).
- Под рукой валидный тестовый URI, например из задачи/чеклиста (формат
vpn://+ payload). Не публикуйте боевые секреты в открытых отчётах; для регрессии достаточно короткого тестового payload по внутренним правилам команды.
4. Чеклист: Safari (обязательный эталон на iOS)
Выполните по порядку и зафиксируйте результат (да/нет + версия iOS + версия приложения).
4.1. Вставка в адресную строку
- Откройте Safari.
- Тапните в адресную строку, вставьте полный
vpn://…, нажмите Перейти / Go. - Ожидаемо: система или Safari предлагает открыть Amnezia, либо приложение открывается (в зависимости от настроек и версии iOS).
4.2. Кликабельная ссылка на странице
- Откройте в Safari страницу, где есть ссылка
<a href="vpn://…">(например, внутренняя HTML-демо или стенд по HTTPS — см. README.md). - Тап по ссылке (жест пользователя).
- Ожидаемо: переход в Amnezia или системный запрос на открытие.
4.3. Заметки / Сообщения
- Вставьте
vpn://…в Заметки как ссылку или текст, который iOS распознаёт как ссылку, либо отправьте себе в * Сообщения*. - Тап по ссылке.
- Ожидаемо: открытие Amnezia аналогично политике iOS для custom scheme.
Если Safari-проверка успешна — для истории «регистрация схемы на iOS» считаем успешной в типичном смысле QA.
5. Чеклист: Firefox на iOS (информативный, не эталон)
Цель — зафиксировать фактическое поведение продукта Mozilla, а не «починить» его со стороны Amnezia одним изменением plist.
5.1. Вставка в адресную строку Firefox
- Откройте Firefox.
- Вставьте
vpn://…в адресную строку, подтвердите переход. - Допустимые исходы: открытие Amnezia; отсутствие предложения; поиск; сообщение об ошибке — всё это важно записать (версия Firefox, шаги, скрин/видео).
5.2. Ссылка на странице внутри Firefox
- Откройте ту же HTTPS-страницу с демо-ссылкой, что и для Safari.
- Тап по
vpn://ссылке. - Сравните с Safari на том же устройстве и той же сборке Amnezia.
5.3. Как оформлять результат в отчёте
Заголовок вроде: «iOS: Firefox не делегирует vpn:// в системное приложение (известное ограничение стороннего
браузера); Safari — OK».
Приложите: модель устройства, iOS, версия Firefox, версия Amnezia, точные шаги (вставка vs тап по ссылке).
6. Другие браузеры на iOS (кратко)
По тем же причинам поведение Chrome, Edge, Opera и т.д. может отличаться от Safari. Рекомендация для единообразной регрессии:
- Эталон: Safari + системные приложения (Заметки, Сообщения по внутренним правилам).
- Дополнительно: 1–2 популярных сторонних браузера — как информативная матрица, без требования паритета с Safari, если в спецификации продукта не оговорено иное.
7. Частые ловушки (чтобы не завести ложный баг)
- Только вставка в омнибокс — у части браузеров это другой кодовый путь, чем тап по
<a href="vpn://">на странице. Всегда указывайте в отчёте оба варианта, если проверяли. - HTTP vs HTTPS для страницы с кнопкой — на десктопе и в некоторых сценариях политики жёстче к HTTPS; на iOS для *
прямого*
vpn://это вторично, но для демо-страницы лучше HTTPS (см. README.md). - Копипаст с лишними пробелами/переносами — URI должен быть одной строкой без обрезки.
- Другая сборка / TestFlight vs Debug — убедитесь, что на устройстве именно та сборка, по которой ведёте учёт.
8. Продуктовый выход в будущем (не часть минимального теста vpn://)
Если нужно, чтобы ссылки стабильно открывали приложение из любых браузеров и мессенджеров, обычно переходят на *
https-ссылки* и Universal Links (или свой лендинг с редиректом/кнопкой). Это отдельный объём (домен,
apple-app-site-association, настройки Xcode). Текущий документ описывает только custom scheme vpn:// на iOS.