iOS 14에서 업데이트 된 접근성 기능 살펴보기 1부, 접근성 API 처리 관련
안녕하세요, 엔비전스입니다.
올해에도 어김없이 9월에 애플에서는 iOS 14 정식 버전이 출시되었으며 역시나 어김없이 널리 블로그를 통해 iOS 14에서 변경된 접근성 기능에 대해 발행하게 되었습니다.
본 아티클 역시 2부로 나뉘어집니다. 1부에서는 접근성을 테스트할 때 참고가 필요한 API 처리 관련 변경 사항 혹은 추가된 API 위주로 구성하였으며 2부에서는 기타 변경된 접근성 기능에 대해 다루도록 하겠습니다.
커스텀 액션 피드백 다양화
기본적으로 이중 탭하여 무언가를 실행할 수 있는 각각의 객체는 이중 탭 혹은 길게 이중 탭, 두 액션을 가집니다. 그러나 개발자는 스크린 리더 사용자를 돕기 위하여 하나의 객체에 여러 액션을 추가적으로 구현하는 경우가 있습니다. 이것을 커스텀 액션이라 부릅니다.
커스텀 액션을 구현하는 경우는 다양합니다.
예를 들어 ‘학교 종이 땡땡땡’, ‘무엇이 무엇이 똑같을까’ 와 같은 재생할 수 있는 여러 음악 목록 항목이 있습니다. 그리고, 각 요소별로 삭제와 더보기 버튼이 각각 있다고 가정해 봅시다.
그러면 스크린 리더 사용자는 여러 음악 리스트를 빠르게 탐색하기 어렵습니다. 왜냐하면 한 항목에 세 개의 포커스를 가지므로 4개의 곡을 확인하려면 한 손가락 오른쪽 쓸기를 열 번 해야 하기 때문입니다. 이럴 때는 다음과 같이 수정할 수 있습니다.
- 각 음악 제목만 포커스 되게 합니다.
- 삭제, 더보기 버튼은 isAccessibilityElement = no를 사용하여 포커스를 숨깁니다.
- 대신 각 음악 제목에 삭제, 더보기를 커스텀 액션으로 구현하는 것입니다.
이렇게 하면 스크린 리더 사용자는 한 손가락 오른쪽 혹은 왼쪽 쓸기를 사용할 경우 곡 리스트 단위만 탐색이 될 것이고 삭제나 더보기를 하려면 커스텀 액션 동작인 한 손가락 위 또는 아래 쓸기를 사용하면 되므로 훨씬 효율적으로 곡 목록을 탐색할 수 있을 것입니다.
그런데 기존까지는 사용자가 포커스 한 객체에 기본 액션뿐 아니라 커스텀 액션이 있을 경우 ‘동작을 사용할 수 있습니다.’와 같이 음성으로만 커스텀 액션이 있음을 알렸습니다. 그러나 iOS 14 버전부터는 음성이 아닌 사운드를 통해서 피드백할 수 있는 옵션이 추가되어 보이스오버 설정 내의 상세 정도 > 동작 메뉴에서 변경할 수 있습니다. 사운드 출력으로 변경 시에는 커스텀 액션이 있을 경우 기존 요소 레이블이 끝남과 동시에 특유의 사운드를 재생하게 됩니다.
컨테이너 읽기 설정
다른 아티클을 통해서 iOS에서의 컨테이너에 대해 기술한 적이 있습니다. 화면에 따라 다르겠지만 대부분 한 화면에는 내비게이션 컨테이너, 본문 컨테이너, 탭바 컨테이너 등 여러 컨테이너를 구성하여 앱을 구현하게 됩니다. 또한 TableView, TabBar 컨테이너와 같이 명확한 의미를 가진 컨테이너 사이를 이동하는 경우 컨테이너가 변경되었다는 사운드를 출력하며 컨테이너 뷰에 accessibilityLabel을 삽입하여 보이스오버가 컨테이너에 접근했을 때 어떤 영역인지 알릴 수 있도록 하는 방법에 대해서도 기술하였습니다. iOS 14에서는 컨테이너 관련하여 몇 가지 추가된 사항들이 있습니다.
- TabBar, ToolBar와 같은 명확한 의미를 가진 컨테이너에 대해서는 컨테이너에 접근 시 탭 막대, 도구 막대와 같이 컨테이너 정보를 읽어줍니다. 기존까지는 컨테이너 뷰에 대체 텍스트를 삽입하지 않는 이상 어떤 컨테이너 영역인지는 읽어주지 않았었습니다.
- 컨테이너에 접근 시 어떤 정보를 읽을 것인가에 대한 옵션 설정 기능이 추가되었습니다. 말하기, 사운드 재생, 음높이 변경, 동작 없음 총 4개의 옵션이 있으며 동작 없음을 선택할 경우 컨테이너에 대체 텍스트를 삽입했다 하더라도 시스템 자체에서 출력하는 정보를 포함한 어떠한 컨테이너 정보도 읽지 않으며 사운드 효과도 출력하지 않게 됩니다. 나머지 세 옵션은 다중 선택이 가능하며 당연한 이야기이지만 말하기를 선택하지 않았더라도 음 높이 변경을 선택하면 말하기는 자동 선택됩니다.
추가 정보 콘텐츠 처리
모바일 앱을 사용하면서 스크린 리더 사용자는 화면에 대한 정보가 부족해서 앱 사용에 어려움을 겪기도 하지만 읽어주는 양이 너무 많아서 불편을 겪기도 합니다. 객체 탐색을 기본으로 하고 있는 모바일 스크린리더에서는 한 객체에 여러 정보가 존재하는 경우 정보를 어떤 순서로 줄 것인지, 특정 정보는 꼭 필요한 정보인지 등에 대해 개발 과정에서 고민을 하게 되는 경우가 있습니다. 물론 화면에 표시된 모든 정보는 스크린 리더 사용자에게도 동등하게 제공되어야 하지만 한 객체에 포커스 했을 때 번호, 제목, 등록일, 좋아요 한 수, 댓글 수, 싫어요 한 수 등을 한꺼번에 읽는다면 사용자에 따라 상당히 불편할 수도 있습니다. 이 문제를 해결하기 위해 iOS 14에서는 일반 콘텐츠와 커스텀 콘텐츠를 상황에 따라 따로 분류하여 커스텀 콘텐츠는 사용자의 설정에 따라 읽지 않도록 하거나 읽고 싶을 때 특정 제스처를 통해 읽도록 할 수 있는 기능이 추가되었습니다. 물론 이 기능을 활용하려면 앱 개발 시에 특정 콘텐츠는 기본적으로 사용자가 포커스 했다고 해서 무조건 출력하지 말고 커스텀 콘텐츠로 가지고 있다가 사용자가 궁금할 때만 읽도록 하라는 것을 보이스오버에 알려 주어야 하며 이때 사용되는 API는 AXCustomContentProvider 입니다.
이 API를 활용하여 개발된 앱은 아이폰 내의 기본 사진 앱입니다. 각 사진에 포커스를 하면 사진 유형, 날짜, 성인과 같은 기본 정보만 출력하고 어떤 방향으로 촬영했는지, 시간, 얼굴이 몇 개인지 등은 추가 정보 콘텐츠로 분류하였습니다. 스크린 리더 사용자는 이러한 커스텀 콘텐츠를 어떻게 읽을 것인지 설정할 수 있는데 기존처럼 기본 정보와 함께 항상 읽게 할 것인지 아니면 커스텀 콘텐츠를 가진 요소에 포커스 했을 때 사운드만 출력하고 한 손가락 위 또는 아래 쓸기를 통해서 각 커스텀 정보를 읽을 것인지 등을 옵션을 통해 설정할 수 있습니다. 경로는 보이스오버 설정 섹션에서 상세 정도 > 더 많은 콘텐츠 입니다.
Header trait에 관하여
앱뷰 화면에서 특정 요소가 보이스오버에서 머리말, 즉 제목으로 인식되도록 할 때 사용하는 API가 바로 header trait 입니다. 그런데 웹뷰와 달리 해당 trait를 사용하더라도 레벨은 사용할 수가 없었는데 iOS 14 메시지 앱에서는 앱뷰에서도 레벨 1과 3을 을 함께 사용함으로써 섹션 제목에 대한 레벨을 다양화하였습니다. 하지만 해당 레벨을 부여하는 API는 외부에는 아직 공개가 되지 않았습니다.