إمكانية الوصول — الأساسيات، VoiceOver وTalkBack للمستخدمين المكفوفين

المؤلف: IT Sectr نُشر: 2026-02-26 وقت القراءة: 9 دق

Accessibility (a11y) — جعل التطبيقات المحمولة قابلة للاستخدام للأشخاص ذوي الإعاقة. يشمل دعم قارئات الشاشة (VoiceOver على iOS، TalkBack على Android)، وتكبير النص (Dynamic Type)، وتباين ألوان كافٍ (WCAG 2.1 المستوى AA)، والتنقل بدون بصر وبدائل للإيماءات. وفقًا لمنظمة الصحة العالمية (2023)، يعيش أكثر من 1.3 مليار شخص (16% من السكان) مع شكل من أشكال الإعاقة — إمكانية الوصول ليست خيارًا، بل ضرورة. تعرف على المزيد في وثائق Apple الرسمية حول إمكانية الوصول.

الرئيسية

  • Accessibility — قابلية استخدام التطبيق للأشخاص ذوي الإعاقة (البصر، السمع، الحركة)
  • VoiceOver — قارئ شاشة Apple الذي يقرأ عناصر الواجهة بصوت عالٍ على iOS وmacOS
  • TalkBack — قارئ شاشة Google لنظام Android مع تحكم بالإيماءات بدون بصر
  • WCAG 2.1 — المعيار الدولي لإمكانية الوصول: تباين 4.5:1، حجم مناطق اللمس 44×44pt
  • contentDescription — سمة Android لوصف العناصر التي يقرأها TalkBack

ما هي إمكانية الوصول (a11y) في التطبيقات المحمولة؟

Accessibility (اختصارًا a11y — 11 حرفًا بين «a» و«y») — ممارسة تطوير التطبيقات القابلة للاستخدام من قبل الأشخاص ذوي الإعاقات البصرية والسمعية والحركية والمعرفية. في تطوير التطبيقات المحمولة، تغطي إمكانية الوصول أربعة سيناريوهات رئيسية: المستخدمون المكفوفون (قارئات الشاشة)، المستخدمون ضعاف البصر (التكبير، التباين)، المستخدمون الصم وضعاف السمع (الترجمة، البدائل البصرية للصوت)، والمستخدمون ذوو القدرة الحركية المحدودة (التحكم الصوتي، Switch Control، مناطق اللمس الكبيرة).

المتطلبات القانونية — في العديد من البلدان، إمكانية الوصول إلزامية قانونًا. الولايات المتحدة: القسم 508 وقانون ADA. الاتحاد الأوروبي: قانون إمكانية الوصول الأوروبي (2025). المملكة المتحدة: قانون المساواة 2010. بدون دعم إمكانية الوصول، يمكن أن يصبح التطبيق هدفًا للدعاوى القضائية — في الولايات المتحدة في 2023، تم رفع أكثر من 4000 دعوى قضائية بشأن المنتجات الرقمية غير المتاحة. تتحقق Apple وGoogle من إمكانية الوصول أثناء مراجعة التطبيقات: إرشادات مراجعة App Store (4.2) ومتجر Google Play يطلبان حدًا أدنى من دعم إمكانية الوصول.

الحجة التجارية — إمكانية الوصول توسع جمهورك. وفقًا لتقرير Return on Disability (2021)، يتحكم الأشخاص ذوو الإعاقة في 13 تريليون دولار من الدخل المتاح سنويًا. التطبيقات المتاحة أيضًا ترتيبها أفضل في البحث (HTML دلالي، نصوص بديلة)، ولها تقييمات مستخدم أعلى ومراجعات أقل حول مشكلات تجربة المستخدم. في IT Sectr، ندرج إمكانية الوصول في تعريف الإنجاز لجميع المشاريع — إنه معيار جودة، وليس تحسينًا اختياريًا.

إمكانية الوصول في iOS: VoiceOver وUIAccessibility

VoiceOver — قارئ شاشة Apple المدمج في iOS وiPadOS وmacOS. يمرر المستخدم إصبعه عبر الشاشة، ويقرأ VoiceOver اسم العنصر تحت إصبعه. النقر المزدوج ينشط العنصر. يدعم VoiceOver أكثر من 40 إيماءة: التمرير بثلاثة أصابع (التمرير)، النقر المزدوج بإصبعين (إيقاف)، إيماءة Z (العودة). يتحكم المطورون في ما وكيف يقرأ VoiceOver من خلال بروتوكول UIAccessibility وخصائص accessibilityLabel وaccessibilityTraits وaccessibilityHint.

swift
class CustomButton: UIButton {

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

    // تجاوز accessibilityLabel
    override var accessibilityLabel: String? {
        get { return "زر إرسال النموذج" }
        set {}
    }

    // تجاوز accessibilityHint
    override var accessibilityHint: String? {
        get { return "انقر مرتين لإرسال البيانات" }
        set {}
    }

    // تجاوز 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

SwiftUI يوفر معدّلات إمكانية الوصول: .accessibilityLabel()، .accessibilityHint()، .accessibilityAddTraits()، .accessibilitySortPriority(). بشكل افتراضي، جميع عناصر SwiftUI القياسية (Text، Button، Image) هي بالفعل عناصر إمكانية الوصول مع تسميات تلقائية. للعروض المخصصة، استخدم .accessibilityElement(children: .combine) لدمج العناصر الفرعية في عنصر واحد. يدعم SwiftUI تلقائيًا Dynamic Type وVoiceOver.

swift
VStack {
    Image(systemName: "trash")
        .accessibilityLabel(Text("حذف العنصر"))
    Text("سلة المهملات")
        .font(.body)
}
.accessibilityElement(children: .combine)
.accessibilityAddTraits(.isButton)
.accessibilityHint(Text("يحذف العنصر المحدد بشكل دائم"))

إمكانية الوصول في Android: TalkBack وcontentDescription

TalkBack — قارئ شاشة Google، مثبت مسبقًا على معظم أجهزة Android (متاح على Google Play لجميع إصدارات Android 5+). يستخدم TalkBack نفس الإيماءات التي يستخدمها VoiceOver: التمرير للتنقل، النقر المزدوج للتنشيط. يحدد المطورون أوصاف العناصر من خلال السمة android:contentDescription في XML أو عبر setContentDescription() في الكود. بالنسبة إلى ImageView، contentDescription إلزامي — بدونه، سيقول TalkBack «غير موسوم» أو سيقرأ اسم الملف.

kotlin
// 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

المناطق المباشرة — آلية Android لإعلام TalkBack بتغييرات المحتوى دون تركيز. تقبل السمة android:accessibilityLiveRegion ثلاث قيم: none (بدون إشعارات)، polite (الإعلان بعد الحالي)، assertive (الإعلان فورًا). استخدم polite لتحديثات حالة التحميل، وassertive للأخطاء الحرجة. الإفراط في استخدام assertive سيخلق فوضى للمستخدم — سيقاطع TalkBack الإجراء الحالي باستمرار.

Accessibility Scanner

Accessibility Scanner — تطبيق مجاني من Google لاختبار إمكانية الوصول لتطبيقات Android دون الوصول إلى الكود المصدري. يفحص الماسح: تباين النص، حجم مناطق اللمس (48×48dp كحد أدنى وفقًا لإرشادات إمكانية الوصول لنظام Android)، contentDescription لـ ImageView، والتسلسل الهرمي الصحيح للعناصر. للاختبارات الآلية، استخدم AccessibilityChecks من Espresso — تتكامل مع CI/CD وتتحقق من إمكانية الوصول مع كل بناء.

WCAG 2.1: التباين والحجم ومناطق اللمس

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 التباين (النص)AA4.5:1 للعادي، 3:1 للكبير4.5:1 للعادي، 3:1 للكبير
1.4.11 التباين (غير النص)AA3:1 للأيقونات والحدود3:1 للأيقونات والحدود
2.5.5 حجم الهدفAAA44×44pt48×48dp
2.3.3 الرسوم المتحركةAAAprefers-reduced-motionandroid:animateLayoutChanges
4.1.2 الاسم، الدور، القيمةAaccessibilityLabel، traitscontentDescription، 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 عريض). الشعارات والعناصر الزخرفية لا تتطلب تباينًا.

اختبار إمكانية الوصول: الأدوات وقائمة التحقق

اختبار iOS — Accessibility Inspector في Xcode (Xcode → Open Developer Tool → Accessibility Inspector) يتحقق من التسمية والخصائص والتلميح لكل عنصر. يمكن تمكين VoiceOver في الإعدادات أو عبر اختصار إمكانية الوصول (النقر الثلاثي على الزر). للاختبارات الآلية، استخدم XCUITest مع XCTAssertTrue(app.staticTexts["label"].isAccessibilityElement). توصي Apple باختبار جميع شاشات التطبيق مع تمكين VoiceOver.

اختبار Android — Accessibility Scanner (متجر Play) يتحقق من التباين وحجم مناطق اللمس وcontentDescription. للأتمتة: Espresso AccessibilityChecks (الاستيراد: 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 في إعدادات النظام. قائمة التحقق هذه جزء من تعريف الإنجاز لكل سباق.

الأسئلة الشائعة

كيف يختلف VoiceOver عن TalkBack؟

VoiceOver — قارئ شاشة Apple لنظام iOS وiPadOS وmacOS. يستخدم إيماءات بإصبع واحد和多دة أصابع (التمرير، النقر المزدوج). TalkBack — نظير Google لنظام Android بإيماءات مماثلة. VoiceOver يقرأ accessibilityLabel، TalkBack يقرأ contentDescription. كلاهما يدعم شاشات برايل والتحكم الصوتي. لا توجد اختلافات جوهرية في الوظائف.

ما هو contentDescription في Android؟

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 عريض). المستوى AAA: 7:1 للعادي و4.5:1 للكبير. تحقق من التباين في كلا السمتين (فاتح/داكن). انتهاك التباين هو مشكلة إمكانية الوصول الأكثر شيوعًا في التطبيقات المحمولة وفقًا لـ Google.

هل أحتاج إلى دعم Dynamic Type في iOS؟

نعم، توصي Apple بـ Dynamic Type لجميع التطبيقات. يحدد المستخدم حجم النص في الإعدادات. يستخدم المطورون UIFontMetrics.scaledFont — يتم تحجيم الخط تلقائيًا. بدون Dynamic Type، لا يمكن للمستخدمين ضعاف البصر قراءة النص. يتحقق iOS تلقائيًا من Dynamic Type أثناء مراجعة App Store.

ما هو WCAG؟

WCAG (Web Content Accessibility Guidelines) — المعيار الدولي لإمكانية الوصول للمحتوى من W3C. الإصدار 2.1 (2018) يتضمن معايير للتطبيقات المحمولة: التباين، حجم مناطق اللمس (44×44pt)، دعم قارئات الشاشة، بدائل الإيماءات، والترجمة. المستوى AA هو المعيار الأدنى للنشر في App Store وGoogle Play.

الملخص

  • Accessibility — قابلية استخدام التطبيقات لـ 1.3 مليار شخص ذوي إعاقة (منظمة الصحة العالمية، 2023)
  • VoiceOver (iOS) وTalkBack (Android) — قارئات شاشة للمستخدمين المكفوفين
  • UIAccessibility — بروتوكول iOS لتعيين التسمية والتلميح والخصائص لعناصر إمكانية الوصول
  • contentDescription — سمة Android لوصف العناصر لـ TalkBack
  • WCAG 2.1 — تباين 4.5:1، مناطق لمس 44×44pt، دعم Dynamic Type
  • Dynamic Type — تحجيم النص في iOS عبر UIFontMetrics.scaledFont
  • الاختبار — Accessibility Inspector (iOS)، Accessibility Scanner (Android)، Espresso Checks

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا