Accessibility (a11y) — mobil tətbiqin əlilliyi olan insanlar üçün əlçatanlığının təmin edilməsi. Ekran oxuyucularının dəstəyini (iOS-da VoiceOver, Android-də TalkBack), mətnin miqyaslanmasını (Dynamic Type), kifayət qədər rəng kontrastını (WCAG 2.1 səviyyə AA), görmədən naviqasiyanı və jestlərə alternativləri əhatə edir. ÜST-nin (2023) məlumatına görə, 1,3 milyarddan çox insan (əhalinin 16%) müxtəlif əlillik formaları ilə yaşayır — accessibility seçim deyil, zərurətdir. Ətraflı — Apple-ın accessibility üzrə rəsmi sənədlərində.
Əsas məqamlar
Accessibility (qısaca a11y — «a» və «y» arasında 11 hərf) — görmə, eşitmə, motorika və idrak xüsusiyyətlərində pozuntusu olan insanlar üçün əlçatan tətbiqlərin hazırlanması təcrübəsi. Mobil inkişafda accessibility dörd əsas ssenarini əhatə edir: kor istifadəçilər (ekran oxuyucuları), zəif görənlər (miqyaslama, kontrast), kar və eşitmə qabiliyyəti zəif olanlar (altyazılar, səsə vizual alternativlər), motorikası məhdud istifadəçilər (səs idarəetməsi, Switch Control, böyük toxunma sahəsi).
Hüquqi tələblər — bir çox ölkələrdə accessibility qanunla məcburidir. ABŞ: Section 508 və ADA. Aİ: European Accessibility Act (2025). Böyük Britaniya: Equality Act 2010. Accessibility dəstəyi olmadan tətbiq məhkəmə iddiasının obyektinə çevrilə bilər — ABŞ-da 2023-cü ildə rəqəmsal məhsulların əlçatmazlığı ilə bağlı 4000-dən çox iddia qaldırılıb. Apple və Google tətbiqlərin moderasiyası zamanı accessibility-ni yoxlayır: App Store Review Guidelines (4.2) və Google Play Store minimal əlçatanlıq dəstəyi tələb edir.
Biznes arqumenti — əlçatanlıq auditoriyanı artırır. Return on Disability (2021) məlumatına görə, əlilliyi olan insanlar ildə $13 trilyon sərəncamında olan gəlirə nəzarət edir. Əlçatan tətbiqlər həmçinin axtarışda daha yaxşı sıralanır (semantik HTML, alternativ mətnlər), daha yüksək istifadəçi reytinqinə və UX problemləri haqqında daha az rəyə malikdir. IT Sectr-də biz accessibility-ni bütün layihələrin definition of done hissəsinə daxil edirik — bu keyfiyyət standartıdır, seçmə yaxşılaşdırma deyil.
VoiceOver — iOS, iPadOS və macOS-a daxil edilmiş Apple ekran oxuyucusu. İstifadəçi barmağını ekran üzərində gəzdirir, VoiceOver barmağın altındakı elementin adını oxuyur. İki dəfə toxunma — elementin aktivləşdirilməsi. VoiceOver 40-dan çox jesti dəstəkləyir: üç barmaq sürüşdürmə (səhifələmə), iki barmaq iki dəfə toxunma (dayan), Z-jesti (qayıt). Developer VoiceOver-in nəyi və necə oxuyacağını UIAccessibility protokolu və accessibilityLabel, accessibilityTraits, accessibilityHint xüsusiyyətləri vasitəsilə idarə edir.
class CustomButton: UIButton {
override var isAccessibilityElement: Bool {
get { return true }
set {}
}
// override accessibilityLabel
override var accessibilityLabel: String? {
get { return "Forma göndərmə düyməsi" }
set {}
}
// override accessibilityHint
override var accessibilityHint: String? {
get { return "Məlumatı göndərmək üçün iki dəfə toxunun" }
set {}
}
// override accessibilityTraits
override var accessibilityTraits: UIAccessibilityTraits {
get { return .button }
set {}
}
}
// Dynamic Type — mətnin miqyaslanması
titleLabel.font = UIFontMetrics.default.scaledFont(
for: UIFont.systemFont(ofSize: 16)
)
titleLabel.adjustsFontForContentSizeCategory = true
Dinamik tipoqrafika — iOS-da Dynamic Type istifadəçiyə mətn ölçüsünü seçməyə imkan verir (XS-dən XXXL-ə qədər). Developer avtomatik miqyaslama üçün UIFontMetrics.scaledFont istifadə edir. Mətn bütün ölçülərdə düzgün göstərilməlidir: sətirlər kəsilməməli, düymələr mətnə proporsional böyüməlidir. UITableView mətn ölçüsü dəyişdikdə hüceyrələrin hündürlüyünü avtomatik yeniləyir. Dynamic Type-ı gözardı etmək — tətbiqi zəif görən istifadəçilər üçün əlçatmaz etmək deməkdir.
SwiftUI accessibility üçün modifikatorlar təqdim edir: .accessibilityLabel(), .accessibilityHint(), .accessibilityAddTraits(), .accessibilitySortPriority(). Standart SwiftUI elementləri (Text, Button, Image) avtomatik etiketlərlə artıq accessibility elementləridir. Xüsusi View-lər üçün uşaq elementləri birinə birləşdirmək üçün .accessibilityElement(children: .combine) istifadə edin. SwiftUI avtomatik olaraq Dynamic Type və VoiceOver-i dəstəkləyir.
VStack {
Image(systemName: "trash")
.accessibilityLabel(Text("Elementi sil"))
Text("Səbət")
.font(.body)
}
.accessibilityElement(children: .combine)
.accessibilityAddTraits(.isButton)
.accessibilityHint(Text("Seçilmiş elementi bərpa etmək imkanı olmadan silir"))
TalkBack — Google ekran oxuyucusu, əksər Android cihazlarında əvvəlcədən quraşdırılıb (Android 5+ bütün versiyaları üçün Google Play-də mövcuddur). TalkBack VoiceOver ilə eyni jestlərdən istifadə edir: naviqasiya üçün sürüşdürmə, aktivləşdirmə üçün iki dəfə toxunma. Developer elementlərin təsvirini XML-də android:contentDescription atributu və ya kodda setContentDescription() vasitəsilə təyin edir. ImageView üçün contentDescription məcburidir — onsuz TalkBack «işarələnməyib» deyə bildirəcək və ya fayl adını oxuyacaq.
// XML: ImageView üçün contentDescription
<ImageView
android:id="@+id/iconDelete"
android:src="@drawable/ic_delete"
android:contentDescription="@string/delete_button_desc"
android:focusable="true"
android:clickable="true" />
// Kotlin: proqram təyinatı
iconDelete.contentDescription = getString(R.string.delete_button_desc)
// Accessibility Delegate (xüsusi)
iconDelete.accessibilityDelegate = object : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfo
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "Sil düyməsi"
info.contentDescription = "Seçilmiş elementi sil"
info.className = Button::class.java.name
}
}
// Dinamik yeniləmələr üçün Live Regions
textView.accessibilityLiveRegion = View.ACCESSIBILITY_LIVE_REGION_POLITE
Live Regions — Android-in fokus olmadan məzmun dəyişikliyi barədə TalkBack-ə xəbərdarlıq etmək mexanizmi. android:accessibilityLiveRegion atributu üç qiymət alır: none (xəbərdarlıq yoxdur), polite (cari danışıqdan sonra bildir), assertive (dərhal bildir). Yüklənmə statusu yeniləmələri üçün polite, kritik səhvlər üçün assertive istifadə edin. Assertive-dən sui-istifadə istifadəçi üçün xaosa səbəb olacaq — TalkBack daim cari hərəkəti kəsəcək.
Accessibility Scanner — mənbə koduna giriş olmadan Android tətbiqlərinin əlçatanlığını test etmək üçün Google-dan pulsuz proqram. Skaner yoxlayır: mətn kontrastı, toxunma sahələrinin ölçüsü (Android Accessibility Guidelines-ə görə minimum 48×48dp), ImageView üçün contentDescription-ın mövcudluğu, elementlərin iyerarxiyasının düzgünlüyü. Avtomatik testlər üçün Espresso-dan AccessibilityChecks istifadə edin — onlar CI/CD ilə inteqrasiya olunur və hər build zamanı accessibility-ni yoxlayır.
WCAG 2.1 (Web Content Accessibility Guidelines) — W3C tərəfindən hazırlanmış beynəlxalq əlçatanlıq standartı. 2.1 versiyası (2018) mobil tətbiqlər üçün 13 əlavə meyar daxildir. Uyğunluq səviyyələri: A (minimal), AA (əksər təşkilatlar üçün məcburi), AAA (maksimal). Apple və Google tətbiqlərin nəşri üçün minimal olaraq AA səviyyəsini tövsiyə edir. WCAG 2.2 2023-cü ildə fokus və daxiletmə ilə bağlı dəqiqləşdirmələrlə buraxılıb.
Əsas meyarlar mobil inkişaf üçün: mətn kontrastı 4.5:1-dən az olmamalıdır (AA) və ya 7:1 (AAA), toxunma sahələrinin ölçüsü minimum 44×44pt (iOS) və ya 48×48dp (Android), funksionallığı itirmədən üfüqi və şaquli oriyentasiyanın dəstəyi, animasiyanı söndürmə imkanı (prefers-reduced-motion), multimediaya altyazıların mövcudluğu, səs idarəetməsi ilə uyğunluq (iOS-da Voice Control, Android-də Voice Access).
| WCAG 2.1 meyarı | Səviyyə | iOS üçün tələb | Android üçün tələb |
|---|---|---|---|
| 1.4.3 Kontrast (mətn) | AA | 4.5:1 adi üçün, 3:1 böyük üçün | 4.5:1 adi üçün, 3:1 böyük üçün |
| 1.4.11 Kontrast (qeyri-mətn) | AA | 3:1 ikonlar, sərhədlər üçün | 3:1 ikonlar, sərhədlər üçün |
| 2.5.5 Hədəf ölçüsü | AAA | 44×44pt | 48×48dp |
| 2.3.3 Animasiya | AAA | prefers-reduced-motion | android:animateLayoutChanges |
| 4.1.2 Ad, rol, dəyər | A | accessibilityLabel, traits | contentDescription, role |
Kontrast yoxlama alətləri — Colour Contrast Analyser (TPGI), WebAIM Contrast Checker, Stark (Figma), Accessibility Inspector (Xcode). IT Sectr-də kontrastı dizayn mərhələsində (Figma + Stark) və yenidən inkişaf mərhələsində (Accessibility Inspector / Accessibility Scanner) yoxlayırıq. Minimum tələb — 18pt-dən (14pt bold) kiçik bütün mətn üçün 4.5:1. Loqotiplər və dekorativ elementlər üçün kontrast tələb olunmur.
iOS testi — Xcode-da Accessibility Inspector (Xcode → Open Developer Tool → Accessibility Inspector) hər element üçün label, traits, hint yoxlayır. VoiceOver-ı parametrlərdə və ya Accessibility Shortcut (düyməni üç dəfə basmaq) vasitəsilə aktivləşdirmək olar. Avtomatik testlər üçün XCUITest-i XCTAssertTrue(app.staticTexts["label"].isAccessibilityElement) ilə istifadə edin. Apple VoiceOver aktivləşdirilmiş halda tətbiqin bütün ekranlarını test etməyi tövsiyə edir.
Android testi — Accessibility Scanner (Play Store) kontrast, toxunma sahələrinin ölçüsü, contentDescription yoxlayır. Avtomatlaşdırma üçün: Espresso AccessibilityChecks (import: androidTestImplementation 'androidx.test.espresso:espresso-accessibility:3.5.1'). Google yoxlama siyahısını tövsiyə edir: hər ImageView-in contentDescription-ı var, toxunma sahələri 48×48dp-dən az deyil, mətn 200%-ə qədər kəsilmədən miqyaslanır, bütün elementlər TalkBack sürüşdürməsi ilə əldə edilə bilər.
IT Sectr yoxlama siyahısı — buraxılışdan əvvəl yoxlayırıq: (1) VoiceOver/TalkBack bütün elementləri düzgün oxuyur, (2) mətn funksionallığı itirmədən maksimum ölçüyə qədər miqyaslanır, (3) bütün ImageView-lərin contentDescription-ı var, (4) mətn kontrastı bütün mövzularda ≥4.5:1, (5) toxunma sahələri ≥44pt/48dp, (6) yalnız uzun basma ilə əldə edilən kontekst menyusu yoxdur, (7) sistem parametrlərində Reduce Motion / Remove Animations dəstəyi. Bu yoxlama siyahısı hər sprintin definition of done hissəsinə daxildir.
Tez-tez verilən suallar
VoiceOver — iOS, iPadOS, macOS üçün Apple ekran oxuyucusu. Bir və bir neçə barmaqla jestlərdən istifadə edir (sürüşdürmə, iki dəfə toxunma). TalkBack — oxşar jestlərlə Android üçün Google analoqu. VoiceOver accessibilityLabel oxuyur, TalkBack — contentDescription. Hər ikisi Brayl displeyləri və səs idarəetməsini dəstəkləyir. Funksionallıqda prinsipial fərqlər yoxdur.
contentDescription — Android-də View atributu, TalkBack üçün mətn təsvirini təyin edir. Onsuz TalkBack «işarələnməyib» deyə bildirir və ya sinif adını oxuyur (ImageView, Button). XML-də android:contentDescription="@string/desc" və ya kodda view.contentDescription = "mətn" vasitəsilə əlavə edilir. Dekorativ şəkillər üçün contentDescription=@null istifadə edin.
WCAG 2.1 səviyyə AA-ya görə: adi mətn üçün 4.5:1 və böyük mətn üçün 3:1 (18pt və ya 14pt bold-dan). Səviyyə AAA: adi üçün 7:1 və böyük üçün 4.5:1. Kontrastı iki mövzuda (açıq/tünd) yoxlayın. Google məlumatına görə, kontrast pozuntusu mobil tətbiqlərdə əlçatanlığın ən çox yayılmış problemidir.
Bəli, Apple Dynamic Type-ı bütün tətbiqlər üçün tövsiyə edir. İstifadəçi mətn ölçüsünü Parametrlərdə təyin edir. Developer UIFontMetrics.scaledFont istifadə edir — şrift avtomatik miqyaslanır. Dynamic Type olmadan zəif görən istifadəçilər mətni oxuya bilməyəcək. iOS App Store moderasiyası zamanı Dynamic Type-ı avtomatik yoxlayır.
WCAG (Web Content Accessibility Guidelines) — W3C-dən beynəlxalq məzmun əlçatanlığı standartı. 2.1 versiyası (2018) mobil tətbiqlər üçün meyarlar daxildir: kontrast, toxunma sahələrinin ölçüsü (44×44pt), ekran oxuyucularının dəstəyi, jestlərə alternativlər, altyazılar. AA səviyyəsi — App Store və Google Play-də nəşr üçün minimal standart.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun