📱✨ iOS и цифровая доступность: что скрывается за красивым интерфейсом Если вдруг кто-то забыл, а новые подписчики, наверное, и не знали, но моя основная занятость — это тестировщик невизуальной доступности. 🧑‍💻♿️ Ну, это те люди, кто со скринридером ходят по вашему цифровому продукту и возмущаются, что, блин, опять ничё не работает, надо фиксить. 😤🔧 Вот я этим уже успешно занимаюсь больше двух лет. И как-то так сложилось, что я отдавал предпочтение тестированию веб-сайтов и практически не сталкивался с мобильными приложениями, да и желания особо не было. Вот почему-то душа лежит больше именно к вебу, а не к мобилкам, и не могу даже себе внятно объяснить почему.

Не так давно я всё же столкнулся с тестированием мобильного приложения под iOS и решил немного погрузиться в тему подробнее, и вот теперь делюсь своими наблюдениями с вами. 🤓📲 Что-то я уже давно знал, но не было поводов об этом рассказать, какие-то вещи для меня были впервые. 🌱

1. В iOS нет единой «разметки», как в HTML 🧩 В вебе есть структурированный HTML, понятные роли, aria-атрибуты, семантика. В iOS же единых правил просто не существует. Разработчики могут использовать совершенно разные подходы: 🟣 UIKit, 🟣 SwiftUI, 🟣 кастомные UIView, 🟣 самописные компоненты с собственным поведением. И у каждого варианта — свои нюансы доступности. Где-то роли прописываются автоматически, где-то нужно руками, где-то разработчик случайно перехватил жест и элемент перестал быть фокусируемым (как это недавно произошло в Telegram). 😅📵 Поэтому в мобильных аудитах мы можем фиксировать только пользовательские наблюдения, без универсальных рекомендаций по разработке. Мы банально не знаем, какой фреймворк, библиотека или кастомный компонент используется под капотом, и как именно он управляет доступностью. 🛠️

2. В iOS нет аналога HTML-тега ~~❌ В HTML есть тег зачёркнутый текст~~, который скринридер озвучивает как «Удалено». Это часто используется для указания старой цены при скидках: визуально зачёркнуто, а программа экранного доступа сообщает, что значение не актуально. В iOS такого механизма просто нет 😖 Мы можем визуально зачеркнуть текст, но VoiceOver это не озвучит. Разработчику необходимо самостоятельно добавить accessibilityLabel и прописать, например: «Старая цена». 🏷️ Казалось бы, это вообще не критично, и метка «Удалено» подходит не для всех интерфейсов, и лучше прописывать отдельно в каждом продукте своё. Но в реалиях, когда доступность не приоритетна от слова «совсем», и при разработке над такими мелочами не задумываются, это становится критично. ⚠️

3. Комбинированные списки в iOS хуже ориентируют пользователя 📋🔍 Комбинированные списки. Ну это такие штуки, где и поле ввода есть для поиска, и выпадающий список с предложенными вариантами. Часто используются в картах для выбора нужного адреса. 🗺️ И вот обычно эти выпадающие списки имеют динамические значения — то есть мы никогда не можем знать, сколько предложенных вариантов будет: 1, 2, 5 или 10. В вебе скринридер озвучивает позицию элемента, например: «2 из 5», а в iOS VoiceOver строго молчит. 🤐 А технической возможности добавить отслеживание структуры пунктов, чтобы озвучивать позицию, просто нет — что, конечно, не критично, но и приятного тоже мало. 😕

Вообще здесь должно было быть 5 пунктов, но как-то всё растянулось, поэтому продолжение следует 😉 Хотя я уверен, что вторую часть мне будет делать лень, так что не надейтесь 🥱 Но думаю 20❤ решит вопрос мотивации🤭 🌀✨ @accessibility_tester

#ios #apple #voiceover #swift #обучалки