Accessibility (a11y) — обезбеђивање приступачности мобилне апликације за особе са инвалидитетом. Укључује подршку екранских читача (VoiceOver на iOS, TalkBack на Android), скалирање текста (Dynamic Type), довољан контраст боја (WCAG 2.1 ниво AA), навигацију без вида и алтернативе гестовима. Према подацима СЗО (2023), преко 1,3 милијарде људи (16% становништва) живи са неким обликом инвалидитета — accessibility није опција, већ неопходност. Детаљније — у званичној документацији компаније Apple о accessibility.
Главно
Accessibility (скраћено a11y — 11 слова између «a» и «y») — пракса развоја апликација доступних особама са оштећењима вида, слуха, моторике и когнитивним карактеристикама. У мобилном развоју, accessibility обухвата четири главна сценарија: слепи корисници (екрански читачи), слабовиди (скалирање, контраст), глуви и наглуви (титлови, визуелне алтернативе звуку), корисници са ограниченом моториком (гласовна контрола, Switch Control, велика област додира).
Правни захтеви — у многим земљама accessibility је обавезна по закону. САД: Section 508 и ADA. ЕУ: European Accessibility Act (2025). Велика Британија: Equality Act 2010. Без подршке accessibility, апликација може постати предмет судског спора — у САД је 2023. године поднето преко 4000 тужби због недоступности дигиталних производа. Apple и Google проверавају accessibility приликом модерисања апликација: App Store Review Guidelines (4.2) и Google Play Store захтевају минималну подршку приступачности.
Пословни аргумент — приступачност повећава публику. Према Return on Disability (2021), особе са инвалидитетом контролишу 13 билиона долара расположивог прихода годишње. Доступне апликације такође боље рангирају у претрази (семантички HTML, алт-текстови), имају вишу корисничку оцену и мање рецензија о проблемима са UX. У IT Sectr-у укључујемо accessibility у definition of done свих пројеката — то је стандард квалитета, а не опционо побољшање.
VoiceOver — екрански читач компаније Apple, уграђен у iOS, iPadOS и macOS. Корисник превлачи прстом по екрану, VoiceOver чита назив елемента под прстом. Двоструки додир — активација елемента. VoiceOver подржава преко 40 гестова: три прста превлачење (листање), два прста двоструки додир (заустављање), Z-гест (повратак). Програмер контролише шта и како VoiceOver чита кроз протокол UIAccessibility и својства accessibilityLabel, accessibilityTraits, accessibilityHint.
class CustomButton: UIButton {
override var isAccessibilityElement: Bool {
get { return true }
set {}
}
// override accessibilityLabel
override var accessibilityLabel: String? {
get { return "Дугме за слање обрасца" }
set {}
}
// override accessibilityHint
override var accessibilityHint: String? {
get { return "Двапут додирните да пошаљете податке" }
set {}
}
// override accessibilityTraits
override var accessibilityTraits: UIAccessibilityTraits {
get { return .button }
set {}
}
}
// Dynamic Type — скалирање текста
titleLabel.font = UIFontMetrics.default.scaledFont(
for: UIFont.systemFont(ofSize: 16)
)
titleLabel.adjustsFontForContentSizeCategory = true
Динамичка типографија — Dynamic Type у iOS омогућава кориснику да изабере величину текста (од XS до XXXL). Програмер користи UIFontMetrics.scaledFont за аутоматско скалирање. Текст мора бити исправно приказан у свим величинама: редови не смеју бити одсечени, дугмад морају расти пропорционално тексту. UITableView аутоматски ажурира висину ћелија при промени величине текста. Игнорисање Dynamic Type-а значи учинити апликацију недоступном за слабовиде кориснике.
SwiftUI пружа модификаторе за accessibility: .accessibilityLabel(), .accessibilityHint(), .accessibilityAddTraits(), .accessibilitySortPriority(). Подразумевано, сви стандардни SwiftUI елементи (Text, Button, Image) су већ accessibility елементи са аутоматским ознакама. За прилагођене View-ове користите .accessibilityElement(children: .combine) за спајање подређених елемената у један. SwiftUI аутоматски подржава Dynamic Type и VoiceOver.
VStack {
Image(systemName: "trash")
.accessibilityLabel(Text("Уклони елемент"))
Text("Корпа")
.font(.body)
}
.accessibilityElement(children: .combine)
.accessibilityAddTraits(.isButton)
.accessibilityHint(Text("Брише изабрани елемент без могућности опоравка"))
TalkBack — екрански читач компаније Google, предвиђен на већини Android уређаја (доступан у Google Play-у за све верзије Android 5+). TalkBack користи исте гестове као VoiceOver: превлачење за навигацију, двоструки додир за активацију. Програмер поставља опис елемената кроз атрибут android:contentDescription у XML-у или кроз setContentDescription() у коду. За ImageView, contentDescription је обавезан — без њега TalkBack пријављује «није означено» или чита име датотеке.
// XML: contentDescription за ImageView
<ImageView
android:id="@+id/iconDelete"
android:src="@drawable/ic_delete"
android:contentDescription="@string/delete_button_desc"
android:focusable="true"
android:clickable="true" />
// Kotlin: програмско постављање
iconDelete.contentDescription = getString(R.string.delete_button_desc)
// Accessibility Delegate (прилагођени)
iconDelete.accessibilityDelegate = object : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfo
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "Дугме за брисање"
info.contentDescription = "Уклони изабрани елемент"
info.className = Button::class.java.name
}
}
// Live Regions за динамичка ажурирања
textView.accessibilityLiveRegion = View.ACCESSIBILITY_LIVE_REGION_POLITE
Live Regions — механизам Android-а за обавештавање TalkBack-а о промени садржаја без фокуса. Атрибут android:accessibilityLiveRegion узима три вредности: none (нема обавештења), polite (објавити након тренутног), assertive (објавити одмах). Користите polite за ажурирање статуса учитавања, assertive — за критичне грешке. Злоупотреба assertive-а доводи до хаоса за корисника — TalkBack ће стално прекидати тренутну радњу.
Accessibility Scanner — бесплатна апликација компаније Google за тестирање приступачности Android апликација без приступа изворном коду. Скенер проверава: контраст текста, величину додирних области (минимум 48×48dp према Android Accessibility Guidelines), постојање contentDescription за ImageView, исправност хијерархије елемената. За аутоматске тестове користите AccessibilityChecks из Espresso-а — они се интегришу у CI/CD и проверавају accessibility при сваком билду.
WCAG 2.1 (Web Content Accessibility Guidelines) — међународни стандард приступачности који је развио W3C. Верзија 2.1 (2018) укључује 13 додатних критеријума за мобилне апликације. Нивои усаглашености: A (минимални), AA (обавезан за већину организација), AAA (максимални). Apple и Google препоручују ниво AA као минимални за објављивање апликација. WCAG 2.2 је објављен 2023. године са прецизирањима за фокус и унос.
Кључни критеријуми за мобилни развој: контраст текста најмање 4.5:1 (AA) или 7:1 (AAA), величина додирних области минимум 44×44pt (iOS) или 48×48dp (Android), подршка за пејзажну и портретну оријентацију без губитка функционалности, могућност искључивања анимације (prefers-reduced-motion), постојање титлова за мултимедију, компатибилност са гласовном контролом (Voice Control на iOS, Voice Access на Android).
| Критеријум WCAG 2.1 | Ниво | Захтев за iOS | Захтев за Android |
|---|---|---|---|
| 1.4.3 Контраст (текст) | AA | 4.5:1 за обичан, 3:1 за велики | 4.5:1 за обичан, 3:1 за велики |
| 1.4.11 Контраст (не-текст) | AA | 3:1 за иконе, границе | 3:1 за иконе, границе |
| 2.5.5 Величина циља | AAA | 44×44pt | 48×48dp |
| 2.3.3 Анимација | AAA | prefers-reduced-motion | android:animateLayoutChanges |
| 4.1.2 Име, улога, вредност | A | accessibilityLabel, traits | contentDescription, role |
Алати за проверу контраста — Colour Contrast Analyser (TPGI), WebAIM Contrast Checker, Stark (Figma), Accessibility Inspector (Xcode). У IT Sectr-у проверавамо контраст у фази дизајна (Figma + Stark) и поново у фази развоја (Accessibility Inspector / Accessibility Scanner). Минимални захтев — 4.5:1 за сав текст мањи од 18pt (14pt bold). За логотипе и декоративне елементе контраст није потребан.
iOS тестирање — Accessibility Inspector у Xcode-у (Xcode → Open Developer Tool → Accessibility Inspector) проверава label, traits, hint за сваки елемент. VoiceOver се може укључити у подешавањима или кроз Accessibility Shortcut (троструки притисак дугмета). За аутоматске тестове користите XCUITest са XCTAssertTrue(app.staticTexts["label"].isAccessibilityElement). Apple препоручује тестирање свих екрана апликације са укљученим VoiceOver-ом.
Android тестирање — Accessibility Scanner (Play Store) проверава контраст, величину додирних области, contentDescription. За аутоматизацију: Espresso AccessibilityChecks (import: androidTestImplementation 'androidx.test.espresso:espresso-accessibility:3.5.1'). Google препоручује контролну листу: сваки ImageView има contentDescription, додирне области нису мање од 48×48dp, текст се скалира до 200% без одсецања, сви елементи су доступни превлачењем TalkBack-а.
IT Sectr контролна листа — пре издавања проверавамо: (1) VoiceOver/TalkBack исправно чита све елементе, (2) текст се скалира до максималне величине без губитка функционалности, (3) сви ImageView имају contentDescription, (4) контраст текста ≥4.5:1 у свим темама, (5) додирне области ≥44pt/48dp, (6) нема контекстуалног менија доступног само дугим притиском, (7) подршка за Reduce Motion / Remove Animations у системским подешавањима. Ова контролна листа је део definition of done сваког спринта.
Често постављана питања
VoiceOver — екрански читач компаније Apple за iOS, iPadOS, macOS. Користи гестове једним и више прстију (превлачење, двоструки додир). TalkBack — пандан компаније Google за Android са сличним гестовима. VoiceOver чита accessibilityLabel, TalkBack — contentDescription. Оба подржавају Брајеве дисплеје и гласовну контролу. Суштинских разлика у функционалности нема.
contentDescription — атрибут View-а у Android-у који поставља текстуални опис за TalkBack. Без њега TalkBack пријављује «није означено» или чита име класе (ImageView, Button). Додаје се кроз android:contentDescription="@string/desc" у XML-у или view.contentDescription = "текст" у коду. За декоративне слике користите contentDescription=@null.
Према WCAG 2.1 ниво AA: 4.5:1 за обичан текст и 3:1 за велики (од 18pt или 14pt bold). Ниво AAA: 7:1 за обичан и 4.5:1 за велики. Проверавајте контраст у две теме (светлој/тамној). Кршење контраста је најчешћи проблем приступачности у мобилним апликацијама према подацима Google-а.
Да, Apple препоручује Dynamic Type за све апликације. Корисник подешава величину текста у Подешавањима. Програмер користи UIFontMetrics.scaledFont — фонт се аутоматски скалира. Без Dynamic Type-а корисници са слабим видом неће моћи да читају текст. iOS аутоматски проверава Dynamic Type приликом модерисања у App Store-у.
WCAG (Web Content Accessibility Guidelines) — међународни стандард приступачности садржаја од W3C. Верзија 2.1 (2018) укључује критеријуме за мобилне апликације: контраст, величину додирних области (44×44pt), подршку за екранске читаче, алтернативе гестовима, титлове. Ниво AA — минимални стандард за објављивање у App Store-у и Google Play-у.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође