Accessibility (a11y) — memastikan aksesibilitas aplikasi mobile bagi penyandang disabilitas. Mencakup dukungan pembaca layar (VoiceOver di iOS, TalkBack di Android), penskalaan teks (Dynamic Type), kontras warna yang memadai (WCAG 2.1 level AA), navigasi tanpa penglihatan dan alternatif gerakan. Menurut data WHO (2023), lebih dari 1,3 miliar orang (16% populasi) hidup dengan suatu bentuk disabilitas — accessibility bukan pilihan, melainkan keharusan. Selengkapnya — di dokumentasi resmi Apple tentang accessibility.
Poin Utama
Accessibility (disingkat a11y — 11 huruf antara «a» dan «y») — praktik pengembangan aplikasi yang dapat diakses oleh penyandang gangguan penglihatan, pendengaran, motorik, dan kognitif. Dalam pengembangan mobile, accessibility mencakup empat skenario utama: pengguna tunanetra (pembaca layar), tunanetra sebagian (penskalaan, kontras), tunarungu dan kurang dengar (teks, alternatif visual untuk suara), pengguna dengan keterbatasan motorik (kontrol suara, Switch Control, area sentuh besar).
Persyaratan hukum — di banyak negara, accessibility wajib secara hukum. AS: Section 508 dan ADA. UE: European Accessibility Act (2025). Inggris: Equality Act 2010. Tanpa dukungan accessibility, aplikasi dapat menjadi sasaran gugatan hukum — di AS pada tahun 2023 diajukan lebih dari 4.000 gugatan tentang ketidakaksesibilitas produk digital. Apple dan Google memeriksa accessibility saat moderasi aplikasi: App Store Review Guidelines (4.2) dan Google Play Store mewajibkan dukungan aksesibilitas minimal.
Argumen bisnis — aksesibilitas meningkatkan audiens. Menurut Return on Disability (2021), penyandang disabilitas mengendalikan $13 triliun pendapatan disposabel per tahun. Aplikasi yang dapat diakses juga memiliki peringkat lebih baik di pencarian (HTML semantik, teks alternatif), peringkat pengguna lebih tinggi, dan lebih sedikit ulasan tentang masalah UX. Di IT Sectr kami menyertakan accessibility ke dalam definition of done semua proyek — ini adalah standar kualitas, bukan peningkatan opsional.
VoiceOver — pembaca layar Apple, tertanam di iOS, iPadOS dan macOS. Pengguna menggeser jari di layar, VoiceOver membacakan nama elemen di bawah jari. Ketuk dua kali — aktivasi elemen. VoiceOver mendukung lebih dari 40 gestur: tiga jari geser (menggulir), dua jari ketuk dua kali (berhenti), gestur Z (kembali). Pengembang mengontrol apa dan bagaimana VoiceOver membaca melalui protokol UIAccessibility dan properti accessibilityLabel, accessibilityTraits, accessibilityHint.
class CustomButton: UIButton {
override var isAccessibilityElement: Bool {
get { return true }
set {}
}
// override accessibilityLabel
override var accessibilityLabel: String? {
get { return "Tombol kirim formulir" }
set {}
}
// override accessibilityHint
override var accessibilityHint: String? {
get { return "Ketuk dua kali untuk mengirim data" }
set {}
}
// override accessibilityTraits
override var accessibilityTraits: UIAccessibilityTraits {
get { return .button }
set {}
}
}
// Dynamic Type — penskalaan teks
titleLabel.font = UIFontMetrics.default.scaledFont(
for: UIFont.systemFont(ofSize: 16)
)
titleLabel.adjustsFontForContentSizeCategory = true
Tipografi dinamis — Dynamic Type di iOS memungkinkan pengguna memilih ukuran teks (dari XS hingga XXXL). Pengembang menggunakan UIFontMetrics.scaledFont untuk penskalaan otomatis. Teks harus ditampilkan dengan benar di semua ukuran: baris tidak boleh terpotong, tombol harus membesar secara proporsional dengan teks. UITableView secara otomatis memperbarui tinggi sel saat ukuran teks berubah. Mengabaikan Dynamic Type berarti membuat aplikasi tidak dapat diakses oleh pengguna tunanetra sebagian.
SwiftUI menyediakan pengubah untuk accessibility: .accessibilityLabel(), .accessibilityHint(), .accessibilityAddTraits(), .accessibilitySortPriority(). Secara default, semua elemen standar SwiftUI (Text, Button, Image) sudah menjadi elemen accessibility dengan label otomatis. Untuk View kustom, gunakan .accessibilityElement(children: .combine) untuk menggabungkan elemen turunan menjadi satu. SwiftUI secara otomatis mendukung Dynamic Type dan VoiceOver.
VStack {
Image(systemName: "trash")
.accessibilityLabel(Text("Hapus elemen"))
Text("Tempat sampah")
.font(.body)
}
.accessibilityElement(children: .combine)
.accessibilityAddTraits(.isButton)
.accessibilityHint(Text("Menghapus elemen yang dipilih tanpa kemungkinan pemulihan"))
TalkBack — pembaca layar Google, terinstal di sebagian besar perangkat Android (tersedia di Google Play untuk semua versi Android 5+). TalkBack menggunakan gestur yang sama dengan VoiceOver: geser untuk navigasi, ketuk dua kali untuk aktivasi. Pengembang mengatur deskripsi elemen melalui atribut android:contentDescription di XML atau melalui setContentDescription() di kode. Untuk ImageView, contentDescription wajib — tanpanya TalkBack melaporkan «tidak diberi label» atau membaca nama file.
// XML: contentDescription untuk ImageView
<ImageView
android:id="@+id/iconDelete"
android:src="@drawable/ic_delete"
android:contentDescription="@string/delete_button_desc"
android:focusable="true"
android:clickable="true" />
// Kotlin: pengaturan terprogram
iconDelete.contentDescription = getString(R.string.delete_button_desc)
// Accessibility Delegate (kustom)
iconDelete.accessibilityDelegate = object : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfo
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "Tombol hapus"
info.contentDescription = "Hapus elemen yang dipilih"
info.className = Button::class.java.name
}
}
// Live Regions untuk pembaruan dinamis
textView.accessibilityLiveRegion = View.ACCESSIBILITY_LIVE_REGION_POLITE
Live Regions — mekanisme Android untuk memberi tahu TalkBack tentang perubahan konten tanpa fokus. Atribut android:accessibilityLiveRegion memiliki tiga nilai: none (tanpa pemberitahuan), polite (umumkan setelah saat ini), assertive (umumkan segera). Gunakan polite untuk pembaruan status pemuatan, assertive — untuk kesalahan kritis. Penyalahgunaan assertive akan menyebabkan kekacauan bagi pengguna — TalkBack akan terus-menerus menginterupsi tindakan saat ini.
Accessibility Scanner — aplikasi gratis dari Google untuk menguji aksesibilitas aplikasi Android tanpa akses ke kode sumber. Pemindai memeriksa: kontras teks, ukuran area sentuh (minimal 48×48dp menurut Android Accessibility Guidelines), keberadaan contentDescription untuk ImageView, kebenaran hierarki elemen. Untuk pengujian otomatis, gunakan AccessibilityChecks dari Espresso — mereka terintegrasi dengan CI/CD dan memeriksa accessibility di setiap build.
WCAG 2.1 (Web Content Accessibility Guidelines) — standar aksesibilitas internasional yang dikembangkan oleh W3C. Versi 2.1 (2018) mencakup 13 kriteria tambahan untuk aplikasi mobile. Tingkat kesesuaian: A (minimal), AA (wajib bagi sebagian besar organisasi), AAA (maksimal). Apple dan Google merekomendasikan level AA sebagai minimum untuk publikasi aplikasi. WCAG 2.2 dirilis pada tahun 2023 dengan klarifikasi untuk fokus dan input.
Kriteria utama untuk pengembangan mobile: kontras teks minimal 4.5:1 (AA) atau 7:1 (AAA), ukuran area sentuh minimal 44×44pt (iOS) atau 48×48dp (Android), dukungan orientasi lanskap dan potret tanpa kehilangan fungsionalitas, kemampuan mematikan animasi (prefers-reduced-motion), keberadaan teks untuk multimedia, kompatibilitas dengan kontrol suara (Voice Control di iOS, Voice Access di Android).
| Kriteria WCAG 2.1 | Level | Persyaratan untuk iOS | Persyaratan untuk Android |
|---|---|---|---|
| 1.4.3 Kontras (teks) | AA | 4.5:1 untuk normal, 3:1 untuk besar | 4.5:1 untuk normal, 3:1 untuk besar |
| 1.4.11 Kontras (non-teks) | AA | 3:1 untuk ikon, batas | 3:1 untuk ikon, batas |
| 2.5.5 Ukuran target | AAA | 44×44pt | 48×48dp |
| 2.3.3 Animasi | AAA | prefers-reduced-motion | android:animateLayoutChanges |
| 4.1.2 Nama, peran, nilai | A | accessibilityLabel, traits | contentDescription, role |
Alat pemeriksa kontras — Colour Contrast Analyser (TPGI), WebAIM Contrast Checker, Stark (Figma), Accessibility Inspector (Xcode). Di IT Sectr kami memeriksa kontras pada tahap desain (Figma + Stark) dan kembali pada tahap pengembangan (Accessibility Inspector / Accessibility Scanner). Persyaratan minimal — 4.5:1 untuk semua teks kurang dari 18pt (14pt bold). Untuk logo dan elemen dekoratif, kontras tidak diperlukan.
Pengujian iOS — Accessibility Inspector di Xcode (Xcode → Open Developer Tool → Accessibility Inspector) memeriksa label, traits, hint untuk setiap elemen. VoiceOver dapat diaktifkan di pengaturan atau melalui Accessibility Shortcut (tekan tombol tiga kali). Untuk pengujian otomatis, gunakan XCUITest dengan XCTAssertTrue(app.staticTexts["label"].isAccessibilityElement). Apple merekomendasikan menguji semua layar aplikasi dengan VoiceOver aktif.
Pengujian Android — Accessibility Scanner (Play Store) memeriksa kontras, ukuran area sentuh, contentDescription. Untuk otomatisasi: Espresso AccessibilityChecks (import: androidTestImplementation 'androidx.test.espresso:espresso-accessibility:3.5.1'). Google merekomendasikan daftar periksa: setiap ImageView memiliki contentDescription, area sentuh tidak kurang dari 48×48dp, teks dapat diskalakan hingga 200% tanpa terpotong, semua elemen dapat dijangkau dengan geseran TalkBack.
Daftar periksa IT Sectr — sebelum rilis kami memeriksa: (1) VoiceOver/TalkBack membaca semua elemen dengan benar, (2) teks dapat diskalakan ke ukuran maksimal tanpa kehilangan fungsionalitas, (3) semua ImageView memiliki contentDescription, (4) kontras teks ≥4.5:1 di semua tema, (5) area sentuh ≥44pt/48dp, (6) tidak ada menu konteks yang hanya dapat diakses dengan tekan lama, (7) dukungan Reduce Motion / Remove Animations di pengaturan sistem. Daftar periksa ini menjadi bagian dari definition of done setiap sprint.
Pertanyaan yang Sering Diajukan
VoiceOver — pembaca layar Apple untuk iOS, iPadOS, macOS. Menggunakan gestur satu dan beberapa jari (geser, ketuk dua kali). TalkBack — padanan Google untuk Android dengan gestur serupa. VoiceOver membaca accessibilityLabel, TalkBack — contentDescription. Keduanya mendukung layar Braille dan kontrol suara. Tidak ada perbedaan mendasar dalam fungsionalitas.
contentDescription — atribut View di Android yang mengatur deskripsi teks untuk TalkBack. Tanpanya TalkBack melaporkan «tidak diberi label» atau membaca nama kelas (ImageView, Button). Ditambahkan melalui android:contentDescription="@string/desc" di XML atau view.contentDescription = "teks" di kode. Untuk gambar dekoratif, gunakan contentDescription=@null.
Menurut WCAG 2.1 level AA: 4.5:1 untuk teks normal dan 3:1 untuk teks besar (dari 18pt atau 14pt bold). Level AAA: 7:1 untuk normal dan 4.5:1 untuk besar. Periksa kontras di dua tema (terang/gelap). Pelanggaran kontras adalah masalah aksesibilitas paling umum di aplikasi mobile menurut data Google.
Ya, Apple merekomendasikan Dynamic Type untuk semua aplikasi. Pengguna mengatur ukuran teks di Pengaturan. Pengembang menggunakan UIFontMetrics.scaledFont — font diskalakan secara otomatis. Tanpa Dynamic Type, pengguna dengan penglihatan lemah tidak akan bisa membaca teks. iOS secara otomatis memeriksa Dynamic Type saat moderasi di App Store.
WCAG (Web Content Accessibility Guidelines) — standar aksesibilitas konten internasional dari W3C. Versi 2.1 (2018) mencakup kriteria untuk aplikasi mobile: kontras, ukuran area sentuh (44×44pt), dukungan pembaca layar, alternatif gerakan, teks. Level AA — standar minimal untuk publikasi di App Store dan Google Play.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga