Розробка інтеграції CarPlay для iOS-додатків
CarPlay — це не окремий додаток. Це розширення існуючого iOS-додатку, який відображається на екрані мультимедійної системи автомобіля. Apple жорстко обмежує категорії додатків, які можуть працювати в CarPlay: навігація, аудіо, VoIP, месенджери, EV-зарядка, паркування, АЗС, їжа та напої (iOS 17+), фітнес (iOS 16+). Все інше — відхилення на перевірці.
Entitlement та категоріальні обмеження
Першим кроком є запит на CarPlay entitlement у Apple. Без com.apple.developer.carplay-* entitlement додаток не запуститься в симуляторі CarPlay, про реальне авто нема й мови. Entitlement прив'язаний до категорії: com.apple.developer.carplay-audio, com.apple.developer.carplay-navigation, com.apple.developer.carplay-communication тощо.
Категорія визначає не тільки entitlement, але й доступні UI-шаблони. Навігація використовує CPMapTemplate. Аудіо — CPNowPlayingTemplate + CPTabBarTemplate. Месенджери — тільки CPMessageListItem у CPListTemplate. Ви не можете малювати довільний UI в CarPlay — тільки шаблони Apple.
CarPlay шаблони та їх обмеження
CPMapTemplate — для навігації. Додаток рендерить карту через CPMapViewController, але CarPlay виводить її через CPTemplateApplicationScene. Складність у тому, що карта повинна працювати коректно при різних співвідношеннях сторін — екрани CarPlay бувають 7", 8", 10" з різними aspect ratio. CPMapTemplate надає guidanceBackgroundColor, mapButtons (максимум 4), та panningInterface для керування картою.
CPListTemplate — універсальний список. Максимум 30 елементів у секції, максимум 40 секцій. CPListItem підтримує зображення, текст, детальний текст, accessoryImage. Асинхронне завантаження зображень — через CPListItem.handler з callback. Якщо не повернути completion у listItemHandler — інтерфейс зависає.
CPNowPlayingTemplate — синглтон, загальний для всіх аудіо-додатків. Ви не можете створити кілька екземплярів. MPNowPlayingInfoCenter.default() повинен бути заповнений до того, як шаблон з'явиться на екрані, інакше CarPlay показує порожній програвач.
Інтеграція з основним додатком
CarPlay працює в окремій UIWindowScene — CPTemplateApplicationScene. Додаток отримує контроль через CPTemplateApplicationSceneDelegate. Це означає, що AppDelegate або SceneDelegate основного додатку працюють паралельно.
Архітектурно правильно: CarPlay scene делегує бізнес-логіку тому ж шару, що й основний додаток. Спільний AudioPlayerService, спільний NavigationRepository. CarPlay тільки відображає стан і передає команди.
Типова помилка: ініціалізація даних всередині CPTemplateApplicationSceneDelegate — це веде до дублювання сесій, конфліктів програвання та крахів при перемиканні між телефоном і CarPlay.
Тестування без реального авто. Simulator → Features → CarPlay включає CarPlay-вікно поруч з iPhone симулятором. Симулятор не відтворює всі особливості реального екрана (різні розміри, OEM-специфіку), але достатній для базової розробки. Фінальне тестування — в реальному автомобілі або через MirrorLink-адаптер.
Процес
Запит на CarPlay entitlement (до 2 тижнів очікування від Apple). Проектування flow у рамках доступних шаблонів — без компромісу з вимогами Apple. Розробка CPTemplateApplicationSceneDelegate, інтеграція з існуючою бізнес-логікою. Тестування в симуляторі та на реальному залізі.
Розклад
Аудіо-інтеграція (програвач + черга): 3–5 тижнів. Навігаційна інтеграція з картою: 6–10 тижнів. Месенджер/VoIP: 4–7 тижнів. Вартість розраховується після отримання entitlement та аналізу існуючого додатку.







