Реализация поддержки VoiceOver для iOS-приложения

[VoiceOver](https://ru.wikipedia.org/wiki/VoiceOver) — встроенный screen reader от Apple, позволяющий незрячим и слабовидящим пользователям взаимодействовать с устройством. Если ваше приложение его не поддерживает, они просто не могут им пользоваться. Мы проводим аудит и внедрение VoiceOver под ключ

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Реализация поддержки VoiceOver для iOS-приложения
Средний
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    901
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    787
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1219
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1084
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1005
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    601

VoiceOver — встроенный screen reader от Apple, позволяющий незрячим и слабовидящим пользователям взаимодействовать с устройством. Если ваше приложение его не поддерживает, они просто не могут им пользоваться. Мы проводим аудит и внедрение VoiceOver под ключ, гарантируя соответствие стандартам доступности. Наш опыт — более 5 лет в разработке iOS-приложений для различных отраслей. Свяжитесь с нами для оценки вашего приложения.

Почему VoiceOver важен для бизнеса?

По данным Apple, более 15% пользователей iOS активно используют функции доступности. Игнорирование этой аудитории приводит к потере до 15% потенциальных клиентов. Кроме того, многие контракты в государственном секторе, медицине и образовании требуют соответствия WCAG 2.1 или Section 508. Приложения без VoiceOver не проходят эти требования, что ограничивает рынок сбыта. Более того, несоответствие стандартам может повлечь юридические санкции и финансовые штрафы. Автоматизированный аудит сокращает время проверки в 3–5 раз по сравнению с ручным, а исправление ошибок на этапе разработки обходится на 40% дешевле, чем после релиза.

Какие элементы приложения ломаются без VoiceOver?

Кастомные UIView и SwiftUI View

Стандартные UIButton, UILabel, UITextField — VoiceOver понимает из коробки. Кастомные UIView с нарисованным на CALayer контентом — нет. VoiceOver видит весь кастомный view как один элемент без описания.

Для UIKit: isAccessibilityElement = true, accessibilityLabel, accessibilityHint, accessibilityTraits. accessibilityLabel — что это такое («Кнопка добавить в корзину»). accessibilityHint — что произойдёт при активации («Добавляет товар в корзину, переходит к оформлению»). accessibilityTraits — тип элемента (.button, .link, .image, .header, .selected).

Аспект UIKit SwiftUI
Label accessibilityLabel .accessibilityLabel()
Hint accessibilityHint .accessibilityHint()
Traits accessibilityTraits .accessibilityAddTraits()
Объединение детей Массив accessibilityElements .accessibilityElement(children: .combine)

Для SwiftUI: модификаторы .accessibilityLabel(), .accessibilityHint(), .accessibilityAddTraits(). Если несколько вложенных View нужно объединить в один accessible элемент — .accessibilityElement(children: .combine) или .accessibilityElement(children: .ignore) + явный label.

Изображения без alt-текста

UIImageView с isAccessibilityElement = false (по умолчанию) — VoiceOver пропускает. Декоративные изображения — правильно. Смысловые — нет, нужен accessibilityLabel. Иконки в кнопках: если UIButton содержит только UIImageView без текста — нужен accessibilityLabel на кнопке, иначе VoiceOver зачитает имя файла или молчит.

Порядок фокуса

VoiceOver обходит элементы по accessibilityActivationPoint — обычно центр frame. Для сложных layout (overlay, absolute positioning в SwiftUI, кастомные контейнеры) порядок может быть хаотичным. Исправляется через accessibilityElements на родительском контейнере — массив в нужном порядке:

override var accessibilityElements: [Any]? { get { [titleLabel, priceLabel, addButton] } set { } } 

В SwiftUI — .accessibilitySortPriority() для управления порядком.

Модальные экраны и кастомные оверлеи

UIAlertController — VoiceOver фокусируется автоматически. Кастомный UIView-оверлей поверх контента — нет. Нужно UIAccessibility.post(notification: .screenChanged, argument: firstElement) чтобы перевести фокус на первый элемент оверлея. При закрытии — post(notification: .screenChanged, argument: triggerButton) чтобы вернуть фокус на кнопку, которая открыла оверлей.

accessibilityViewIsModal = true на контейнере оверлея — скрывает фоновой контент от VoiceOver. Без этого пользователь свайпом может «провалиться» сквозь оверлей на задний контент.

Как мы проводим аудит и внедрение: пошаговый процесс

  1. Включение VoiceOver — Cmd+F5 в Simulator или тройной клик Home/Side Button на устройстве. Проходим все ключевые флоу: онбординг, главный экран, основные actions (оформить заказ, отправить сообщение, воспроизвести медиа).
  2. Фиксация проблем — элементы без label, неправильный порядок фокуса, недостижимые элементы, модальные оверлеи без управления фокусом.
  3. Инструменты — Accessibility Inspector (Xcode) проверяет контрасность, находит элементы без label без запуска приложения. XCTest с XCUIAccessibilityAudit (iOS 17+) даёт автоматизированный аудит в UI-тестах.
  4. Приоритет исправлений — сначала навигация и ключевые CTA, потом списки и формы, потом медиа-контент.

Сравнение ручного и автоматизированного тестирования:

Критерий Ручное тестирование Автоматизированный аудит
Время на один экран 10–15 мин 1–2 мин
Охват Выборочный Полный (все элементы)
Точность Зависит от тестировщика Стабильная
Повторяемость Низкая Высокая (можно в CI)

Что входит в работу?

  • Аудит доступности с отчётом по каждому экрану и приоритетом исправлений.
  • Реализация accessibility labels, hints, traits для всех кастомных компонентов.
  • Настройка порядка фокуса для сложных layout и модальных окон.
  • Интеграция с VoiceOver для динамического контента (например, обновление после загрузки).
  • Тестирование с помощью Accessibility Inspector и ручное прохождение ключевых сценариев.
  • Документация и рекомендации для команды по поддержке доступности в будущем.

Срок: 3-5 дней для приложения среднего масштаба. Стоимость рассчитывается индивидуально — напишите нам, и мы оценим ваш проект. Получите консультацию по вашему проекту — мы поможем внедрить VoiceOver качественно и в срок.

Типичные ошибки при реализации VoiceOver

  • Забывают задать accessibilityLabel для кнопок-иконок (только изображение).
  • Не используют accessibilityTraits, из-за чего VoiceOver не отличает кнопку от статического текста.
  • Не обрабатывают dynamic type — шрифты не масштабируются, и текст обрезается.
  • Игнорируют порядок фокуса на экранах с кастомной анимацией или overlay.

Избегая этих ошибок, вы делаете приложение доступным для миллионов пользователей.