Какие способы запуска приложения на iOS существуют кроме иконки и поиска, например через панель уведомлений или диплинки?
Что проверяют
Видите ли вы все точки входа и понимаете ли, что каждая даёт отдельный набор тест-кейсов: из убитого состояния, из фона, без авторизации. Следом обычно спрашивают, чем Universal Link отличается от URL-схемы и как проверить пуш на симуляторе.
Как отвечать
Перечислите точки входа:
- пуш-уведомления: тап по удалённому или локальному уведомлению открывает приложение и ведёт на экран из payload. Отдельно проверяют тихие пуши с
content-available: они будят приложение в фоне без интерфейса; - Universal Links: обычные
https-ссылки, которые открывают приложение, если оно установлено, и сайт, если нет. Работают через файлapple-app-site-associationна домене и Associated Domains в приложении; - URL-схемы:
myapp://order/42. Работают только при установленном приложении, и схему может занять чужое приложение; - виджеты и Live Activities: тап ведёт в конкретный экран;
- быстрые действия: меню по долгому нажатию на иконку;
- Siri, Команды, App Intents: запуск голосом, из автоматизаций, с кнопки действия на новых iPhone;
- QR-код в камере, NFC-метка, App Clip: чаще всего внутри те же Universal Links;
- открытие файла: «Открыть в» из «Файлов» или почты, если приложение регистрирует типы документов.
Главная часть ответа это матрица состояний. Каждый вход проверяют при убитом приложении (холодный старт), свёрнутом и открытом, с авторизацией и без, с корректными и битыми параметрами. Холодный и тёплый старт обрабатываются в коде разными методами, поэтому баги часто живут только в одном из режимов.
Инструменты: xcrun simctl openurl booted <ссылка> для ссылок, xcrun simctl push booted <bundle id> payload.apns для пушей.
Где спотыкаются
Проверяют диплинк только при открытом приложении. Из убитого состояния он открывает главный экран вместо нужного, и это самый частый баг.
Вбивают Universal Link в адресную строку Safari и заводят баг. Так приложение не открывается намеренно, ссылку нужно тапать из заметок, сообщений или другой страницы.
Не проверяют ссылку для неавторизованного пользователя и на удалённый контент. Правильное поведение: вход с возвратом на целевой экран и понятная заглушка, а не падение.