Learn by Doing: an iOS VoiceOver Guide for Developers

May 9, 2023
Three iPhones, an iPhone 13 on top with accessibility screen opened

Most developers would agree that accessibility is important. However only a few of us actively work on improving the accessibility of the apps and websites we build. Sure, we know that using semantic html is imporant and images should have alt text, but it's hard to build features you've not really experienced.

Have you never used a screen reader on your phone? If the answer is "no", then I challenge you to take the plunge and tackle one of the more challenging parts of working with accessibility - screen readers. That’s right, in just 10 minutes you can go from “what even is this" to a "fizz-buzz" level of capability with VoiceOver. Are you ready? Grab your phone and let’s go.

What even is VoiceOver?

VoiceOver is the name of the screen reader app for iPhone that allows users with visual impairments, dyslexia, and other challenges to effectively interact with their phone. The equivalent software on Android is called TalkBack, and on Windows there is Narrator. They are all similar, but not the same, so this tutorial focuses explicitly on VoiceOver on iOS.

What You Need

iPhone with FaceID and 10 minutes to spare!

Before You Start

The one thing I wished someone had told me the first time I tried VoiceOver: if VoiceOver starts reading stuff out in an endless stream (incoming notifications, calls, any text on the page) and you want it to just stop, so you could hear yourself think: tap once with two fingers (two-finger single-tap) anywhere on the screen. This will pause/resume the narration.

And most importantly: do not panic and start pressing the phone side buttons. For most phones these are used for emergency services. This is how you end up accidentally calling the police, which actually happened to a colleague!

Setup

Close all other apps on your phone. Find a quiet place so you can hear the VoiceOver.

Exercise 1: Enable VoiceOver

  1. Open Settings → Accessibility → Voiceover
  2. Toggle VoiceOver on
  3. Two-finger single-tap anywhere on the screen to toggle speech
Screenshot of voiceover screen with coiveover enabled

You’ll notice that as soon as you enable VoiceOver, it will start reading out text on the screen. It will also read out any incoming notifications which may or may not be what you want. The two-finger single-tap is your friend here and allows you to toggle the speech on and off.

Note: two-finger double-tap is for starting/stopping apps across iOS. So e.g. if you had Spotify or Audible running in the background, and used a two-finger double-tap, then it would toggle those apps on and off. This is why I suggested closing all other apps before enabling VoiceOver to prevent accidentally triggering them.

Exercise 2: Close VoiceOver

  1. Still on the VoiceOver page, one-finger single-tap (also referred to as "touch") on elements on the screen to have voiceover read them out. Remember you can use two-finger single-tap anywhere on the screen to toggle speech and stop voiceover when it’s reading out anything especially long
  2. You can practice not relying on vision for navigation by enabling Screen Curtain: three-finger triple-tap anywhere on the screen and you’ll see your whole phone screen will go dark. This will let you practice VoiceOver without peeking. Try sliding your finger across the screen to understand where content and intractable elements are positioned. Three-finger triple-tap again to turn Screen Curtain off.
  3. one-finger single-tap on the "VoiceOver" toggle. Notice it now has a border which means it is the active element
  4. one-finger double-tap anywhere on the screen. This will toggle the VoiceOver button. You will probably naturally try to double tap on the element itself since you can see and that’s what you’re used to and that will work just fine, but just be aware that with VoiceOver enabled, it is the action on the highlighted element that will get triggered, and not the action on the element under your finger.
Phone with screen curtain enabled/disabled

Exercise 3: Practice Gestures

  1. Turn VoiceOver on again
  2. one-finger single-tap on the "VoiceOver Practice" button
  3. one-finger double-tap anywhere on the screen. This will open the VoiceOver Practice Screen. This is a place where you can practice voiceover gestures.
  4. Practice gestures and see what they do (see VoiceOver docs for more details):
One FingerTwo FingersThree Fingers
Single Tapspeak itemtoggle speechread item summary
Double Tapactivatemagic tap (see "extra credit" for more details)toggle mute
Triple Taplong pressshow item choosertoggle screen curtain
Swipe Upprevious rotor itemread from topscroll down
Swipe Downnext rotor itemread allscroll up
Swipe Leftmove to previous itemmove outscroll right
Swipe Rightmove to next itemmove inscroll left
Scrubescape (dismiss an alert or return to previous screen)
  1. Turn voiceover off

Exercise 4: Navigate From Lock Screen

Note: this is assuming you have a phone with Face ID!

  1. Turn VoiceOver on
  2. Press the power button on the side once to lock your phone
  3. Pick up your phone again. It will probably unlock immediately due to face ID, but you’ll find that the "swipe up to open" does not work like you’re used to. Try it now: if you swipe up quickly as I do, you’ll just hear a chime and nothing happens.

Now instead try this:

  1. swipe up from the bottom of the screen by about half an inch until you hear a small chime
  2. without taking your finger swipe up by a further half an inch until you hear a slightly different chime
  3. lift your finger up from the screen

This will open your phone. Try it a few times to make sure you are comfortable locking and unlocking your phone with VoiceOver.

  1. Turn voiceover off

Exercise 5: Settings and Controls

Remember how you swiped from the bottom to open lock screen? This is the gesture also used to open settings and app switcher. The first chime is just to say "yep, I’m listening". Then as you keep swiping, releasing after the second and third chimes will execute different actions.

Swipe from bottomSwipe from top
First chimenothingnothing
Second chimego back / homeopen control center
Third chimeopen app switcheropen notifications
  1. Turn VoiceOver on
  2. Swipe from top until the second chime → this opens control centre
  3. Swipe from bottom until the second chime → you arrive back to the previous page
  4. Swipe from top until the third chime → this opens the notification centre
  5. Swipe from bottom until the second chime → you arrive back to the previous page
  6. Swipe from bottom until the second chime again → you arrive on the home screen
  7. Swipe from bottom until the third chime → this opens the app switcher
  8. From the app switcher, tap on the Settings page to select it
  9. One-finger double-tap to activate it and navigate back to the Settings page
  10. Turn VoiceOver off

It’s best to try each of these a couple of times until you feel comfortable with the gestures.

Exercise 6: Navigating Between Apps

Now it’s time to interact with some apps!

  1. Turn VoiceOver on
  2. Swipe from bottom until the second chime again → you arrive on the home screen
  3. If you have more than one page of apps, you can use three-finger swipe left or right to navigate between the pages
  4. Use touch (one-finger single-tap, or just slide) to select which app to use
  5. Select an app with touch and one-finger double-tap to open it
  6. You can now navigate inside the app using the gestures outlined in Exercise 3
  7. When you’re done, swipe from bottom until the third chime to open the app switcher
  8. Close the app from the app switcher (select with touch and swipe up to close)
  9. Select the settings screen from the app switcher
  10. Turn VoiceOver off

Extra Credit: Enable / Disable VoiceOver with Siri

Siri logo

If you have Siri enabled, you can enable/disable VoiceOver using Voice commands:

To Enable: "Hey Siri, enable voiceover"

To Disable: "Hey Siri, disable voiceover"

In both cases, a single press of the side power button will get rid of the overlayed UI elements so you can get on with whatever you were doing.

Extra Credit: Enable / Disable VoiceOver with Accessibility Shortcuts

Now that you’re more comfortable using VoiceOver, you could look at setting up VoiceOver Shortcuts

  1. Open Settings → Accessibility → Accessibility Shortcut. Here you can configure a custom action for "triple-click the side button".
  2. Tap on VoiceOver (you should see a blue tick next to it)
  3. Triple-click the side button to enable/disable VoiceOver

You can select more than one item for the Accessibility Shortcut, in which case the triple tap will open a bottom sheet with all your selected options.

Extra Credit: Magic Tap

The "Magic Tap" is a two-finger double-tap when VoiceOver is on, and it allows you to execute certain actions even when the app isn’t currently on the foreground. To test this out:

  1. Play a song on Spotify (or Audible, Apple Music)
  2. Turn VoiceOver On
  3. two-finger double-tap → and you’ll find the audio will toggle on/off regardless of what screen you were on when you tapped

It is worth noting that Magic Tap is configured by the specific app developer and is app-dependent. This means that each app could listen to the magic tap and perform any action the configure, which could make it a bit unpredictable.

In Summary

You made it to the end, great work! I hope you found the whole thing to be easier than you expected.

The next step is to enable VoiceOver again and complete the main happy-path flow in the app / website you are currently working on. Could you do it with screen curtain enabled? If not, then your product will need some accessibility tweaks. If you are using React Native, check out React Native AMA to help you do his on mobile.

If you learn better from a video, the official YouTube content from Apple gives provides a great overview.

Related Posts

Accessibility as a First-Class Citizen with React Native AMA

July 26, 2022
Say you’re a mobile app developer and you’ve received a set of beautiful designs that were created with accessibility in mind. You might think this is enough to create an accessible mobile app, but it’s not. Here's a new library that can help.

Front-End Development for Screen Readers: A Five-Second Jumpstart (macOS)

June 17, 2021
Accessibility can be a daunting field to dive into. Following best practices and using automated tools will get you a long way, but stepping into the shoes of your users will give you perspective and knowledge that can only be gained firsthand.

Why Choose React Native?

May 24, 2021
React Native unifies development teams by leveraging the same set of technologies on multiple platforms. Here are some of the key reasons why you might want to consider React Native for your next development project.