Aperçu gratuit · E-book #2

Accessibilité iOS : développez une application inclusive pour élargir votre audience

VoiceOver, UIAccessibility, Rotor et actions personnalisées, appliqués pas à pas à une vraie application publiée sur l'App Store : Escape From Blindness.

Michaël Martinez · développeur iOS freelance depuis plus de 8 ans
Première édition en , sans IA générative. Mise à jour en .

Module 1

Créer des applications iOS inclusives

Les applications iOS sont assez complexes à développer, car vous devez faire face à une multitude de préoccupations, des spécifications produit à la mise sur le marché.

Avec toutes ces préoccupations en tête, est-ce que cela vaut la peine de rendre votre application accessible à tous les utilisateurs ? Absolument ! Dans ce guide, nous discuterons des raisons pour lesquelles vous devriez envisager d'ajouter un support d'accessibilité supplémentaire et comment vous pouvez comprendre les problématiques liées, afin que cela devienne naturel pour vous d'en tenir compte à l'avenir.

L'impact de l'accessibilité pour les utilisateurs déficients visuels sur iOS

Les utilisateurs déficients visuels sont très enclins à utiliser les nouvelles technologies, car elles peuvent les aider dans leur vie quotidienne. Ce sont des utilisateurs fidèles, que beaucoup d'applications oublient encore.

De plus, l'iPhone est l'appareil préféré des personnes qui utilisent un lecteur d'écran : 7 sur 10 l'ont comme téléphone principal, 72 % en Europe (enquête WebAIM 2024). Si vous développez des applications iOS, vous touchez donc déjà une grande partie des utilisateurs déficients visuels.

Dans ce guide, vous apprendrez à :

  • Mieux comprendre les interactions des utilisateurs déficients visuels avec leur iPhone.
  • Intégrer naturellement l'accessibilité dans votre flux de travail lors du développement de vos nouvelles fonctionnalités.
  • Appliquer ce que vous apprenez à de nouveaux projets ou à des projets existants, quelle que soit leur taille.

Module 2

Développer une application avec l'accessibilité en tête

L'application exemple « Escape From Blindness »

Nous allons créer une application d'Escape Room nommée « Escape From Blindness ». Pour avancer dans les niveaux, il faudra résoudre des défis portant sur l'utilisation de VoiceOver, l'outil principal qui rend iOS accessible aux utilisateurs déficients visuels.

Cette application montre un exemple simple pour présenter les idées essentielles de UIAccessibility. Elle contient quatre modes de jeu :

  1. Quiz fermé : avancez en choisissant la bonne réponse.
  2. Quiz ouvert : avancez en écrivant la bonne réponse dans la zone de texte.
  3. Niveaux avec rotor : validez les réponses grâce au rotor VoiceOver.
  4. Niveaux avec actions personnalisées : validez toutes les réponses du niveau dans n'importe quel ordre.
Écran d'Escape From Blindness qui demande d'activer VoiceOver, avec un bouton Ouvrir les Réglages et l'icône d'accessibilité.
Le jeu fonctionne seulement avec VoiceOver activé. Sinon, nous indiquons à l'utilisateur comment l'activer.

Module 3

Définir les spécifications du jeu

Tout le code est sur le dépôt GitHub du projet, avec son état initial et tout son historique. Chaque étape de programmation de ce guide renvoie au commit qui l'a introduite : vous lisez le code tel qu'il était à ce moment-là.

N'hésitez pas à tester le jeu final que nous allons développer en téléchargeant l'application sur l'App Store. Elle inclut certains modules de ressources que nous ne couvrirons pas dans ce tutoriel.

Nous développerons l'application dans l'ordre suivant :

  1. Définir les écrans d'introduction et de fin expliquant le concept du jeu et remerciant l'utilisateur.
  2. Définir l'écran d'explication de VoiceOver indiquant qu'il est essentiel pour utiliser le jeu et expliquant comment l'activer.
  3. Définir le GameFlow chargé de valider les réponses et de transmettre la navigation vers le niveau ou chapitre suivant à l'AppCoordinator.
  4. Définir l'AppCoordinator chargé d'assurer la navigation entre les différents écrans selon le scénario des chapitres.
  5. Développer les niveaux à questions fermées.
  6. Développer les niveaux à questions ouvertes.
  7. Développer les niveaux basés sur le rotor.
  8. Développer les niveaux utilisant des actions personnalisées.

Cette application a été développée en TDD. Expliquer ce processus dépasserait le cadre de ce guide, car nous souhaitons nous concentrer sur les fonctionnalités d'accessibilité : vous trouverez tous les tests unitaires dans le dépôt GitHub.

Écran Choisis ton niveau d'Escape From Blindness : les niveaux sont regroupés par chapitre, La Cité perdue, La Vallée cachée et Le Tombeau caché.
Le jeu est découpé en chapitres qui contiennent des niveaux : la progression est sauvegardée.

Module 4

Le framework UIAccessibility

Avant d'aborder l'implémentation des écrans, un petit rappel sur VoiceOver.

VoiceOver est un outil d'assistance pour les personnes déficientes visuelles sur iOS et macOS. Il lit le contenu de l'écran en temps réel. Lorsqu'une application prend bien en compte l'accessibilité, l'expérience des utilisateurs de VoiceOver peut être aussi bonne, voire meilleure, que celle des autres utilisateurs.

Voici quelques notions sur UIAccessibility. Toutes les vues UIKit possèdent des propriétés dédiées à l'accessibilité. Voici les quatre que l'on retrouve dans la plupart des applications iOS :

Regrouper des éléments et ordonner leur lecture

Vous pouvez aussi désactiver l'accessibilité d'un élément en mettant sa propriété isAccessibilityElement sur false. Une autre approche, que nous n'utiliserons pas dans cet exemple, consiste à regrouper plusieurs éléments ou à définir leur ordre de lecture, lorsque rassembler des éléments améliore l'accessibilité. Voici un exemple de hiérarchie :

containerView
 ├─ child1
 └─ child2

Pour imposer l'ordre de lecture des éléments internes, le conteneur ne doit pas être lui-même un élément accessible : sinon, VoiceOver ne lit plus ses enfants.

containerView.isAccessibilityElement = false
// VoiceOver lira child1, puis child2
containerView.accessibilityElements = [child1, child2]

Pour que VoiceOver lise au contraire le groupe d'un seul trait, faites du conteneur un élément accessible et combinez les accessibilityLabel :

containerView.isAccessibilityElement = true
containerView.accessibilityLabel = [child1.accessibilityLabel, child2.accessibilityLabel]
    .compactMap { $0 }
    .joined(separator: ", ")

Fin de l'aperçu

La suite est dans la formation One Week Apps

Vous venez de lire 4 modules sur 6. Les suivants vous attendent :

La formation complète : La Méthode (4 modules, de l'idée à l'App Store), les e-books Clean Unity et Accessibilité iOS, le bonus App Store, et l'application Focus pour déléguer vos tâches au Runner.

Voir la formation