Поле формы заполнено наполовину: после раскрытия устройства VoiceOver возвращает фокус в начало, а введённые данные и кнопка подтверждения больше не находятся в ожидаемом контексте.
Быстрое решение — не перебирать все сочетания функций и состояний, а сначала проверить общие ключевые сценарии на iPhone 18 Pro, затем добавить на iPhone Duo раскрытие, складывание, смену экрана, непрерывность фокуса и восстановление состояния. Критические платежи, вход, идентификацию и формы нужно принимать на реальном устройстве вручную.
Эта схема подходит разработчикам iOS, руководителям по доступности, QA-командам и специалистам, отвечающим за выпуск корпоративных приложений. Универсальная команда получит общую минимальную базу для двух моделей, а финансовая, медицинская или государственная организация сможет добавить собственные критические операции и аудиторские доказательства.
Последнее обновление: 17 сентября 2026 года. Факты и методика сверены с материалами Apple Developer для iPhone Duo, документацией по тестированию доступности приложений и рекомендациями по доступному интерфейсу. Поведение отдельных вспомогательных технологий на разных состояниях iPhone Duo всё равно необходимо повторно проверить после появления соответствующего SDK, симулятора и доступного реального устройства.
Приёмка начинается не с количества экранов, а с неудачных пользовательских задач
Главная ошибка двойной регрессии — считать приложение доступным только потому, что оно не завершилось аварийно и статический сканер не нашёл очевидных нарушений. Пользователь может потерять введённый адрес, не понять, где находится фокус, или не суметь активировать кнопку через Voice Control, хотя технически экран продолжает работать.
Мы сначала выбираем три задачи, которые нельзя потерять или прервать:
- вход с ошибкой и повторной отправкой формы;
- оформление покупки или подтверждение операции;
- редактирование данных либо воспроизведение медиаконтента.
Затем для каждой задачи фиксируем начальное состояние, действие пользователя, ожидаемое место фокуса и данные, которые должны сохраниться после изменения экрана. На iPhone 18 Pro проверяется общий сценарий. На iPhone Duo к нему добавляются переходы между внешним и внутренним экраном, изменение размера доступной области и возврат к ранее начатому действию.
Такой порядок не означает, что остальные страницы можно игнорировать. Он означает, что при ограниченном времени команда сначала защищает операции с самым высоким ущербом от отказа, а не тратит весь тестовый слот на механический обход меню.
Что именно проверять при увеличении текста
Dynamic Type нужно проверять не только на самом большом размере. На промежуточных значениях часто проявляются ошибки ограничения ширины, а максимальный размер показывает, что произойдёт при предельной нагрузке на компоновку. В руководстве Apple по типографике и Dynamic Type размер текста рассматривается вместе с читаемостью, иерархией и адаптацией интерфейса, а не как отдельный переключатель.
Для iPhone 18 Pro и iPhone Duo мы создаём одинаковый набор данных:
- короткое имя и длинное имя пользователя;
- однострочное и многострочное сообщение об ошибке;
- длинное название товара или услуги;
- заполненная форма с клавиатурой;
- модальное окно с подтверждением и отменой.
На каждом устройстве проверяем крупный текст, полужирное начертание и отображение форм, где доступные кнопки задаются увеличением контента. Особое внимание уделяем отправке, оплате, подтверждению, закрытию и выходу: эти действия нельзя оставлять только в виде обрезанной иконки или элемента, который уезжает за пределы доступной области.
Если кнопка формально существует в дереве доступности, но её нельзя увидеть, найти последовательным перемещением или активировать без точного жеста, это не успешная приёмка. Для каждого дефекта сохраняем снимок, состояние устройства, системную версию, номер сборки и шаг, после которого элемент стал недоступен.
Почему смена экрана ломает фокус VoiceOver
У iPhone Duo появляется дополнительная граница состояния: приложение не просто меняет размер окна, а должно продолжить задачу после складывания, раскрытия или перехода между дисплеями. На этом этапе нельзя автоматически переносить поведение обычного телефона на новую модель. Официальные материалы по разработке для iPhone Duo задают направление для адаптивных интерфейсов, но конкретный результат для VoiceOver требует проверки в целевой сборке.
Теряется ли фокус VoiceOver при складывании iPhone Duo
Да, такая потеря возможна как дефект реализации, но заранее считать её неизбежным поведением устройства нельзя. При изменении представления фокус может:
- перейти к заголовку вместо текущего поля;
- попасть на скрытый элемент старого представления;
- вернуться в начало списка;
- остаться на объекте, который больше не отображается;
- исчезнуть из логической последовательности.
Для диагностики мы записываем не только экран, но и контекст: текущий элемент, позицию в списке, открытый диалог и последнее действие. Если после раскрытия пользователь был на третьем поле из формы, ожидаемым результатом будет сохранение этого поля либо понятный переход к новому представлению с объявлением изменения. Возврат к началу без объяснения обычно означает потерю контекста.
При существенном изменении интерфейса разработчик может использовать уведомление layoutChanged, но само наличие уведомления не доказывает корректность результата. В документации Apple по UIAccessibility.layoutChanged описан механизм сообщения о смене компоновки; команда должна дополнительно убедиться, что передаваемый объект действительно существует, видим и логически связан с предыдущим действием.
Моделирование в инструментах полезно для раннего обнаружения неправильной иерархии и скрытых элементов. Однако окончательное решение о непрерывности фокуса принимается после ручного прохода VoiceOver на реальном iPhone Duo.
Важно: «приложение не перезапустилось» — не критерий доступности. Если пользователь потерял введённый текст, выбранный вариант или место в медиапотоке, ключевая задача уже нарушена.
Как проверять Dynamic Type на внутреннем и внешнем экране
Мы не делим проверку на «маленький экран» и «большой экран» только по размеру. Для каждого состояния фиксируем доступную ширину, расположение управляющих элементов, порядок чтения и способ возврата к текущей задаче.
Сначала открываем форму на внешнем экране, вводим данные, увеличиваем текст и переходим на внутренний экран. Затем повторяем обратный переход. В каждом направлении проверяем:
- сохранился ли текст;
- осталась ли выбрана нужная опция;
- видна ли кнопка продолжения;
- не перекрывает ли клавиатура сообщение об ошибке;
- может ли VoiceOver последовательно прочитать заголовок, подсказку, поле и результат проверки.
Отдельно проверяем полужирный текст и визуальные обозначения кнопок. Если различие активного и неактивного состояния заметно только по цвету или тонкой границе, это фиксируется как самостоятельный дефект, даже если крупный текст помещается.
Где заканчивается статическая проверка и начинается реальная приёмка
У команды должны быть три уровня контроля. Их нельзя смешивать, потому что каждый отвечает на разные вопросы.
| Уровень | Что обнаруживает | Чего не доказывает | Где выполнять |
|---|---|---|---|
| Статический анализ | Отсутствующий label, подозрительную иерархию, скрытые элементы, проблемы контрастности | Что пользователь завершит форму и сохранит контекст после смены экрана | На каждой сборке или при изменении интерфейса |
| Автоматизированная регрессия | Повторяемый переход по экрану, наличие элемента, базовую реакцию на действие | Качество объявления, понятность фокуса и удобство для конкретного пользователя | В CI и на подготовленном наборе сценариев |
| Ручная проверка вспомогательными технологиями | Фактический порядок чтения, потерю фокуса, понимание ошибки, возможность завершить задачу | Полное покрытие всех страниц и всех устройств | На реальных устройствах перед выпуском |
Accessibility Inspector полезен для просмотра свойств элемента и ранней проверки дерева. Он не заменяет ручной VoiceOver-тест: инспектор не может принять решение за пользователя, который потерял контекст после раскрытия устройства или не понял новое объявление.
Автоматизированные тесты на базе XCTest также имеют границы. Они хорошо подходят для проверки стабильной последовательности действий, сохранения текста и появления сообщения об ошибке, но не должны объявляться доказательством полноценной доступности. Поэтому в отчёте мы отдельно отмечаем: «проверено инструментом», «проверено автоматизацией» и «подтверждено человеком».
Нужны ли для приёмки две реальные модели
Для общего интерфейса можно начать с одного реального устройства и симуляции второго состояния, если команда ясно указывает ограничение доказательств. Для критической задачи, зависящей от перехода между экранами, одной модели недостаточно: iPhone 18 Pro проверяет базовый поток, а iPhone Duo — дополнительные состояния и восстановление.
Иными словами, требование не состоит в том, чтобы каждую страницу полностью проходить на двух телефонах. Реальные оба устройства нужны там, где риск связан с различием состояния дисплея, фокуса, клавиатуры или сохранения данных. Чем выше цена ошибки, тем меньше допустима замена ручной проверки симуляцией.
Матрица, которую можно выполнить без бесконечного расширения
Сокращение матрицы должно происходить по риску, а не по удобству команды. Мы объединяем одинаковые проверки, но не удаляем переходы, после которых меняется пользовательский контекст.
| Группа проверки | iPhone 18 Pro | iPhone Duo | Доказательство выпуска |
|---|---|---|---|
| Ключевая форма и ошибка | Да, вручную | Да, вручную в двух направлениях | Видеозапись или пошаговый протокол |
| Крупный текст и полужирное начертание | Да | Да, на обоих экранах | Снимки до и после, номер сборки |
| VoiceOver и порядок фокуса | Да | Да, до и после изменения состояния | Запись последовательности и ожидаемого результата |
| Voice Control | Ключевые действия | Ключевые действия после перехода | Список распознаваемых команд |
| Внешняя клавиатура | Ввод и подтверждение | Ввод, смена состояния, возврат | Протокол фокуса и видимой обратной связи |
| Switch Control | Критическая задача | Критическая задача | Подтверждение достижения управляющих элементов |
| Автоматизированная регрессия | Общий набор | Добавленные переходы | Лог теста и артефакты сборки |
Как сократить двойную регрессию
Сначала выделяем общий слой: вход, навигация, ошибка, отправка, отмена и возврат. Этот слой проходит на iPhone 18 Pro и используется как базовая точка сравнения. Затем для iPhone Duo оставляем только операции, которые могут изменить результат:
- открытие и складывание;
- переход между внешним и внутренним представлением;
- возврат к текущему полю;
- сохранение или восстановление состояния;
- изменение размера текста после смены экрана;
- повторное объявление ошибки и результата.
Такой подход не является разрешением пропустить вспомогательные технологии. Voice Control, внешняя клавиатура и Switch Control проверяются на тех же трёх критических задачах, а не механически на каждом информационном экране.
Пошаговая процедура перед выпуском
Первый шаг: описать ожидаемый результат
Для каждого критического потока записываем исходное состояние, действие, ожидаемый фокус, сохранённые данные и окончательный результат. Формулировка «экран должен остаться рабочим» слишком расплывчата. Нужна запись вроде: «после раскрытия фокус остаётся на поле адреса, введённый текст не меняется, ошибка читается один раз, кнопка подтверждения доступна следующим переходом».
Второй шаг: проверить общую задачу на iPhone 18 Pro
Проходим форму с обычным размером текста, затем с увеличенным, с VoiceOver и без него. После этого повторяем критический путь с Voice Control, клавиатурой и Switch Control. Если базовая задача уже недоступна на iPhone 18 Pro, переносить её на iPhone Duo бессмысленно: сначала исправляется общий компонент.
Третий шаг: повторить сценарий на iPhone Duo
Открываем задачу на внешнем экране, выполняем действие, меняем состояние устройства и продолжаем работу. После обратного перехода проверяем не только наличие экрана, но и идентичность данных, выбранных пунктов, текста ошибки и позиции в списке. Для медиаконтента дополнительно фиксируем, сохранилась ли точка воспроизведения.
Четвёртый шаг: проверить фокус и объявления
VoiceOver должен вести пользователя по логической последовательности, а не по порядку создания объектов в коде. После изменения компоновки проверяем заголовок, текущий элемент, управляющие кнопки, модальное окно и способ закрытия. Скрытые элементы старого представления не должны оставаться доступными для перемещения.
Пятый шаг: проверить вспомогательный ввод
Voice Control должен находить ключевые действия по устойчивым названиям. Внешняя клавиатура должна позволять перейти к полю, кнопке и сообщению об ошибке без мыши или точного жеста; рекомендации по клавиатурной навигации сверяем с руководством Apple по клавиатрам. Switch Control должен достигать тех же операций с понятной визуальной обратной связью.
Мы отдельно отмечаем пути, основанные только на перетаскивании, наведении или сложном жесте. Если операция критична, ей нужен альтернативный способ запуска.
Шестой шаг: сохранить доказательства
В отчёт включаем модель устройства, состояние экрана, версию системы, номер сборки, настройки текста, включённую вспомогательную технологию, фактический результат и ссылку на дефект. Для отказа после смены экрана полезно сохранить короткую видеозапись до и после перехода, но видео не заменяет текстовый ожидаемый результат.
Оценка дефектов и решение о выпуске
Мы делим проблемы на три уровня:
- Блокирующие ключевую задачу. Нельзя завершить вход, оплату, подтверждение, редактирование или другую заранее выбранную критическую операцию. Такой дефект закрывается до выпуска.
- Существенно снижающие доступность. Операция возможна, но требует непредсказуемого обхода, повторного ввода, помощи другого человека или потери контекста. Для выпуска нужны владелец, срок исправления, описанный обходной путь и обязательная повторная проверка в следующей версии.
- Общие визуальные недостатки. Например, неидеальное выравнивание при крупном тексте, если все элементы остаются читаемыми и достижимыми. Они не должны маскировать блокирующие ошибки и также получают владельца и срок пересмотра.
Не следует автоматически понижать серьёзность проблемы только потому, что она возникает после складывания. Если значимая задача действительно выполняется в этом состоянии, дефект относится к реальному пользовательскому потоку.
Чек-лист перед подписанием приёмки:
- [ ] Выбраны три задачи, которые нельзя потерять или прервать.
- [ ] Для каждой задачи записаны ожидаемый фокус и данные, которые должны сохраниться.
- [ ] Общий поток проверен на iPhone 18 Pro.
- [ ] На iPhone Duo выполнены переходы между внешним и внутренним экраном.
- [ ] Проверены увеличенный текст, полужирное начертание и доступность кнопок.
- [ ] VoiceOver прошёл критический путь до и после изменения состояния.
- [ ] Accessibility Inspector использован для диагностики, но не выдан за замену ручной проверки.
- [ ] Автоматизация проверила повторяемые действия и сохранение состояния.
- [ ] Voice Control, внешняя клавиатура и Switch Control проверены на приоритетных операциях.
- [ ] Каждый блокирующий дефект закрыт до выпуска.
- [ ] Для остальных дефектов назначены владелец, обходной путь и версия повторной проверки.
- [ ] В доказательствах указаны устройство, системная версия, номер сборки и настройки теста.
Тестовая очередь тоже должна быть частью плана. Статические проверки можно запускать на каждой подходящей сборке, автоматизированные сценарии — распределять по CI, а ручную проверку реальных устройств — бронировать под выпускной кандидат. Если сборки, симуляторы или удалённые устройства постоянно ждут друг друга, имеет смысл выделить отдельный канал проверки или временно арендовать Mac через zekmac. Расширение машин решает проблему сборки и параллельности, но не заменяет человека, который использует VoiceOver, Voice Control или Switch Control.
Для постоянной тяжёлой нагрузки собственная инфраструктура обычно предсказуемее аренды: она доступна по внутренним правилам, не зависит от очереди и может быть связана с физическими аксессуарами. Но для временного релизного окна, проверки новой модели или независимой верификации аренда zekmac может оказаться проще, чем срочно закупать Mac и настраивать отдельный удалённый контур. При этом реальный iPhone Duo всё равно должен быть доступен там, где требуется подтвердить поведение внутреннего и внешнего экрана.
Практическая граница здесь проста: сначала выберите три операции, которые нельзя потерять, и примите их на iPhone 18 Pro и iPhone Duo по этому протоколу. Если очередь сборок, симуляторов или удалённого взаимодействия мешает выполнить проверки в срок, используйте zekmac как временную среду для независимой верификации, сохранив ручное подтверждение вспомогательных технологий на реальных устройствах.
Удалённый узел zekmac M4
Проведите приёмочное тестирование на удалённом Mac от zekmac
Используйте удалённый Mac от zekmac для сборки приложения и проверки доступности в реальной среде macOS.