User agent reliability for VoiceOver iOS Screen reader compatibility
Screen Readers
 Sep 11, 2022
Shows how well VoiceOver iOS supports ARIA and WCAG sufficient techniques.
Latest version tested
VoiceOver iOS 15.6 with Safari iOS 15.6
- All tests: 63 pass of 84 tests (75%)
- ARIA tests: 23 pass of 29 tests (79%)
- WCAG tests: 46 pass of 61 tests (75%)
Reliability trend
Failing tests
| Test | Mode | What the user hears | Notes | |
|---|---|---|---|---|
|  | Page with xml:langset on thehtmlandpelements | Touch | Act-if tay-bill. Ray-day-oh. | Pronounced as English. Ignores xml:lang. | 
|  | application/xhtml+xmlpage with mismatchinglangandxml:langon thehtmlelement | Touch | Ga-raj. Doo-ble. Damm. Un, zway, dray. | Speech pronounced as lang=fr, but CSS matches :lang(de) and German CSS content pronounced as French. | 
|  | audiowitharia-labelattribute | Touch | Nothing | Nothing voiced for audio - no indication it exists | 
|  | audiowitharia-labelledbyattribute | Touch | Nothing | Nothing voiced for audio - no indication it exists | 
|  | audiowithtitleattribute | Touch | Nothing | Nothing voiced for audio - no indication it exists | 
|  | abbrwithtitle | Touch | T L N | ABBR expansion ignored. | 
|  | buttoncontainingimgwithtitleattribute | Touch | Button | Reads "button" without saying what button does. | 
|  | fieldsetcontaining links | Touch | Legend for enclosed links, form start. Home, link. About, link. Contact, link end, legend for enclosed links, form end. | The fieldset is announced as a form, but contains no form controls. | 
|  | imgwithfigcaption | Touch | One thousand, two hundred and thirty four PNG, image. Violet, taken on twelve slash eleven slash two thousand and ten. | Reads out meaningless filename, then FIGCAPTION. | 
|  | areaandimgwithaltattributes | Touch | This is alt text. (This is left alt text, link. This is right alt text, link) | Very hard to find AREA links because image map links are not announced when reading. It is possible to find them by minesweeping, or using the Next Link gesture, but there are no audible cues to tell the user they're missing links. | 
|  | areawithtitleattribute | Touch | This is alt text. (This is left title text, link. This is right title text, link.) | Very hard to find AREA links because image map links are not announced when reading. It is possible to find them by minesweeping, or using the Next Link gesture, but there are no audible cues to tell the user they're missing links. | 
|  | areawitharia-labelattribute | Touch | This is alt text. (This is left ARIA label text, link. This is right ARIA label text, link.) | Very hard to find AREA links because image map links are not announced when reading. It is possible to find them by minesweeping, but there are no audible cues to tell the user they're missing links. | 
|  | areawitharia-labelledbyattribute | Touch | This is alt text. (Left arrow HTM, link. Right arrow HTM, link.) | Very hard to find AREA links because image map links are not announced when reading. URLs read out instead of ARIA-LABELLEDBY when Next Link gesture is used. | 
|  | Data table with role=grid | Reading | Morning, row 1, column 1, table start, 2 rows 2 columns. Afternoon, row 1 column 2. Free, row 2 column 1. Busy, row 2 column 2. Table end, end, end. | Voiced as table, but no headers read | 
|  | Data table with summaryandth | Reading | Morning, row header, column header, row 1, column 1, table start, 2 rows 2 columns. Afternoon, column header, row 1 column 2. Morning, free, row 2 column 1. Afternoon, busy, row 2 column 2, table end, end, end. | Summary not read out | 
|  | Data table with captionandth | Touch | Data table caption, row -90020023372036854775808, table start, 2 rows 2 columns. Morning, row header, column header, row 1 column 1. Afternoon, column header, row 1 column 2. Morning, free, row 2 column 1. Afternoon, busy, row 2 column 2, table end, end, data table caption, end. | Meaningless row number read out for table caption. | 
|  | Data table with role=columnheaderheaders but noth | Reading | Morning, afternoon. Free, busy. | Table treated as layout table - not announced as table, and no headers read. | 
|  | Data table with th scopeon cell headers | Touch | Contact information, row -90020023372036854775808, table start, 4 rows, 5 columns. Name, row header, row 1 column 2. Phone hash symbol, row 1 column 3. Fax hash symbol, row 1 column 4. City, row 1 column 5. One, row 2 column 1. Joel Garner, row 2 column 2. 412 212 5421, row 2 column 3. 412 212 5400, row 2 column 4. Pittsburgh, row 2 column 5. Two, row 3 column 1. Clive Lloyd, row 3 column 2. 410 306 1420, row 3 column 3. 410 306 5400, row 3 column 4. Baltimore, row 3 column 5. | Incomprehensible - doesn't read any cell headings, and reads out meaningless row number for caption. | 
|  | Data table with td headersattribute | Reading | Homework, row header, column header, spans 2 rows, row 1 column 1, table start, 3 rows 7 columns. Exams, column header, spans 3 columns, row 1 column 2. Projects, column header, spans 3 columns, row 1 column 5. Exams, one, row 2 column 2. Exams, two, row 2 column 3. Exams, final, row 2 column 4. Projects, one, row 2 column 5. Projects, two, row 2 column 6. Projects, final, row 2 column 7. Homework, fifteen percent, row 3 column 1. Exams, fifteen percent, row 3 column 2. Exams, fifteen percent, row 3 column 3. Exams, twenty percent, row 3 column 4. Projects, ten percent, row 3 column 5. Projects, ten percent, row 3 column 6. Projects, fifteen percent, row 3 column 7, table end, end, end. | Table incomprehensible - only first header in HEADERS list is voiced. | 
|  | PDF18 Document with doc title | Touch | Slash SR_PDF_doc_title.pdf | Voices full URL. URL displayed in browser tab instead of title. | 
|  | PDF16 Document default language set to French | Touch | Act-if tay-bill | Pronounced as English, document language ignored | 
Passing tests
| Test | Mode | What the user hears | Notes | |
|---|---|---|---|---|
|  | Page with langset on thehtmlandpelements | Touch | Act-eef tab-le. Rah-di-oh. | Pronounced as French and German. | 
|  | text/htmlpage with mismatchinglangandxml:langon thehtmlelement | Touch | Ga-raj. Doo-ble. Damm. Un, deux, trois. | Speech pronounced as lang=fr, and CSS matches :lang(fr). | 
|  | Match langsubtags | Touch | Dam-he. Dam-he. Dam-he. | All pronounced as German. | 
|  | ARIA role=heading | Touch | First level heading, heading level 1. Second level heading, heading level 2 | |
|  | Heading is imgwithalt | Touch | Second level alt, heading level 2, image, logo other, test image. | Reads out text in image as well as alt text. | 
|  | appletwithtitleattribute | Touch | Nothing | iOS does not support applets, and does not render them on screen | 
|  | appletwith fallback content | Touch | Fallback content for applet | iOS does not support applets | 
|  | appletwitharia-labelattribute | Touch | Nothing | iOS does not support applets, and does not render them on screen | 
|  | appletwitharia-labelledbyattribute | Touch | Nothing | iOS does not support applets, and does not render them on screen | 
|  | appletinsidefigurewithfigcaptionelement | Touch | Figure caption for applet | |
|  | embedwithtitleattribute | Touch | Title text for embed | |
|  | embedinsidefigurewithfigcaption | Touch | Figure caption for embed | |
|  | embedwitharia-labelattribute | Touch | Aria label for embed | |
|  | embedwitharia-labelledbyattribute | Touch | This is ARIA-LABELLEDBY text | |
|  | objectwith fallback content | Touch | Fallback content for object | |
|  | objectwithtitleattribute | Touch | Title for object | |
|  | objectwitharia-labelattribute | Touch | Aria label for object | |
|  | objectwitharia-labelledbyattribute | Touch | This is ARIA-LABELLEDBY text. | |
|  | videowitharia-labelattribute | Touch | Video aria label, 5 seconds, video playback, end article, elapsed time 0 seconds, double-tap to play or pause. | |
|  | videowitharia-labelledbyattribute | Touch | This is ARIA-LABELLEDBY text, 5 seconds, video playback, end article, elapsed time 0 seconds, double-tap to play or pause. | |
|  | videowithtitleattribute | Touch | Video title, 5 seconds, video playback, end article, elapsed time 0 seconds, double-tap to play or pause. | |
|  | aelement placeholder link with no event handler orhrefattribute | Touch | Placeholder text | |
|  | iframewith fallback content | Touch | This is an. Example hyperlink, link. In the target page. | Fallback content is ignored | 
|  | iframewithtitleattribute | Touch | This is an. Example hyperlink, link. In the target page. | |
|  | buttoncontainingimgwithalt | Touch | This is image alt, button | |
|  | buttoncontainingimgwitharia-label | Touch | This is image aria label, button | |
|  | buttoncontainingimgwitharia-labelledby | Touch | This is aria labelled by, button | |
|  | buttonwithtitlecontainingimgwith nullalt | Touch | This is button title, button | |
|  | buttonwitharia-labelcontainingimgwith nullalt | Touch | This is button aria label, button | |
|  | input type=imagewithalt | Touch | This is image button alt text, button | |
|  | input type=imagewithtitleattribute | Touch | This is image button title text, button | |
|  | input type=imagewitharia-labelattribute | Touch | This is image button aria label text, button | |
|  | input type=imagewitharia-labelledbyattribute | Touch | This is image button aria-labelled by text, button | |
|  | input type=textwitharia-describedbyattribute | Touch | First name, text field, a bit of instructions for this field linked with aria describedby | |
|  | input type=textwithtitleattribute | Touch | Enter search text, text field | |
|  | input type=textwitharia-labelattribute | Touch | Enter search text, text field | |
|  | input type=textwitharia-labelledbyattribute | Touch | Enter search text, text field, double tap to edit | |
|  | input type=textwithlabel for | Touch | Enter search text, text field, end article, double tap to edit | |
|  | input type=textinsidelabelwith text before control | Touch | Enter search text, text field, end article, double tap to edit | |
|  | input type=textinsidelabelwith text after control | Touch | Enter search text, text field, double tap to edit | |
|  | input type=textinsidelabelwith text before and after control | Touch | Enter search text blanks not allowed, text field, double tap to edit | |
|  | Yes/No radio buttons inside fieldsetelement | Touch | I agree to terms and conditions, form start. Yes, radio button, ticked, one of two. No, radio button, unticked, two of two. Sign me up to the newsletter, form start. Yes, radio button, ticked, one of two. No, radio button, unticked, two of two. | |
|  | imgwith nullalt | Touch | Nothing | Ignored as expected | 
|  | imgwithalt | Touch | This is alt text, image, logo other, test image | Text in image captured via OCR | 
|  | imgwithtitle | Touch | This is title text, image | |
|  | imgwitharia-label | Touch | This is an aria label, image | |
|  | imgwitharia-labelledby | Touch | This is an aria labelled by, image | |
|  | areawithaltattribute andimgwith nullalt | Touch | This is left alt text, link. This is right alt text, link. | Link role only announced when reading if owner IMG has null alt. | 
|  | Link containing imgwithalt | Touch | This is a link alt, link image, logo other, test image | |
|  | Link containing imgwithtitle | Touch | This is an image title, link image | |
|  | Click Here link with titleattribute | Touch | Click here, link, this is a link title | |
|  | Link text replaced by aria-labelattribute | Touch | This is an aria label, link | |
|  | Link text replaced by aria-labelledbyattribute | Touch | This is an aria labelled by, link | |
|  | Click Here link with aria-describedbyattribute | Touch | Click here, link, this is an aria described by | |
|  | Layout table with single cell | Reading | This is some text. | Treated as a layout table. | 
|  | Layout table with role=presentation | Reading | Example, Navigation. Links, Content. | Table treated as layout table - not announced as table. | 
|  | Data table with thcell headers | Reading | Morning, row header, column header, row 1 column 1, table start, 2 rows 2 columns. Afternoon, column header, row 1 column 2. Morning, free, row 2 column 1. Afternoon, busy, row 2 column 2, table end, end, end. | Column headers are not read by the Read Screen gesture, but are read by the Read Item gesture. | 
|  | PDF9 Document with headings | Heading | Heading 1, heading level 1. Heading 1.2, heading level 2. | |
|  | PDF1 Image with alt text | Touch | This is alt text, image | |
|  | PDF4 Decorative image marked as artifact | Touch | Nothing | Image ignored as expected | 
|  | PDF19 Phrase language set to German | Touch | Rah-di-oh | Pronounced as German | 
|  | PDF6 Table with header markup | Touch | Morning, column header, row 1, column 1, heading, table start, 2 rows, 2 columns. Afternoon, column header, row 1, column 2, heading. Morning, free, row 2, column 1. Afternoon, busy, row 2, column 2, table end. | |
|  | PDF6 Table with header markup and alt text | Touch | Morning, column header, row 1, column 1, heading, table start, 2 rows, 2 columns. Afternoon, column header, row 1, column 2, heading. Morning, free, row 2, column 1. Afternoon, busy, row 2, column 2, table end. | Word Alt Text and Description not voiced |