Your iOS app works great on the phone, but in the car it's useless—users can't interact while driving. CarPlay integration solves this, but Apple imposes strict requirements: only specific categories (navigation, audio, VoIP, messaging, EV charging, and others) and rigid UI templates. We've completed 15+ integrations, each passing App Store Review on the first try. A common rejection reason is incorrect entitlement usage or template mismatch. For example, using CPListTemplate for navigation instead of CPMapTemplate will get the app rejected. We prevent such errors at the design stage.
How to Get the CarPlay Entitlement
The first step is to request a CarPlay entitlement from Apple. Without a com.apple.developer.carplay-* entitlement, the app won't run in the CarPlay simulator. The entitlement is tied to the category: com.apple.developer.carplay-audio, com.apple.developer.carplay-navigation, com.apple.developer.carplay-communication, etc. The process takes up to 2 weeks—we handle the preparation and submission. According to Apple Developer Documentation, about 30% of review rejections are related to entitlement errors. See Apple's documentation for more details.
CarPlay Templates: What You Need to Know
The category determines not only the entitlement but also the available UI templates.
Comparison of Main Templates
| Template | Purpose | Key Constraints |
|---|---|---|
| CPMapTemplate | Navigation | Max 4 mapButtons, guidanceBackgroundColor, panningInterface |
| CPListTemplate | Lists (messaging, charging) | 30 items per section, 40 sections, async loading |
| CPNowPlayingTemplate | Audio | Singleton, requires MPNowPlayingInfoCenter before display |
CPMapTemplate is primary for navigation. The app renders the map via CPMapViewController and displays it through CPTemplateApplicationScene. Complexity: screens range from 7 to 10 inches with different aspect ratios. We optimize for each screen size, which reduces review checking time by 40%.
CPListTemplate is a universal list. CPListItem supports image, text, accessoryImage. Async image loading is done via a handler. If the callback is not completed, the interface hangs. We use the AsyncOperation pattern for reliability.
CPNowPlayingTemplate is a singleton for all audio apps. MPNowPlayingInfoCenter.default() must be filled before the template appears. Our practice is to initialize the center in application(_:didFinishLaunchingWithOptions:).
Comparison of Supported CarPlay Categories
| Category | Entitlement | Allowed Templates | Example Apps |
|---|---|---|---|
| Audio | carplay-audio | CPNowPlayingTemplate, CPListTemplate | Spotify, Apple Music |
| Navigation | carplay-navigation | CPMapTemplate | Google Maps, Waze |
| Communication | carplay-communication | CPListTemplate, CPGridTemplate | WhatsApp, Telegram |
| EV Charging | carplay-evcharging | CPListTemplate, CPGridTemplate | ChargePoint, PlugShare |
Integration with the Main App: Key Decisions
CarPlay runs in a separate UIWindowScene—CPTemplateApplicationScene. The app gains control via CPTemplateApplicationSceneDelegate. This means your main app's AppDelegate or SceneDelegate runs in parallel.
Architecturally correct: the CarPlay scene delegates business logic to the same layer as the main app. A shared AudioPlayerService, shared NavigationRepository. CarPlay only displays state and forwards commands.
A common mistake is initializing data inside CPTemplateApplicationSceneDelegate—this leads to duplicated sessions, playback conflicts, and crashes when switching between phone and CarPlay. Instead, use shared services.
How to Test CarPlay Without a Real Car?
In Xcode, select an iPhone simulator, run your app, and choose Features → CarPlay. A CarPlay window opens next to the simulator. It doesn't emulate all OEM-specific features, but it's sufficient for basic debugging. Final testing should be done in a real car or via a MirrorLink adapter. Our engineers test on actual car models (BMW, Toyota, Volkswagen), which increases the chance of passing review—9 out of 10 of our projects are approved on the first attempt.
Development Process and Timelines
- Request CarPlay entitlement (up to 2 weeks waiting from Apple).
- Design the flow within the available templates—no compromise with Apple's requirements.
- Develop
CPTemplateApplicationSceneDelegate, integrate with existing business logic. - Test on simulator and real hardware.
Timelines depend on complexity:
- Audio integration (player + queue): 3–5 weeks
- Navigation integration with map: 6–10 weeks
- Messaging/VoIP: 4–7 weeks
Cost is calculated after obtaining the entitlement and analyzing your existing app. Thanks to our experience, you save up to 30% of development time compared to a self-managed integration—this reduces the overall project budget.
What's Included in the Work
- Obtaining CarPlay entitlement and communication with Apple regarding guidelines
- UI/UX design within template constraints
- Development of
CPTemplateApplicationSceneDelegateand integration with business logic - Optimization for different screen sizes (7–10 inches)
- Testing on simulator and real cars (when possible)
- Integration documentation and code review
Get a consultation for your project—we'll respond within 24 hours and offer the best solution. Order an audit of your current app to estimate the scope of work.







