132: Accessibility
00:00:00
◼
►
Welcome to Under the Radar, a show about independent iOS app development.
00:00:04
◼
►
I'm Marco Arment.
00:00:05
◼
►
And I'm David Smith.
00:00:06
◼
►
Under the Radar is never longer than 30 minutes, so let's get started.
00:00:10
◼
►
Today what we want to talk about is accessibility.
00:00:14
◼
►
If you remember from our Q&A episode a couple weeks ago,
00:00:17
◼
►
we had a very brief discussion about accessibility,
00:00:21
◼
►
but I think it's a topic that deserves a much broader discussion
00:00:24
◼
►
than the few minutes you were able to give it inside of that.
00:00:27
◼
►
It turns out also that this week has National Global Accessibility Awareness Day, I think.
00:00:35
◼
►
I don't typically get into these kind of awareness days,
00:00:39
◼
►
but it's just coincided well, and it seemed a good thing to talk about.
00:00:44
◼
►
Because I think accessibility is a topic that is...
00:00:49
◼
►
It's an interesting intersection between something very...
00:00:55
◼
►
It's a very personal side of development,
00:00:57
◼
►
because it tends to interact with people at a level that is different
00:01:02
◼
►
than just our normal development.
00:01:04
◼
►
And I think as a result, accessibility can often become something
00:01:07
◼
►
that you can become very emotional about, or very...
00:01:09
◼
►
It takes a different level of importance than a lot of things.
00:01:13
◼
►
But before I dive into a bit more of what accessibility, the specifics of it,
00:01:17
◼
►
I think it probably makes sense to have a bit of an overview
00:01:20
◼
►
about what it is that we mean when we talk about accessibility.
00:01:23
◼
►
And in general, I would say it's best to think about accessibility
00:01:28
◼
►
as methods of development that make your app usable by specific communities
00:01:36
◼
►
within your user base.
00:01:37
◼
►
And that can take a lot of different uses, take a lot of different paths,
00:01:42
◼
►
depending on if there's different impairments that you may have to be working around,
00:01:45
◼
►
or to consider.
00:01:47
◼
►
But in general, accessibility and usability are one and the same.
00:01:52
◼
►
There are certain things that we might do in our application to make it usable,
00:01:56
◼
►
just for general usability with our general population who uses our application.
00:02:00
◼
►
And then accessibility, I think, is the extreme versions of those,
00:02:05
◼
►
where we have to make it usable by people who don't have all of the affordances
00:02:10
◼
►
that a typical user might have.
00:02:12
◼
►
And so these often get into things like visual impairments,
00:02:15
◼
►
physical impairments, auditory impairments.
00:02:17
◼
►
There's a variety of things that could make our app less usable for somebody.
00:02:21
◼
►
And so accessibility is about making it work for those users.
00:02:26
◼
►
We often tend to think of accessibility as something that's for other people,
00:02:31
◼
►
something that is for people who, "Well, we don't know anybody like that
00:02:34
◼
►
because we're all young, able-bodied developers," whatever.
00:02:37
◼
►
But the reality is almost everybody will use some kind of accessibility feature
00:02:41
◼
►
sometime in their lives.
00:02:43
◼
►
The most common example is text sizing, making text larger as you get older
00:02:49
◼
►
and as your eyes get worse, because that's just how our bodies work.
00:02:52
◼
►
And so it's good to think of accessibility not as a special accommodation
00:02:59
◼
►
for other people, but as a collection of features, tools, and design considerations
00:03:06
◼
►
that make the app usable for as many people as possible.
00:03:11
◼
►
Yeah, and I think that, too, it's the powerful thing of --
00:03:14
◼
►
I remember I used to think of accessibility as this --
00:03:18
◼
►
it's like there's this thing for other people that I do for them,
00:03:22
◼
►
which is a really kind of entitled, privileged way to see it.
00:03:27
◼
►
It's like, "Oh, I'm being so kind to this other community."
00:03:30
◼
►
But I'm very glad that I think over time I've developed that into a much more mature,
00:03:36
◼
►
actual understanding that accessibility is something that is for everybody.
00:03:41
◼
►
It is most beneficial and most impactful in special communities,
00:03:45
◼
►
but it just makes my app better for everybody.
00:03:48
◼
►
And I think about the last time I went and had my eyes dilated
00:03:53
◼
►
when I was having an eye exam, and suddenly I need to crank dynamic type
00:03:58
◼
►
all the way up to see my phone, and all of a sudden it's like,
00:04:02
◼
►
"Right, yeah, this impacts everybody."
00:04:05
◼
►
It impacts everybody to a different degree, but it's the same affordances
00:04:09
◼
►
and the same benefits that apply to everybody.
00:04:12
◼
►
Having that change in mindset that just makes your app better
00:04:17
◼
►
and more accessible for everybody,
00:04:20
◼
►
it changes the degree in which I was motivated to think about it.
00:04:24
◼
►
And I think it was also just so useful to change my --
00:04:28
◼
►
it's like this just as a person, that was a really useful thing.
00:04:32
◼
►
Any time you can get away from that kind of others versus yourself mindset,
00:04:38
◼
►
it's like, "No, this is just part of development because this is for everybody."
00:04:41
◼
►
All of my users benefit from this.
00:04:44
◼
►
It reminds me in a funny way of all of the episodes under the radar have a transcript.
00:04:50
◼
►
If you look in your -- wherever you're listening to this now, in the show notes,
00:04:53
◼
►
the top link is "episode transcript," and that is there in many ways
00:04:57
◼
►
for people who can't hear the episode.
00:05:00
◼
►
If you have auditory impairments, you may not be able to listen to us speak,
00:05:04
◼
►
and so podcasts can be very inaccessible to you.
00:05:07
◼
►
But if you have a transcript, you can read it if you're able to read.
00:05:10
◼
►
But it also has benefits for people who might just want to quickly browse something,
00:05:17
◼
►
if you want to search for something later.
00:05:19
◼
►
There's a tremendous number of other benefits that can come from something
00:05:22
◼
►
that is ostensibly an accessibility feature
00:05:25
◼
►
or something that is more particularly targeted, but it benefits everybody.
00:05:29
◼
►
And because it benefits everybody, it's also just smart business
00:05:33
◼
►
to design your apps to maximize accessibility.
00:05:36
◼
►
Because as you mentioned, it is kind of an extension of usability,
00:05:40
◼
►
and no one questions the value of good usability in like,
00:05:44
◼
►
"Oh, if you want your app to succeed, you should make it as usable as possible."
00:05:48
◼
►
That seems universally agreed upon.
00:05:50
◼
►
Accessibility is part of that, and yet accessibility kind of gets low priority
00:05:55
◼
►
or people don't talk about it as much.
00:05:58
◼
►
And I get that. I have been there.
00:06:01
◼
►
I have frequently in my career, I have shipped accessibility problems.
00:06:06
◼
►
I have shipped unlabeled voiceover buttons and stuff like that,
00:06:10
◼
►
or I've broken accessibility because I forgot to test it when I moved a view around or something.
00:06:15
◼
►
We've all made these mistakes, but I think it's important to keep it in mind more.
00:06:23
◼
►
And if you have any kind of testing process, any kind of formalized checklist
00:06:27
◼
►
or anything like that, to make it a part of that.
00:06:30
◼
►
And that will help you avoid shipping accessibility problems.
00:06:34
◼
►
Yeah. And I think too, probably to wrap up the overview,
00:06:37
◼
►
is to say that why should you development?
00:06:39
◼
►
Like if I was trying to convince somebody why making accessibility
00:06:42
◼
►
a big part of their development process.
00:06:44
◼
►
There's two main reasons for it.
00:06:46
◼
►
I think there's the first, which is the more just general,
00:06:50
◼
►
it's a good thing at a human level to make your apps very usable,
00:06:53
◼
►
which is a good general thing.
00:06:55
◼
►
But more specifically, it's good business.
00:06:58
◼
►
It's in the same way that localizing your application
00:07:01
◼
►
makes your app usable to broader communities,
00:07:05
◼
►
which allows you to make more money or have a more sustainable business
00:07:09
◼
►
because you have more users.
00:07:11
◼
►
Accessibility is the same thing, where you open up your app to be usable
00:07:16
◼
►
by these other communities that then allows you to broaden your user base,
00:07:20
◼
►
which is just good business.
00:07:22
◼
►
And thirdly, it's also just, Apple really likes accessibility,
00:07:26
◼
►
and they care a lot about it.
00:07:28
◼
►
And it is something that you will hear Apple talk about many times.
00:07:32
◼
►
They spend a tremendous amount of effort,
00:07:34
◼
►
clearly on the engineering side,
00:07:36
◼
►
making sure that the tooling and abilities that we have
00:07:40
◼
►
on the accessibility side are very robust.
00:07:42
◼
►
And so doing things that Apple cares about is going to benefit you
00:07:46
◼
►
in terms of featuring, in terms of your just general being a good member
00:07:52
◼
►
of that community and having the knock-on benefits that that brings with it.
00:07:56
◼
►
It's just a good business decision as well as a good human decision.
00:08:00
◼
►
We are sponsored this week by Linode.
00:08:03
◼
►
With Linode, you have access to a suite of powerful hosting options
00:08:06
◼
►
with pricing starting at just $5 a month.
00:08:08
◼
►
You can be up and running with your own virtual server
00:08:10
◼
►
in the Linode cloud in under a minute.
00:08:12
◼
►
Linode has hundreds of thousands of customers,
00:08:15
◼
►
all of whom are serviced by their friendly 24/7 support team.
00:08:18
◼
►
You can email them, call them, even chat over IRC in the Linode community.
00:08:22
◼
►
They know how important it is to get the help you want,
00:08:25
◼
►
and Linode also has a suite of amazing guides and support documentation
00:08:29
◼
►
to give you any references when you need it.
00:08:31
◼
►
So, for instance, if you wanted to learn details about how to set up
00:08:34
◼
►
your Linux server, Linode, you can even, if you search the web,
00:08:37
◼
►
these are public. Anybody can see these documentation.
00:08:39
◼
►
And I have frequently found when I've searched for some kind of,
00:08:42
◼
►
like, you know, Linux help thing, oftentimes the best answer
00:08:45
◼
►
and one of the top answers is a Linode document.
00:08:47
◼
►
They really know what you need, and they're really great at explaining it.
00:08:50
◼
►
And they have an intuitive control panel.
00:08:52
◼
►
This allows you to deploy, boot, resize, snapshot,
00:08:55
◼
►
and clone your virtual servers in just a few clicks.
00:08:58
◼
►
And they also now have two-factor authentication to keep you safe.
00:09:01
◼
►
So Linode has fantastic pricing options for every budget and every need.
00:09:05
◼
►
Their plans start at one gig of RAM for just five dollars a month,
00:09:09
◼
►
and they offer lots of other plans that go up from there,
00:09:11
◼
►
including high memory plans, depending on what your needs are.
00:09:14
◼
►
As listener of this show, sign up at linode.com/radar.
00:09:18
◼
►
That will support us and give you $20 towards any Linode plan.
00:09:21
◼
►
So on that base $5 plan, that's four months free.
00:09:24
◼
►
And with a seven-day money-back guarantee, there's nothing to lose.
00:09:27
◼
►
So go to linode.com/radar to learn more, sign up,
00:09:31
◼
►
and take advantage of that $20 credit, or use promo code radar2018 at checkout.
00:09:36
◼
►
Thank you so much to Linode for supporting the show.
00:09:39
◼
►
So I think now that it's sort of the general overview to the side,
00:09:42
◼
►
I think let's dive into some of the more specific types of accessibility
00:09:47
◼
►
and probably even more over from the developer perspective,
00:09:50
◼
►
some of the tools and abilities that we have as a result.
00:09:53
◼
►
And I think the main area to start with probably are visual accessibility tools that we can use.
00:09:59
◼
►
So visual impairments can come in all varieties.
00:10:02
◼
►
They can go all the way to the extreme forms of things like blindness,
00:10:05
◼
►
where a user is completely unable to view the interface that your app has,
00:10:11
◼
►
to the more minor, to things like we were talking about,
00:10:15
◼
►
where they have difficulty seeing things that are small,
00:10:18
◼
►
they have difficulties around differentiating between colors or contrast,
00:10:23
◼
►
and so you can run the gambit between those.
00:10:25
◼
►
But in general, because our apps at their core are fundamentally visual things,
00:10:32
◼
►
one of the key innovations of the iPhone was that it didn't have any buttons on the main screen,
00:10:39
◼
►
which means that our entire app is functionally something that is visual,
00:10:43
◼
►
that there's no tactile cues to it, or at least not intrinsically.
00:10:48
◼
►
And so there's a variety of different things that we have to take advantage of.
00:10:52
◼
►
And I think the first one and probably the biggest one that most people think about
00:10:55
◼
►
when they think of visual accessibility is the voiceover system in iOS,
00:11:01
◼
►
which if you've never used it, I highly recommend that you stop this episode now,
00:11:06
◼
►
go turn it on, and just play with your iPhone for a little while,
00:11:10
◼
►
because it is a fascinating alternative way to navigate an iPhone,
00:11:15
◼
►
that you can do essentially everything that you currently do with your iPhone,
00:11:19
◼
►
you can do without having--if you close your eyes and just swipe left and right
00:11:25
◼
►
and then double-tap to select things,
00:11:27
◼
►
you do a tremendous amount of capabilities of your iPhone without ever having to look at it.
00:11:33
◼
►
And so voiceover is that system.
00:11:35
◼
►
It's a system that is this alternative interface on top of the main interface,
00:11:40
◼
►
and you'll see it visually with these little cues,
00:11:43
◼
►
which obviously if you couldn't see them, they're not important,
00:11:46
◼
►
but they're ways for us as developers at least to see what's happening,
00:11:50
◼
►
where it's a way of navigating the screen hierarchically,
00:11:54
◼
►
so you move from element to element to element,
00:11:58
◼
►
and then rather than some of the--in a typical interface on the iOS,
00:12:04
◼
►
there's typically direct input, so wherever you--
00:12:07
◼
►
if you want to tap on a button, you have to find--
00:12:09
◼
►
your finger has to be directly over that button.
00:12:12
◼
►
What voiceover does is it takes that and adds a level of indirection
00:12:15
◼
►
where you have a selection state and then a tap state, for example.
00:12:20
◼
►
So you would swipe over until the button you want to select is selected,
00:12:25
◼
►
and then you double-tap on the screen,
00:12:27
◼
►
and so where you're swiping is irrelevant in voiceover,
00:12:30
◼
►
and so it creates that level of indirection,
00:12:32
◼
►
which then allows you to use it if you can't see the screen.
00:12:36
◼
►
I would even say--go a little harder on this--
00:12:38
◼
►
I would say actually learn voiceover.
00:12:41
◼
►
Figure out the basics, which it sounds intimidating.
00:12:45
◼
►
Trust me, it's not. It's really quite simple.
00:12:47
◼
►
It's like swipe right to go to the next item in the sequence,
00:12:50
◼
►
swipe left to go to the previous item in the sequence,
00:12:52
◼
►
double-tap the screen to select something.
00:12:55
◼
►
That's roughly all--that's the basics to all--
00:12:58
◼
►
that's all you need to know to start this.
00:13:00
◼
►
There are lots of other little tricks.
00:13:02
◼
►
One thing the developers should make sure your apps work with
00:13:04
◼
►
is if you present any kind of custom modals or sheets or anything like that,
00:13:09
◼
►
you want to support the accessibility perform escape gesture,
00:13:13
◼
►
which is two fingers on the screen, swipe left, right, left,
00:13:16
◼
►
and it's kind of like a zigzag, like you're crossing out the current screen,
00:13:20
◼
►
and that should dismiss or be like a cancel button
00:13:23
◼
►
on any kind of modal or sheet and everything,
00:13:25
◼
►
and that's something that the built-in stuff
00:13:27
◼
►
does not make it incredibly easy to support that
00:13:30
◼
►
if you don't know about it, but once you know about it,
00:13:32
◼
►
it's pretty easy.
00:13:33
◼
►
But I would say the basics of voiceover,
00:13:36
◼
►
swipe right, swipe left, double-tap to select,
00:13:39
◼
►
learn that, then actually cover your eyes
00:13:43
◼
►
or look away from the screen and try to navigate your app
00:13:46
◼
►
and try to actually use it and see,
00:13:48
◼
►
does the sequence of these things make sense?
00:13:51
◼
►
Are there things that are missing?
00:13:52
◼
►
Are there states that you can get in that you can't get out of
00:13:55
◼
►
because you can't leave the screen from voiceover
00:13:58
◼
►
or you can't leave this mode?
00:14:00
◼
►
Things like that are incredibly important
00:14:02
◼
►
for just the basics of voiceover testing.
00:14:04
◼
►
And voiceover also, not only does it serve visual impairments,
00:14:08
◼
►
but the same kind of mechanic, the same system,
00:14:11
◼
►
can also serve things like motor disabilities and things like that
00:14:14
◼
►
because it's using these same APIs and everything.
00:14:16
◼
►
So the voiceover accessibility API is the number one API
00:14:21
◼
►
to try to support after probably dynamic type,
00:14:24
◼
►
although ideally you shouldn't have to choose,
00:14:26
◼
►
you should really be supporting both.
00:14:27
◼
►
But those are the two big ones.
00:14:30
◼
►
And really, it does not take much to teach yourself voiceover
00:14:35
◼
►
enough to be able to go through your app
00:14:38
◼
►
and just see if there's any major pain points.
00:14:40
◼
►
And I would even extend that to say,
00:14:42
◼
►
actually, if at all possible, seek out voiceover testers,
00:14:46
◼
►
seek out people who are full-time voiceover users
00:14:49
◼
►
on their phones as your beta testers.
00:14:52
◼
►
I made tons of voiceover mistakes
00:14:54
◼
►
until I had voiceover people on my betas,
00:14:56
◼
►
and it made all the difference in the world.
00:14:58
◼
►
I know how an interface should look.
00:15:01
◼
►
I have a pretty good idea of how the app should be laid out visually.
00:15:05
◼
►
But because I'm not a full-time voiceover user,
00:15:08
◼
►
not only do I not run into those problems if they exist,
00:15:11
◼
►
but I don't really have a good concept of what's good.
00:15:14
◼
►
And so it's important to have full-time voiceover users,
00:15:17
◼
►
if at all possible, testing your app and telling you,
00:15:20
◼
►
not only if they see any problems,
00:15:22
◼
►
but also what's good design, what's bad design?
00:15:25
◼
►
What works, what's a pain,
00:15:27
◼
►
what's more complicated than it needs to be?
00:15:29
◼
►
One of the questions I had was,
00:15:31
◼
►
when I was arranging my now-playing screen elements in voiceover,
00:15:36
◼
►
and I thought it would make more sense
00:15:39
◼
►
to have the most frequently used things come first
00:15:43
◼
►
in the sequence of things that you're iterating through,
00:15:45
◼
►
even though that's not how the screen is laid out.
00:15:48
◼
►
If you just try to read the screen left to right, top to bottom,
00:15:51
◼
►
that isn't how the screen is laid out.
00:15:53
◼
►
The most frequent controls are on the bottom, actually.
00:15:55
◼
►
So in the sequence of the naively ordered controls,
00:15:58
◼
►
they would almost be last.
00:16:00
◼
►
But I was like, "Don't you want play/pause first,
00:16:03
◼
►
and skip forward second, and skip back third?"
00:16:06
◼
►
Stuff like that.
00:16:07
◼
►
And so I just asked my voiceover testers,
00:16:09
◼
►
"Hey, would this be weird? Would this be unusual?
00:16:13
◼
►
Would this be bad or off-putting to arrange these in a custom way?
00:16:17
◼
►
Or is that a useful thing to do?"
00:16:20
◼
►
Because I honestly don't know what's normal.
00:16:23
◼
►
What would throw somebody off as being weird or unexpected,
00:16:26
◼
►
versus what's a nice convenience.
00:16:29
◼
►
And I got great feedback on stuff like that.
00:16:31
◼
►
So anything you can do to have voiceover testers,
00:16:34
◼
►
and this applies to all other types of accessibility APIs, too,
00:16:38
◼
►
have testers that use different dynamic type sizes.
00:16:41
◼
►
My dynamic type implementation in Overcast is still not perfect.
00:16:44
◼
►
I only know that because people tell me,
00:16:46
◼
►
because I have testers who actually use it and tell me.
00:16:48
◼
►
So it's just incredibly valuable to have that kind of actual feedback,
00:16:52
◼
►
because it is important for you as a developer to try to learn,
00:16:57
◼
►
to test out your app in these different scenarios,
00:17:00
◼
►
and learn the basics of voiceover so you can navigate it and stuff like that.
00:17:03
◼
►
But you're never going to use it as much,
00:17:06
◼
►
and find as much good and bad stuff about your implementation,
00:17:10
◼
►
or have as much of a sensibility of what works and what doesn't,
00:17:13
◼
►
as a full-time user of these technologies.
00:17:15
◼
►
So if at all possible, involve people who use them in your testing.
00:17:18
◼
►
And I'd say, too, one of my biggest recommendations
00:17:22
◼
►
for anyone who is going to be at WWDC,
00:17:24
◼
►
who has a ticket and is going to be inside,
00:17:26
◼
►
is to make an appointment for the Accessibility Lab.
00:17:29
◼
►
Where typically, the way I've gone every year,
00:17:31
◼
►
I always find a reason to go, even if I don't have a pressing reason,
00:17:34
◼
►
because I learn so much from the experience,
00:17:37
◼
►
because the way it's typically set up is they have a typically sighted user
00:17:41
◼
►
and a non-typically sighted user,
00:17:43
◼
►
someone who has a vision impairment of some kind from Apple,
00:17:47
◼
►
who will sit down and they'll go through and use your app.
00:17:50
◼
►
And you get to watch and take notes on how they use it,
00:17:55
◼
►
what they see, what they're hearing,
00:17:57
◼
►
the speed at which they're interacting with.
00:17:59
◼
►
And that in-person experience, I found to be tremendously helpful
00:18:03
◼
►
for understanding things that you wouldn't really understand otherwise.
00:18:07
◼
►
I've learned a lot around how verbose I want to make my button
00:18:11
◼
►
accessibility labels be, for example.
00:18:14
◼
►
Spoiler, not.
00:18:16
◼
►
Yeah, you get this, where they're like, "No, no, no,
00:18:19
◼
►
the shortest amount of text possible.
00:18:21
◼
►
I don't need to be having this big, long thing where,
00:18:24
◼
►
so for a lot of my apps, it's like I'm displaying user data.
00:18:27
◼
►
And so for a while, I would have these usability labels
00:18:31
◼
►
that would be like, "Your steps on Thursday, May 17th, 2018,
00:18:36
◼
►
were 10,163."
00:18:39
◼
►
And she's like, "I don't need that. I know where I am in the app.
00:18:43
◼
►
You can just say Thursday's steps, 10,383."
00:18:46
◼
►
And that's all they wanted, because they're very used to,
00:18:51
◼
►
they have a tremendous ability, you develop a tremendous ability
00:18:54
◼
►
to know where you are in the hierarchy,
00:18:56
◼
►
and they have to wait to listen to what's going on
00:19:01
◼
►
before they can make their next action.
00:19:03
◼
►
And so if you make those labels really long,
00:19:05
◼
►
it's hard for them to navigate quickly.
00:19:07
◼
►
Also, things like I learned from going to the accessibility lab
00:19:10
◼
►
was like putting the most important information up front,
00:19:13
◼
►
not at the end.
00:19:15
◼
►
And so actually, I think what I do in my apps,
00:19:18
◼
►
I think I say the number of steps first,
00:19:20
◼
►
and then I say the date in certain circumstances,
00:19:23
◼
►
because that's actually what they're interested in,
00:19:25
◼
►
rather than the date.
00:19:27
◼
►
Because once they have what they need,
00:19:29
◼
►
they can move on or swipe to the next thing,
00:19:31
◼
►
or if this is not the right thing.
00:19:33
◼
►
But I highly recommend going and seeing that in person.
00:19:35
◼
►
Or if you know somebody in person who has a vision impairment
00:19:38
◼
►
and uses VoiceOver, it's tremendously effective.
00:19:41
◼
►
Because at its core, VoiceOver is,
00:19:44
◼
►
it's almost like painfully simple to implement on a developer side.
00:19:48
◼
►
Every UI control in iOS has accessibility baked into it,
00:19:53
◼
►
and most of what you're doing when you're making your app work well
00:19:57
◼
►
with VoiceOver is making sure that you set accessibility labels
00:20:00
◼
►
for everything so that when an element becomes the focused element,
00:20:04
◼
►
that's what VoiceOver reads.
00:20:06
◼
►
And so you need to have a description of what that is,
00:20:10
◼
►
and then making sure that the hierarchy within your app makes sense,
00:20:14
◼
►
so that as you swipe left and right,
00:20:16
◼
►
it's logically moving through the hierarchy of your app,
00:20:20
◼
►
rather than it's, in general, it does a pretty good job of doing that,
00:20:24
◼
►
because it's sort of working its way along visually,
00:20:27
◼
►
based on sort of X, Y coordinates,
00:20:29
◼
►
but sometimes you need to override that
00:20:32
◼
►
with an orientation that makes sense.
00:20:34
◼
►
So as an example, like in Podometer++,
00:20:37
◼
►
I have a bunch of bar graphs showing the history of your step counts.
00:20:42
◼
►
In the default implementation, they would go from left to right,
00:20:47
◼
►
which in my case would be oldest to newest,
00:20:50
◼
►
whereas for an accessibility perspective, I flip that around.
00:20:53
◼
►
And so the newest is the earliest one,
00:20:56
◼
►
and then it works its way back in time,
00:20:58
◼
►
even though visually that's flipped.
00:21:00
◼
►
Things like that are basically all you have to do
00:21:04
◼
►
to make good use of VoiceOver,
00:21:06
◼
►
good labels and good hierarchy,
00:21:08
◼
►
and you'll be like 99% there,
00:21:10
◼
►
and then get feedback from users as best you can,
00:21:12
◼
►
either in person, at the Accessibility Lab,
00:21:15
◼
►
beta testing, wherever you can.
00:21:17
◼
►
- And I can't stress enough how important it is to just try it.
00:21:20
◼
►
Just try your app.
00:21:22
◼
►
There's a few things you can do.
00:21:24
◼
►
You can set the triple tap home button shortcut
00:21:27
◼
►
to turn on and off VoiceOver.
00:21:29
◼
►
And that's something I've found
00:21:30
◼
►
after years of accidentally triggering that
00:21:33
◼
►
when I meant to double click the home button
00:21:35
◼
►
and hearing VoiceOver on in the middle of the world.
00:21:39
◼
►
I turned that off because I learned
00:21:41
◼
►
that you could just turn it on and off via Siri.
00:21:43
◼
►
So you can just ask Siri, "Turn VoiceOver on.
00:21:45
◼
►
"Turn VoiceOver off."
00:21:46
◼
►
And it takes two seconds and no setup to do that,
00:21:49
◼
►
so it's great.
00:21:51
◼
►
And then just try it because usually when you mess up,
00:21:54
◼
►
it's usually like, oh, you have some kind of custom button
00:21:57
◼
►
that doesn't have the standard label text.
00:21:59
◼
►
It has some other way to display what it is,
00:22:01
◼
►
and you didn't put in a label.
00:22:02
◼
►
So you scroll past it with VoiceOver,
00:22:04
◼
►
and it just says, "Button, button."
00:22:06
◼
►
And it's like, oh, god, it's like head-smackingly obvious.
00:22:10
◼
►
It's embarrassing how easy it is to fix that.
00:22:12
◼
►
It takes two seconds to add an Accessibility label,
00:22:15
◼
►
and you fix this incredibly embarrassing Accessibility bug.
00:22:18
◼
►
So just actually trying it and testing it
00:22:21
◼
►
gets you so far, so much of the way there.
00:22:23
◼
►
I'd also say if you don't know
00:22:25
◼
►
or can't access any visually impaired users
00:22:28
◼
►
who use this kind of stuff,
00:22:30
◼
►
at least what everybody can do is look on YouTube
00:22:32
◼
►
and try to look at videos of screen reader users
00:22:35
◼
►
actually using their screen readers.
00:22:37
◼
►
And that should give you some sense of how they navigate,
00:22:39
◼
►
how quickly they navigate,
00:22:41
◼
►
what kind of phrasing and wording you should use,
00:22:44
◼
►
how brief or verbose should you be, things like that.
00:22:47
◼
►
It's not a great solution, but it's better than nothing.
00:22:50
◼
►
- The next kind of type of accessibility
00:22:52
◼
►
that's probably worth talking about
00:22:53
◼
►
is just around things like dynamic type,
00:22:56
◼
►
which I think is a simpler topic,
00:22:58
◼
►
where dynamic type is inside of iOS.
00:23:00
◼
►
You can set the system text size queue in the Settings app
00:23:06
◼
►
or then in the Accessibility app
00:23:08
◼
►
if you want really, really, really big text.
00:23:11
◼
►
And this is something that I've noticed
00:23:13
◼
►
just in normal life is used incredibly widely.
00:23:19
◼
►
Voiceover use is probably a relatively smaller part
00:23:22
◼
►
of your user community.
00:23:24
◼
►
Dynamic type is a very large proportion
00:23:26
◼
►
of your user community.
00:23:28
◼
►
And I think in general, dynamic type is pretty straightforward
00:23:30
◼
►
because it just makes everything bigger.
00:23:33
◼
►
And especially this has gotten easier
00:23:35
◼
►
as we have to support multiple phone sizes,
00:23:38
◼
►
that having more flexible, flowable layouts
00:23:40
◼
►
is just something that I think in general
00:23:42
◼
►
we kind of have to do because we have to make an app
00:23:45
◼
►
that works on a 5S screen
00:23:48
◼
►
all the way up to an 8+ screen.
00:23:51
◼
►
And so you have to be flexible anyway.
00:23:54
◼
►
And so dynamic type is just a way of saying,
00:23:56
◼
►
"Make my text bigger, make my text smaller,
00:23:59
◼
►
and as it gets bigger, making sure that it doesn't break,"
00:24:01
◼
►
is functionally what dynamic type is.
00:24:03
◼
►
And I think it's just a question
00:24:05
◼
►
of making your app flexible in layout
00:24:07
◼
►
so that when you crank up dynamic type,
00:24:10
◼
►
if everything just becomes--
00:24:11
◼
►
you get the first letter and the last letter
00:24:13
◼
►
and then a bunch of ellipses in the middle
00:24:15
◼
►
because everything's getting truncated.
00:24:17
◼
►
You didn't do dynamic type right.
00:24:19
◼
►
So it's something to try and to make sure
00:24:21
◼
►
that your app responds reasonably well to
00:24:24
◼
►
as well as opting into supporting it.
00:24:27
◼
►
Some controls will automatically do this.
00:24:29
◼
►
Like, certain UI label setups will just automatically use it,
00:24:33
◼
►
which you want to make sure you know
00:24:35
◼
►
that they're going to opt into.
00:24:36
◼
►
But it also just--in general, you can ask the system
00:24:39
◼
►
for what the dynamic type size is right now,
00:24:42
◼
►
and even if you're doing custom rendering,
00:24:44
◼
►
you could respond to it appropriately.
00:24:47
◼
►
And lastly, I think there's some elements around accessibility
00:24:52
◼
►
for things like colors and button shapes,
00:24:56
◼
►
things that users who may have difficulty
00:24:58
◼
►
with low-contrast displays.
00:25:01
◼
►
And so it's just in general--
00:25:02
◼
►
it's always the general rule that I try and keep to is
00:25:06
◼
►
color is a powerful way to communicate something to my user,
00:25:10
◼
►
but it shouldn't be the only way that I communicate with my user.
00:25:13
◼
►
So if you have--if I need to differentiate something
00:25:18
◼
►
by only with color, then I'm making an interface
00:25:23
◼
►
that's going to be confusing to users who have difficulty
00:25:26
◼
►
differentiating colors or similar impairments.
00:25:29
◼
►
And in general, that's just probably bad design.
00:25:31
◼
►
I mean, this came up a lot around the iOS 7 redesign,
00:25:35
◼
►
where color became the thing that we used
00:25:37
◼
►
to differentiate buttons from just text.
00:25:40
◼
►
And so I think in general, I tend to prefer actually making buttons
00:25:44
◼
►
with some other affordance to them,
00:25:46
◼
►
whether that be a rounded rectangle around them
00:25:48
◼
►
or some indication, maybe an underline,
00:25:51
◼
►
to make it seem that this is something different,
00:25:53
◼
►
that it isn't just the color that makes it different.
00:25:56
◼
►
Finally, I think I'd like to end with a plea to Apple.
00:26:01
◼
►
There is no way in the App Store for users of apps
00:26:06
◼
►
or buyers or potential users of apps
00:26:08
◼
►
to know whether an app has accessibility compatibility or not.
00:26:12
◼
►
There's no way to know if an app has been tested for voiceover.
00:26:15
◼
►
There's no way to know if it responds to dynamic type,
00:26:18
◼
►
things like that.
00:26:19
◼
►
And so if you are a user who uses these technologies,
00:26:21
◼
►
who needs these technologies, you're taking a risk.
00:26:24
◼
►
You have no way to know whether an app that you're interested in
00:26:27
◼
►
possibly buying will work for you at all or not.
00:26:30
◼
►
The App Review tests apps for other things like crashing,
00:26:33
◼
►
things like that.
00:26:34
◼
►
So people can be sure that you're downloading an app
00:26:36
◼
►
that will work if you don't need these technologies.
00:26:39
◼
►
If you do, you have no way to know.
00:26:41
◼
►
It's almost as if you don't have App Review for yourself.
00:26:43
◼
►
And I wish Apple would either test for the basic accessibility technologies
00:26:50
◼
►
like dynamic type and voiceover during App Review
00:26:52
◼
►
and actually reject apps if you didn't do it,
00:26:54
◼
►
which would also save us from shipping embarrassing shortcomings,
00:26:57
◼
►
either require that or allow developers to opt in,
00:27:01
◼
►
to optionally have that testing applied to us
00:27:04
◼
►
and display some kind of little icon in the App Store page
00:27:07
◼
►
for our apps that we are accessible.
00:27:10
◼
►
I wrote a blog post to this effect a couple years ago.
00:27:12
◼
►
It didn't get anywhere yet, but I still would like that
00:27:16
◼
►
to be considered by Apple because if you think about
00:27:20
◼
►
the value of App Review for mainstream purposes,
00:27:24
◼
►
this is a pretty big thing that it serves that same kind of goal,
00:27:27
◼
►
like making sure, giving people the assurance that apps will work for them
00:27:33
◼
►
in a basic way, I think that would go a long way in accessibility as well.
00:27:37
◼
►
Oh, sure. I also love the thought of it being an added incentive
00:27:43
◼
►
for developers to adopt accessibility in a robust way within their applications.
00:27:49
◼
►
If there is an additional flag or gold star that you get in the App Store
00:27:55
◼
►
as a result of doing it, all the better.
00:27:58
◼
►
That just seems like that would be a wonderful win.
00:28:01
◼
►
Thanks for listening, everybody, and we'll talk to you next week.
00:28:05
◼
►
[BLANK_AUDIO]