Erişilebilirlik — temel bilgiler, görme engelli kullanıcılar için VoiceOver ve TalkBack

Yazar: IT Sectr Yayınlanma: 2026-02-26 Okuma süresi: 9 dk

Accessibility (a11y) — mobil uygulamaların engelli kişiler için kullanılabilir hale getirilmesi. Ekran okuyucuları (iOS'ta VoiceOver, Android'de TalkBack), metin ölçeklendirme (Dynamic Type), yeterli renk kontrastı (WCAG 2.1 seviye AA), görme olmadan gezinme ve jest alternatiflerini içerir. WHO'ya (2023) göre 1,3 milyardan fazla insan (nüfusun %16'sı) bir tür engellilikle yaşamaktadır — erişilebilirlik bir seçenek değil, bir zorunluluktur. Daha fazla bilgi için Apple'ın resmi erişilebilirlik belgelerine bakın.

Önemli Noktalar

  • Accessibility — engelli kişiler (görme, işitme, motor) için uygulama kullanılabilirliği
  • VoiceOver — iOS ve macOS'ta arayüz öğelerini sesli okuyan Apple ekran okuyucusu
  • TalkBack — görme olmadan jest kontrolü ile Android için Google ekran okuyucusu
  • WCAG 2.1 — uluslararası erişilebilirlik standardı: kontrast 4.5:1, dokunma alanı boyutu 44×44pt
  • contentDescription — TalkBack tarafından okunan öğeleri tanımlamak için Android niteliği

Mobil Uygulamalarda Erişilebilirlik (a11y) Nedir?

Accessibility (kısaltma a11y — «a» ve «y» arasında 11 harf) — görme, işitme, motor ve bilişsel engelli kişiler tarafından kullanılabilir uygulamalar geliştirme pratiği. Mobil geliştirmede erişilebilirlik dört ana senaryoyu kapsar: görme engelli kullanıcılar (ekran okuyucuları), az gören kullanıcılar (ölçeklendirme, kontrast), sağır ve işitme güçlüğü çeken kullanıcılar (altyazılar, sese görsel alternatifler) ve sınırlı motor kontrole sahip kullanıcılar (ses kontrolü, Switch Control, büyük dokunma alanları).

Yasal Gereklilikler — birçok ülkede erişilebilirlik yasal olarak zorunludur. ABD: Section 508 ve ADA. AB: European Accessibility Act (2025). Birleşik Krallık: Equality Act 2010. Erişilebilirlik desteği olmadan bir uygulama dava hedefi haline gelebilir — 2023'te ABD'de erişilemez dijital ürünlerle ilgili 4.000'den fazla dava açılmıştır. Apple ve Google, uygulama denetimi sırasında erişilebilirliği kontrol eder: App Store Review Guidelines (4.2) ve Google Play Store minimum erişilebilirlik desteği gerektirir.

İş Gerekçesi — erişilebilirlik kitlenizi genişletir. Return on Disability'e (2021) göre engelli kişiler yıllık 13 trilyon dolar harcanabilir geliri kontrol etmektedir. Erişilebilir uygulamalar aramada daha iyi sıralanır (semantik HTML, alternatif metinler), daha yüksek kullanıcı puanlarına sahiptir ve UX sorunları hakkında daha az inceleme alır. IT Sectr'de erişilebilirliği tüm projelerin tamamlanma tanımına dahil ediyoruz — bu bir kalite standardıdır, isteğe bağlı bir iyileştirme değildir.

iOS'ta Erişilebilirlik: VoiceOver ve UIAccessibility

VoiceOver — iOS, iPadOS ve macOS'a entegre Apple ekran okuyucusu. Kullanıcı parmağını ekranda gezdirdiğinde VoiceOver parmağın altındaki öğenin adını okur. Çift dokunma öğeyi etkinleştirir. VoiceOver 40'tan fazla jesti destekler: üç parmak kaydırma (kaydırma), iki parmak çift dokunma (durma), Z jesti (geri gitme). Geliştiriciler, VoiceOver'ın neyi ve nasıl okuyacağını UIAccessibility protokolü ve accessibilityLabel, accessibilityTraits, accessibilityHint özellikleri aracılığıyla kontrol eder.

swift
class CustomButton: UIButton {

    override var isAccessibilityElement: Bool {
        get { return true }
        set {}
    }

    // geçersiz kıl accessibilityLabel
    override var accessibilityLabel: String? {
        get { return "Form gönderme düğmesi" }
        set {}
    }

    // geçersiz kıl accessibilityHint
    override var accessibilityHint: String? {
        get { return "Veri göndermek için çift dokunun" }
        set {}
    }

    // geçersiz kıl accessibilityTraits
    override var accessibilityTraits: UIAccessibilityTraits {
        get { return .button }
        set {}
    }
}

// Dynamic Type — metin ölçeklendirme
titleLabel.font = UIFontMetrics.default.scaledFont(
    for: UIFont.systemFont(ofSize: 16)
)
titleLabel.adjustsFontForContentSizeCategory = true

Dinamik Tipografi — iOS'ta Dynamic Type, kullanıcının metin boyutunu (XS'den XXXL'ye) seçmesini sağlar. Geliştiriciler otomatik ölçeklendirme için UIFontMetrics.scaledFont kullanır. Metin tüm boyutlarda doğru görüntülenmelidir: satırlar kesilmemeli, düğmeler metinle orantılı olarak büyümelidir. UITableView, metin boyutu değiştiğinde hücre yüksekliklerini otomatik olarak günceller. Dynamic Type'ı görmezden gelmek, uygulamanızı az gören kullanıcılar için erişilemez hale getirmek anlamına gelir.

SwiftUI'da Erişilebilirlik

SwiftUI erişilebilirlik değiştiricileri sağlar: .accessibilityLabel(), .accessibilityHint(), .accessibilityAddTraits(), .accessibilitySortPriority(). Varsayılan olarak, tüm standart SwiftUI öğeleri (Text, Button, Image) zaten otomatik etiketlerle erişilebilirlik öğeleridir. Özel Görünümler için, alt öğeleri birleştirmek üzere .accessibilityElement(children: .combine) kullanın. SwiftUI otomatik olarak Dynamic Type ve VoiceOver'ı destekler.

swift
VStack {
    Image(systemName: "trash")
        .accessibilityLabel(Text("Öğeyi sil"))
    Text("Çöp kutusu")
        .font(.body)
}
.accessibilityElement(children: .combine)
.accessibilityAddTraits(.isButton)
.accessibilityHint(Text("Seçili öğeyi kalıcı olarak siler"))

Android'de Erişilebilirlik: TalkBack ve contentDescription

TalkBack — çoğu Android cihazda önceden yüklenmiş olan Google ekran okuyucusu (tüm Android 5+ sürümleri için Google Play'de mevcuttur). TalkBack, VoiceOver ile aynı jestleri kullanır: gezinmek için kaydırma, etkinleştirmek için çift dokunma. Geliştiriciler, XML'de android:contentDescription niteliği veya kodda setContentDescription() aracılığıyla öğe açıklamalarını ayarlar. ImageView için contentDescription zorunludur — aksi takdirde TalkBack «etiketlenmemiş» der veya dosya adını okur.

kotlin
// XML: ImageView için contentDescription
<ImageView
    android:id="@+id/iconDelete"
    android:src="@drawable/ic_delete"
    android:contentDescription="@string/delete_button_desc"
    android:focusable="true"
    android:clickable="true" />

// Kotlin: programatik atama
iconDelete.contentDescription = getString(R.string.delete_button_desc)

// Accessibility Delegate (özel)
iconDelete.accessibilityDelegate = object : View.AccessibilityDelegate() {
    override fun onInitializeAccessibilityNodeInfo(
        host: View, info: AccessibilityNodeInfo
    ) {
        super.onInitializeAccessibilityNodeInfo(host, info)
        info.text = "Sil düğmesi"
        info.contentDescription = "Seçili öğeyi sil"
        info.className = Button::class.java.name
    }
}

// Dinamik güncellemeler için Live Regions
textView.accessibilityLiveRegion = View.ACCESSIBILITY_LIVE_REGION_POLITE

Live Regions — odak olmadan içerik değişiklikleri hakkında TalkBack'i bilgilendirmek için Android mekanizması. android:accessibilityLiveRegion niteliği üç değer alır: none (bildirim yok), polite (mevcut olandan sonra bildir), assertive (hemen bildir). Yükleme durumu güncellemeleri için polite, kritik hatalar için assertive kullanın. Assertive'ın aşırı kullanımı kullanıcı için kaosa neden olur — TalkBack sürekli olarak mevcut eylemi keser.

Accessibility Scanner

Accessibility Scanner — kaynak koduna erişmeden Android uygulama erişilebilirliğini test etmek için Google'ın ücretsiz uygulaması. Tarayıcı şunları kontrol eder: metin kontrastı, dokunma alanı boyutu (Android Erişilebilirlik Yönergeleri'ne göre minimum 48×48dp), ImageView için contentDescription ve doğru öğe hiyerarşisi. Otomatik testler için Espresso'dan AccessibilityChecks kullanın — bunlar CI/CD'ye entegre olur ve her derlemede erişilebilirliği kontrol eder.

WCAG 2.1: kontrast, boyut ve dokunma alanları

WCAG 2.1 (Web Content Accessibility Guidelines) — W3C tarafından geliştirilen uluslararası erişilebilirlik standardı. Sürüm 2.1 (2018), mobil uygulamalar için 13 ek kriter içerir. Uyum seviyeleri: A (minimum), AA (çoğu kuruluş için zorunlu), AAA (maksimum). Apple ve Google, uygulama yayınlamak için minimum olarak AA seviyesini önerir. WCAG 2.2, 2023'te odak ve giriş için iyileştirmelerle yayınlanmıştır.

Temel Kriterler mobil geliştirme için: en az 4.5:1 (AA) veya 7:1 (AAA) metin kontrastı, en az 44×44pt (iOS) veya 48×48dp (Android) dokunma alanı boyutu, işlevsellik kaybı olmadan yatay ve dikey yönlendirme desteği, animasyonu devre dışı bırakma yeteneği (prefers-reduced-motion), multimedya için altyazılar ve ses kontrolü ile uyumluluk (iOS'ta Voice Control, Android'de Voice Access).

WCAG 2.1 KriteriSeviyeiOS GereksinimiAndroid Gereksinimi
1.4.3 Kontrast (metin)AANormal için 4.5:1, büyük için 3:1Normal için 4.5:1, büyük için 3:1
1.4.11 Kontrast (metin dışı)AASimgeler, kenarlıklar için 3:1Simgeler, kenarlıklar için 3:1
2.5.5 Hedef BoyutuAAA44×44pt48×48dp
2.3.3 AnimasyonAAAprefers-reduced-motionandroid:animateLayoutChanges
4.1.2 Ad, rol, değerAaccessibilityLabel, traitscontentDescription, role

Kontrast Kontrol Araçları — Colour Contrast Analyser (TPGI), WebAIM Contrast Checker, Stark (Figma), Accessibility Inspector (Xcode). IT Sectr'de kontrastı tasarım aşamasında (Figma + Stark) ve geliştirme aşamasında (Accessibility Inspector / Accessibility Scanner) kontrol ediyoruz. 18pt (14pt bold) altındaki tüm metinler için minimum gereksinim 4.5:1'dir. Logolar ve dekoratif öğeler kontrast gerektirmez.

Erişilebilirlik Testi: araçlar ve kontrol listesi

iOS Testi — Xcode'daki Accessibility Inspector (Xcode → Open Developer Tool → Accessibility Inspector) her öğe için etiketi, traits ve ipucunu kontrol eder. VoiceOver, Ayarlar'dan veya Erişilebilirlik Kısayolu (düğmeye üç kez tıklama) aracılığıyla etkinleştirilebilir. Otomatik testler için XCTAssertTrue(app.staticTexts["etiket"].isAccessibilityElement) ile XCUITest kullanın. Apple, VoiceOver etkinken tüm uygulama ekranlarının test edilmesini önerir.

Android Testi — Accessibility Scanner (Play Store) kontrastı, dokunma alanı boyutunu ve contentDescription'ı kontrol eder. Otomasyon için: Espresso AccessibilityChecks (içe aktarma: androidTestImplementation 'androidx.test.espresso:espresso-accessibility:3.5.1'). Google aşağıdaki kontrol listesini önerir: her ImageView'ın contentDescription'ı vardır, dokunma alanları en az 48×48dp'dir, metin kesilmeden %200'e ölçeklenir ve tüm öğelere TalkBack kaydırmasıyla erişilebilir.

IT Sectr Kontrol Listesi — yayınlamadan önce şunları doğrularız: (1) VoiceOver/TalkBack tüm öğeleri doğru okur, (2) metin işlevsellik kaybı olmadan maksimum boyuta ölçeklenir, (3) tüm ImageView'ların contentDescription'ı vardır, (4) tüm temalarda metin kontrastı ≥4.5:1'dir, (5) dokunma alanları ≥44pt/48dp'dir, (6) yalnızca uzun basmayla erişilebilen bağlam menüsü yoktur, (7) sistem ayarlarında Reduce Motion / Remove Animations desteği. Bu kontrol listesi her sprint'in tamamlanma tanımının bir parçasıdır.

Sıkça Sorulan Sorular

VoiceOver, TalkBack'ten nasıl farklıdır?

VoiceOver — iOS, iPadOS, macOS için Apple ekran okuyucusu. Tek ve çok parmaklı jestler (kaydırma, çift dokunma) kullanır. TalkBack — benzer jestlerle Android için Google'ın karşılığı. VoiceOver accessibilityLabel okur, TalkBack contentDescription okur. Her ikisi de braille ekranları ve ses kontrolünü destekler. İşlevsellikte temel farklılıklar yoktur.

Android'de contentDescription nedir?

contentDescription — TalkBack için metin açıklamasını ayarlayan Android'de bir View niteliği. Olmadan TalkBack «etiketlenmemiş» der veya sınıf adını (ImageView, Button) okur. XML'de android:contentDescription="@string/desc" veya kodda view.contentDescription = "metin" ile ayarlanır. Dekoratif görseller için contentDescription=@null kullanın.

Erişilebilirlik için minimum kontrast nedir?

WCAG 2.1 seviye AA'ya göre: normal metin için 4.5:1 ve büyük metin (18pt veya 14pt bold üzeri) için 3:1. Seviye AAA: normal için 7:1 ve büyük için 4.5:1. Kontrastı her iki temada (açık/koyu) kontrol edin. Google'a göre kontrast ihlali mobil uygulamalarda en yaygın erişilebilirlik sorunudur.

iOS'ta Dynamic Type'ı desteklemem gerekir mi?

Evet, Apple tüm uygulamalar için Dynamic Type'ı önerir. Kullanıcı Ayarlar'da metin boyutunu belirler. Geliştiriciler UIFontMetrics.scaledFont kullanır — yazı tipi otomatik olarak ölçeklenir. Dynamic Type olmadan az gören kullanıcılar metni okuyamaz. iOS, App Store denetimi sırasında Dynamic Type'ı otomatik olarak kontrol eder.

WCAG nedir?

WCAG (Web Content Accessibility Guidelines) — W3C'den uluslararası içerik erişilebilirlik standardı. Sürüm 2.1 (2018) mobil uygulamalar için kriterler içerir: kontrast, dokunma alanı boyutu (44×44pt), ekran okuyucu desteği, jest alternatifleri ve altyazılar. Seviye AA, App Store ve Google Play'de yayınlamak için minimum standarttır.

Özet

  • Accessibility — 1,3 milyar engelli kişi için uygulama kullanılabilirliği (WHO, 2023)
  • VoiceOver (iOS) ve TalkBack (Android) — görme engelli kullanıcılar için ekran okuyucuları
  • UIAccessibility — erişilebilirlik öğeleri için etiket, ipucu, traits ayarlamaya yönelik iOS protokolü
  • contentDescription — TalkBack'e öğeleri tanımlamak için Android niteliği
  • WCAG 2.1 — kontrast 4.5:1, dokunma alanları 44×44pt, Dynamic Type desteği
  • Dynamic Type — UIFontMetrics.scaledFont ile iOS'ta metin ölçeklendirme
  • Test — Accessibility Inspector (iOS), Accessibility Scanner (Android), Espresso Checks

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun