Car App: CarPlay 및 Android Auto 개발의 본질

저자: IT Sectr 게시일: 2026-02-15 읽는 시간: 9 분

Car App — Apple CarPlay 및 Android Auto와 통합되는 차량용 인포테인먼트 시스템 애플리케이션입니다. CarPlay는 iPhone 인터페이스를 자동차 화면에 투사하고 Siri, 터치 스크린 또는 스티어링 휠 버튼을 통해 제어되는 Apple의 기술입니다. Android Auto는 Android 스마트폰을 위한 Google의 유사한 기술입니다. Car App 개발에는 iOS용 Swift로 CarPlay framework 및 SiriKit을 사용한 애플리케이션 생성과 Android용 Kotlin으로 Car App Library, MediaBrowserService 및 NavigationManager를 사용한 애플리케이션 생성이 포함됩니다. Car App 지원은 현대 자동차의 표준이 되고 있습니다 — Apple에 따르면 미국 신차의 98%가 CarPlay를 지원하며, Android Auto는 200개 이상의 모델에서 사용 가능합니다.

주요 포인트

  • Car App — CarPlay(iOS) 및 Android Auto(Android)용 애플리케이션, 운전 중 사용에 최적화
  • Apple CarPlay — iPhone 인터페이스를 자동차 화면에 투사, Siri 및 터치로 제어
  • Android Auto — Google Assistant 지원으로 Android 스마트폰을 자동차 화면에 투사
  • CarPlay framework — Swift로 인터페이스를 구축하기 위한 CPInterfaceController, CPTemplate, CPListItem
  • Car App Library — MediaBrowserService 및 NavigationManager로 Automotive 애플리케이션을 만들기 위한 Android 라이브러리

Car App이란

Car App — 스마트폰 투사를 통해 차량용 인포테인먼트 시스템(IVI)에서 작동하는 애플리케이션입니다 — iOS용 Apple CarPlay 및 Android용 Android Auto. Android Automotive OS(차량 내장 OS)와 달리 CarPlay와 Android Auto는 모바일 애플리케이션의 확장으로, 전화에서 실행되고 인터페이스를 자동차 화면에 투사합니다. Car App은 CarPlay 또는 Android Auto 프로토콜을 구현하는 기존 iOS/Android 앱입니다.

Car App의 주요 카테고리: 내비게이션(Apple Maps, Google Maps, Waze, Sygic), 오디오(Spotify, Apple Music, YouTube Music, Audible, Castbox), 메시징(Siri/Google Assistant를 통한 읽기 및 받아쓰기), 자동차 기능(EV 충전, 주차, 차량 상태), VOIP 통화(WhatsApp, Zoom). 각 카테고리에는 고유한 인터페이스 템플릿이 있습니다 — ListTemplate, MapTemplate, AudioTemplate. 시스템 자체가 등록된 Intents를 기반으로 애플리케이션이 어떤 카테고리를 지원하는지 결정합니다.

Car App 제한 사항: Apple과 Google은 안전을 위해 UX를 엄격히 통제합니다 — 최소 요소 수, 큰 버튼(최소 48x48 pt), 텍스트 입력 없음(음성만), 운전 중 자동 인터페이스 어두워짐, 비디오 금지. 누름에 대한 응답 시간은 100ms 미만이어야 합니다. 모든 애플리케이션은 필수 검토를 거칩니다(CarPlay의 경우 App Review, Android Auto의 경우 Google Play Console + CTS).

Apple CarPlay: CarPlay framework 및 SiriKit

CarPlay framework(이전 CPKit) — Swift로 CarPlay 애플리케이션을 만들기 위한 Apple의 프레임워크입니다. 핵심 클래스는 CPInterfaceController로, 템플릿 탐색을 관리합니다. CPInterfaceController에는 템플릿 스택이 포함됩니다: CPListTemplate(목록), CPMapTemplate(내비게이션), CPNowPlayingTemplate(오디오), CPVoiceControlTemplate(음성 제어). CPListTemplate에는 CPListItem이 포함됩니다 — 아이콘, 텍스트 및 작업이 있는 목록 항목입니다.

CarPlay용 SiriKit — 차량 내 애플리케이션의 음성 제어를 위한 SiriKit 확장입니다. 애플리케이션은 Intents를 등록합니다(INPlayMediaIntent — 재생, INStartWorkoutIntent — 운동, INSendMessageIntent — 메시지). CarPlay 연결 시 Siri가 자동으로 활성화되며 스티어링 휠의 음성 제어 버튼을 통해 사용할 수 있습니다. SiriKit CarPlay는 CarPlay Dashboard를 지원합니다 — CarPlay 홈 화면에 애플리케이션의 정보(목적지, 현재 트랙)를 표시하는 위젯입니다.

CarPlay 연결 프로세스: iPhone은 Lightning/USB-C 케이블 또는 무선(CarPlay Wireless, iOS 9부터)으로 자동차에 연결됩니다. 연결 후 애플리케이션이 CPApplicationDelegate를 구현하는 경우 iOS가 자동으로 CarPlay 세션을 시작합니다. 개발자는 연결 시점을 제어하지 않습니다 — 시스템이 세션 시작 및 종료 시 delegate 메서드를 호출합니다. CarPlay는 멀티태스킹을 지원합니다: 음악으로 전환해도 내비게이션이 백그라운드에서 작동하며 음성 안내가 계속 울립니다.

Android Auto: Car App Library

Android Car App Library — Android Auto와 호환되는 애플리케이션을 만들기 위한 Android 라이브러리입니다. 기본 구성 요소: CarAppService — Android Auto의 진입점; Session — 세션 수명 주기 관리; Screen — 애플리케이션의 각 화면; CarScreenManager — 디스플레이 관리. 애플리케이션은 미디어 콘텐츠용 MediaBrowserService와 내비게이션 안내용 NavigationManager를 지원합니다.

MediaBrowserService — 오디오 애플리케이션의 핵심 구성 요소입니다. 애플리케이션은 재생을 관리하기 위해 MediaBrowserService와 MediaSession을 구현합니다. Android Auto가 자동으로 컨트롤(재생/일시정지, 다음, 이전)과 트랙 목록을 표시합니다. NavigationManager는 내비게이션 애플리케이션에 사용됩니다 — 회전 지시, 경로 상태 및 알림을 전달합니다. NavigationManager는 Android Auto 상태 표시줄에 내비게이션 안내를 표시하기 위한 CarNotification을 지원합니다.

Android Auto 요구 사항: 애플리케이션 매니페스트에 category="android.intent.category.APP_AUTO"가 있어야 함; AndroidX 및 최소 SDK 26+ 사용 필수; 다크 테마(DayNight) 지원; 터치 및 음성 제어 지원; Android Auto Compatibility Test Suite(CTS) 준수. Google Play는 보안 및 UX 요구 사항 준수 여부를 각 애플리케이션에 대해 확인합니다. 인증 프로세스는 1~4주가 소요됩니다.

코드 예제: Swift 및 Kotlin

CarPlay framework를 사용한 Swift의 CarPlay용 내비게이션 애플리케이션 예제입니다.

swift
import CarPlay

class CarPlaySceneDelegate: CPTemplateApplicationSceneDelegate {

    func templateApplicationScene(
        _ templateApplicationScene: CPTemplateApplicationScene,
        didConnect interfaceController: CPInterfaceController
    ) {
        let searchItem = CPListItem(
            text: "주소 검색",
            detailText: "목적지 입력"
        )
        searchItem.handler = { _, completion in
            // 검색 화면 열기
            completion()
        }

        let favoritesItem = CPListItem(
            text: "즐겨찾기",
            detailText: "저장된 주소"
        )
        favoritesItem.handler = { _, completion in
            showFavorites()
            completion()
        }

        let section = CPListSection(items: [searchItem, favoritesItem])
        let listTemplate = CPListTemplate(
            title: "내비게이션",
            sections: [section]
        )

        interfaceController.setRootTemplate(listTemplate, animated: true)
    }

    func showFavorites() {
        // 즐겨찾는 주소 목록 표시
    }
}

// 음성 제어용 SiriKit Intent
class NavigationIntentHandler: NSObject, INSearchForMessagesIntentHandling {
    func handle(intent: INSearchForMessagesIntent,
                completion: @escaping (INSearchForMessagesIntentResponse) -> Void) {
        // Siri를 통한 음성 명령 처리
        let response = INSearchForMessagesIntentResponse(
            code: .success, userActivity: nil
        )
        completion(response)
    }
}

핵심 포인트: CPTemplateApplicationSceneDelegate — CarPlay 세션의 진입점; CPInterfaceController가 템플릿 스택을 관리; CPListTemplateCPListItem — 기본 UI 구성 요소; .handler — 각 목록 항목의 클릭 핸들러.

Car App Library를 사용한 Kotlin의 Android Auto용 내비게이션 애플리케이션 예제:

kotlin
// CarAppService — Android Auto의 진입점
class NavigationCarAppService : CarAppService() {
    override fun createSession(): Session = NavigationSession()
}

// Session — 세션 수명 주기 관리
class NavigationSession : Session() {
    override fun onCreateScreen(manager: ScreenManager): Screen {
        return MainScreen(carContext)
    }
}

// MainScreen — 내비게이션이 있는 메인 화면
class MainScreen(carContext: CarContext) : Screen(carContext) {
    override fun onGetTemplate(): Template {
        val searchAction = Action.Builder()
            .setTitle("주소 검색")
            .setOnClickListener { showSearchScreen() }
            .build()

        val favoritesAction = Action.Builder()
            .setTitle("즐겨찾기")
            .setOnClickListener { showFavorites() }
            .build()

        return ListTemplate.Builder()
            .setTitle("내비게이션")
            .setHeaderAction(Action.APP_ICON)
            .addAction(searchAction)
            .addAction(favoritesAction)
            .build()
    }

    private fun showSearchScreen() {
        screenManager.push(SearchScreen(carContext))
    }

    private fun showFavorites() {
        screenManager.push(FavoritesScreen(carContext))
    }
}

// AndroidManifest — 서비스 등록
<service
    android:name=".NavigationCarAppService"
    android:exported="true">
    <intent-filter>
        <action
            android:name="androidx.car.app.action.NAVIGATION" />
    </intent-filter>
    <category
        android:name="android.intent.category.APP_AUTO" />
</service>

핵심 포인트: CarAppService — Android Auto의 진입점; Session — 수명 주기 관리; Screen — 애플리케이션의 각 화면, Template 반환; ListTemplate — Action이 있는 목록용 템플릿; category.APP_AUTO — 매니페스트의 필수 카테고리.

요구 사항 및 게시

Apple CarPlay 요구 사항: 애플리케이션은 CarPlay Distraction Design Guidelines을 준수해야 함 — 최소 버튼 크기 48x48 pt, 텍스트 대비 4.5:1, 애니메이션 또는 비디오 없음, VoiceOver 지원. 게시 — App Store Connect를 통해, 애플리케이션은 표준 Apple 검토를 거칩니다. App Store Connect에서 CarPlay 지원을 지정하고 CarPlay 인터페이스 스크린샷을 첨부해야 합니다. CarPlay 애플리케이션은 광고 없이 무료일 수 없습니다 — Apple은 인앱 구매에 대해 30%(소기업의 경우 15%) 수수료를 부과합니다.

Android Auto 요구 사항: 애플리케이션은 Android Auto Design Guidelines을 준수하고 Android Auto Compatibility Test Suite(CTS)를 통과해야 함. 게시 — Google Play Console을 통해, 호환 기기 목록에 "Android Auto" 카테고리를 지정해야 합니다. Google Play는 다음을 확인합니다: 다크 테마(DayNight) 지원, 연결 끊김 시 올바른 동작, 화면 회전 처리, Google Assistant를 통한 음성 제어 지원. Android Auto 애플리케이션은 추가 수수료가 필요하지 않습니다 — 표준 Google Play 모델(15-30%).

매개변수Apple CarPlayAndroid Auto
프레임워크CarPlay framework (CPInterfaceController)Car App Library (CarAppService)
언어SwiftKotlin
음성 어시스턴트SiriKitGoogle Assistant
인터페이스CPListTemplate, CPMapTemplateListTemplate, MapTemplate
미디어MPNowPlayingInfoCenterMediaBrowserService
내비게이션CPNavigationSessionNavigationManager
게시App Store ConnectGoogle Play Console
수수료15–30%15–30%
검토App Review (1–3일)CTS + Google Play (1–4주)

무선 연결 지원: CarPlay Wireless는 iOS 9부터 사용 가능하며 Wi-Fi + Bluetooth가 필요합니다. Android Auto Wireless는 Android 11부터 사용 가능합니다. 무선 연결을 위해 자동차가 해당 표준을 지원해야 합니다. 개발자는 추가 코드를 작성할 필요가 없습니다 — OS가 자동으로 연결을 처리합니다.

자주 묻는 질문

Car App은 모바일 앱과 어떻게 다른가요?

Car App은 운전 중 사용에 최적화되어 있습니다: 최소 요소 수, 큰 버튼, 음성 제어, 텍스트 입력 없음. 애플리케이션은 안전 요구 사항을 준수해야 합니다 — Apple 및 Google의 Distraction Design Guidelines.

CarPlay에서 어떤 앱 카테고리를 사용할 수 있나요?

CarPlay는 카테고리를 지원합니다: 내비게이션(Apple Maps, Google Maps, Waze), 오디오(Spotify, Apple Music), 메시징(Siri를 통한 읽기 및 받아쓰기), 자동차 기능(EV 충전, 주차) 및 VOIP 통화.

Android Auto용 앱을 어떻게 개발하나요?

Android Car App Library를 사용하세요: 진입점으로 CarAppService, 수명 주기 관리용 Session, 각 화면용 Screen을 구현합니다. 애플리케이션은 미디어용 MediaBrowserService 또는 내비게이션용 NavigationManager를 지원해야 합니다.

Car App에 검토가 필요한가요?

네, 두 플랫폼 모두 검토가 필요합니다. Apple은 App Review를 통해 CarPlay 애플리케이션을 검토합니다. Android Auto는 Android Auto Compatibility Test Suite(CTS) 통과 및 Google Play Console 확인이 필요합니다.

Car App에는 어떤 언어가 사용되나요?

CarPlay — Swift와 CarPlay 프레임워크(CPInterfaceController, CPTemplate, CPListItem) 및 SiriKit. Android Auto — Kotlin과 Car App Library 및 MediaBrowserService.

요약

  • Car App — CarPlay(iOS) 및 Android Auto(Android)용 애플리케이션, 운전 중 안전한 사용에 최적화
  • Apple CarPlay는 CPInterfaceController, CPListTemplate 및 SiriKit을 통한 음성 제어로 CarPlay framework 사용
  • Android Auto는 CarAppService, Session, Screen 및 MediaBrowserService를 통한 미디어로 Car App Library 사용
  • 음성 제어 — Siri(CarPlay) 및 Google Assistant(Android Auto)는 내비게이션 및 메시징에 필수
  • UX 제한 — 큰 버튼 48x48 pt, 최소 요소, 비디오 금지, 100ms 미만 응답
  • 검토 — App Store(1~3일) 및 Google Play CTS(1~4주), 보안 및 UX 확인 포함
  • 무선 연결 — CarPlay Wireless(iOS 9+) 및 Android Auto Wireless(Android 11+)를 케이블 없이 사용 가능

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기