본문 바로가기
WWDC

[WWDC18] CarPlay Audio and Navigation Apps

by 고고 2022. 3. 8.

링크: https://developer.apple.com/videos/play/wwdc2018/213/

 

CarPlay Audio and Navigation Apps - WWDC18 - Videos - Apple Developer

Learn how to update your audio or navigation app to support CarPlay. Apps in CarPlay are optimized for use in the car, and automatically...

developer.apple.com

 

목차

1. CarPlay 오디오 앱

2. 새 CarPlay 프레임워크와 네비게이션 앱 + 데모

 

서론으로 CarPlay의 특징, 허용되는 앱 카테고리를 소개하였습니다.

 

1. CarPlay 오디오 앱

Sirirocka라는 예제 앱을 통해 설명합니다.

 

 

CarPlay에 있는 오디오 앱들은 CarPlay Template가 베이스입니다. 모든 CarPlay 시스템과 함께 작동하며 MediaPlayer API를 사용합니다.

 

 

PlayableContent는 DataSource와 Delegate가 있습니다.

 

 

이것은 CarPlay 오디오 앱을 지원하기 위해 필요한 최소한의 것입니다.

이 예제 앱은 DataSource와 MPPlayableContentManager에 대한 대리자를 제공하여 디스프레이에 정보를 제공하고 필요할 때 응답할 수 있습니다.

 

 

iOS 12에서 MPPlayableContent의 개선은 다음과 같습니다.

 

 

오디오 앱을 개선하는 방법

 

1. reloadData는 필요할 때만.

reloadData는 CarPlay 디스플레이에서 전체 앱의 계층 구조를 해체하고 오디오 앱에 모든 것을 다시 재구성하도록 요청하는 것입니다. 당연히 비용이 많이 들게 될 수 있어 앱이 응답하지 않게 됩니다.

 

2. beginUpdate와 endUpdates 사용

업데이트해야 할 콘텐츠는 beginUpdates와 endUpdates 호출 내부에 함께 래핑해야 적절하게 업데이트될 수 있습니다.

 

3. 성능을 최적화하기 위해 data source의 내부 표현이나 캐시를 앱의 어딘가에 보관.

 

 

CarPlay에서는 앱이 컨텐츠를 제 시간안에 띄우지 않으면 아래처럼 시간초과가 납니다.

앱이 잠겨있지 않는 폰에 의존하는 데이터 보호 정책이 있는 경우 앱 정보에 액세스할 수 없으며, 결국 CarPlay가 시간초과됩니다.

또한 WIFI 네트워크 연결이 끊길 수 있는 상황을 테스트해야 합니다.

 

 

 

예제 앱은 가장 인기있는 트랙을 가져올 때에 시간이 조금 걸립니다. 이 경우 beginLoadingChildItems라는 API를 사용합니다. 이 API는 indexPath가 CarPlay 디스플레이에 표시될 때마다 호출됩니다. 사용자가 테이블 셀을 스크롤하거나 다른 탭을 선택할 때 디스플레이에 표시되는 모든 indexPath에 대해 beginLoadingChildItems가 호출됩니다.

 

 

만약 로그아웃한 상황이라면 어떻게 해야할까요? 앱에서는 명확하게 알 수 있지만, CarPlay에서는 유저가 알기 어렵습니다.

 

 

따라서 앱이 로그아웃된 경우에도 사용자가 최소한 앱과 상호작용할 수 있도록 제공해야 합니다.

 

 

 

2. 새 CarPlay 프레임워크와 네비게이션 앱

아래같은 특징이 있고 Country Roads라는 앱으로 살펴보겠습니다.

 

 

CPInterfaceController는 템플릿과의 연결이자 차 화면에 표시되는 것을 관리하기 위해 사용할 수 있는 것입니다. 루트 템플릿을 설정할 수 있습니다.

 

 

맵 템플릿은 네비게이션 바에 버튼을 배치할 수 있습니다. 최대 4개까지 - 왼쪽에 2개, 오른쪽에 2개입니다. CPBarButton의 인스턴스이면 텍스트 또는 이미지로 만들어지고 시스템에 의해 자동으로 크기와 스타일이 지정됩니다. 

지도 창 위에 최대 4개의 버튼을 배치할 수 있습니다. 네비게이션 바 버튼과 달리 지도 버튼은 시스템에서 스타일을 지정하지 않습니다.

 

 

만약 맵 템플릿이 팬 모드에 들어가면 유저가 상호작용할 수 있고 API로 변환되는 4개의 방향 버튼이 표시되며 앱은 지도를 패닝할 방향만 알면 됩니다.

 

 

또한 더 좋은 길이 있다면 이런 식으로 네비게이션 alert를 띄울 수 있습니다. 네비게이션 alert는 맵 템플릿에 표시되며 제목, 부제목, 이미지, 기본 및 보조 액션으로 구성할 수 있고 자동으로 사라집니다.

 

 

맵 템플릿을 만들고 네비게이션 바 버튼을 넣는 예제입니다.

 

 

 

그리드 템플릿도 있습니다. 최대 8개까지 타이틀과 이미지가 있는 그리드를 생성할 수 있습니다. 네비게이션 타이틀도 설정 가능합니다.

 

 

리스트 템플릿에는 이미지, 제목, 부제목이 들어갈 수 있습니다. 또한 선택되었을 때 delegate에서 호출됩니다.

 

 

검색 템플릿도 있습니다.

 

 

ActionSheet 스타일의 CPAlert를 사용하여 alert를 보여줄 수 있습니다.

 

 

보이스 컨트롤을 돕는 템플릿도 제공합니다. 예제에서 보도록 하겠습니다. (위에 있는 템플릿들을 연결한 것입니다.)

 

 

아래의 네비게이션 앱 플로우를 CarPlay로 구현해보겠습니다.

 

 

경로 선택 시에는 한 경로 또는 여러 경로를 나타낼 수 있습니다.

 

 

 

CPTrip에는 출발지 및 목적지, 선택할 수 있는 경로인 CRouteChoices가 포함됩니다.

CPTravelEstimates는 전체 여행과 개별 기동에 소요되는 시간을 설명합니다. 

맵 템플릿에서 콘텐츠가 변경되면 윈도우의 safeArea Insets가 업데이트되어 safeArea를 알려줍니다.

 

 

또 이런 안내 카드를 표시할 수 있습니다.

 

Go 버튼을 누르면 템플릿 델리게이트에서 아래 함수가 호출됩니다.

 

CPNavigationSession과 CPManeuver를 사용하여 메뉴파를 설정할 수 있고 시스템이 자동으로 기본 메뉴바를 표시합니다. 두번째 메뉴바를 설정하면 안내 카드 위에 표시됩니다.

AVAudioSessionModeVoicePrompt를 사용하여 오디오 세션을 구성하면 오디오 소스가 어디에서 왔는지에 관계없이 CarPlay 시스템이 오디오 소스를 적절하게 더킹할 시기를 알 수 있스비낟. 또한 카테고리 옵션 duckOthers와 interruptSpokenAudio AndMixWithOthers를 사용해 세션을 구성하면 오디오가 다른 iOS 오디오 소스와 잘 재생되는지 확인하는 데 도움이 됩니다.

 

 

 

이런식으로 앱이 백그라운드에 있어 알람을 표시해야 될 때가 있습니다.

 

 

true를 반환할 시 maneuver, travleEstimates, navigationAlert를 배너로 만들어줍니다.

 

 

지금까지 알아본 API들의 예제입니다.

'WWDC' 카테고리의 다른 글

[WWDC16] Introducing SiriKit  (0) 2022.05.02
[WWDC17] Enabling Your App for CarPlay  (0) 2022.03.08
[WWDC20] Accelerate your app with CarPlay  (0) 2022.03.08
[WWDC16] Developing CarPlay Systems, Part 1  (0) 2022.03.07
[WWDC21] Localize your SwiftUI app  (0) 2022.01.27

댓글