Accessibility (a11y) — جعل التطبيقات المحمولة قابلة للاستخدام للأشخاص ذوي الإعاقة. يشمل دعم قارئات الشاشة (VoiceOver على iOS، TalkBack على Android)، وتكبير النص (Dynamic Type)، وتباين ألوان كافٍ (WCAG 2.1 المستوى AA)، والتنقل بدون بصر وبدائل للإيماءات. وفقًا لمنظمة الصحة العالمية (2023)، يعيش أكثر من 1.3 مليار شخص (16% من السكان) مع شكل من أشكال الإعاقة — إمكانية الوصول ليست خيارًا، بل ضرورة. تعرف على المزيد في وثائق Apple الرسمية حول إمكانية الوصول.
الرئيسية
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، ندرج إمكانية الوصول في تعريف الإنجاز لجميع المشاريع — إنه معيار جودة، وليس تحسينًا اختياريًا.
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 {}
}
// تجاوز 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 يوفر معدّلات إمكانية الوصول: .accessibilityLabel()، .accessibilityHint()، .accessibilityAddTraits()، .accessibilitySortPriority(). بشكل افتراضي، جميع عناصر SwiftUI القياسية (Text، Button، Image) هي بالفعل عناصر إمكانية الوصول مع تسميات تلقائية. للعروض المخصصة، استخدم .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
المناطق المباشرة — آلية Android لإعلام TalkBack بتغييرات المحتوى دون تركيز. تقبل السمة android:accessibilityLiveRegion ثلاث قيم: none (بدون إشعارات)، polite (الإعلان بعد الحالي)، assertive (الإعلان فورًا). استخدم polite لتحديثات حالة التحميل، وassertive للأخطاء الحرجة. الإفراط في استخدام assertive سيخلق فوضى للمستخدم — سيقاطع TalkBack الإجراء الحالي باستمرار.
Accessibility Scanner — تطبيق مجاني من Google لاختبار إمكانية الوصول لتطبيقات Android دون الوصول إلى الكود المصدري. يفحص الماسح: تباين النص، حجم مناطق اللمس (48×48dp كحد أدنى وفقًا لإرشادات إمكانية الوصول لنظام Android)، contentDescription لـ ImageView، والتسلسل الهرمي الصحيح للعناصر. للاختبارات الآلية، استخدم AccessibilityChecks من Espresso — تتكامل مع CI/CD وتتحقق من إمكانية الوصول مع كل بناء.
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 عريض). الشعارات والعناصر الزخرفية لا تتطلب تباينًا.
اختبار 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 — قارئ شاشة 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 عريض). المستوى 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. سوف نقدم لك النصح ونقترح أفضل حل.