What are App Clips and CarPlay, what constraints do they impose, and when would you build them?
Predict first
A team wants a custom, fully designed screen for their app in the car. Which model does CarPlay use instead?
// A: any SwiftUI view, since CarPlay runs the app’s UI
// B: system templates that the app fills with data, within an approved category and entitlement
// C: a web page
- A
- B
- C
Mental model. An App Clip is a pop-up shop: small enough to set up in a minute, open for one purpose, gone when you leave. CarPlay is a pre-fitted dashboard slot: you supply the content, but the car maker’s template decides how it looks.
An App Clip is a small, fast part of your app that users launch without installing it, from an NFC tag, QR code, App Clip Code, Maps place card, Safari banner or Messages link, to do one task (rent a scooter, pay for parking, order at a table). It is a separate target in the same project that shares code and assets with the app, and must be small: the size limit is 15 MB (up to 100 MB for digital-only invocations on iOS 17 and later), which forces you to include only what the task needs (no big frameworks, lean assets, and downloadable resources instead). It launches from an invocation URL registered in App Store Connect and validated with associated domains (the same apple-app-site-association file as universal links, with an appclips entry), reads the URL to decide what to show, and offers the full app in a banner (notifications are limited to a window of 8 hours after launch through ephemeral authorization, and data is shared with the full app only through mechanisms you arrange deliberately, such as a shared app-group container or the Keychain). The clip is removed after a period of inactivity, so it must not hold the user’s only copy of anything, and some APIs are restricted (no background tasks beyond a limited set, no certain framework features, limited data). Build one when the task is short, location- or object-triggered, and must be reachable without an install: the success measure is conversion to the full app and completion of the task.
CarPlay shows apps on the car’s display through templates rather than your own views: you provide data to system-rendered screens (CPListTemplate, CPGridTemplate, CPMapTemplate, CPNowPlayingTemplate, CPTabBarTemplate, CPInformationTemplate), which keeps the UI safe to glance at. Only certain categories are allowed (audio, communication, driving task, EV charging, fueling, parking, quick food ordering, navigation, voice-based conversational), and each needs an entitlement that you request from Apple with a justification (it is not granted automatically). The app is a scene (CPTemplateApplicationScene with a CPTemplateApplicationSceneDelegate, declared in Info.plist), connects when the car connects (possibly with no iPhone UI running), and must be responsive, glanceable and minimal: few list items, short text, large touch targets, and no content that needs reading while driving. Test with the CarPlay simulator (an external window in Xcode’s simulator tools) and in a real car, handle audio sessions and interruptions properly, and follow the CarPlay design guidelines strictly: review is strict. Both are constrained products: weigh the entitlement and review effort against the benefit before committing to them.
CarPlay renders only templates supplied by the framework, for safety, and only for categories Apple approves.
Common traps
- Building an App Clip with the full app’s weight. It must stay under the size limit; share only what the task needs.
- Assuming a CarPlay entitlement is automatic. You must apply for the category and justify it.
They might follow up with
- How is an App Clip launched? From an invocation URL (NFC, QR, App Clip Code, Maps, Safari or Messages) validated through associated domains.
- Why does CarPlay use templates? So the UI stays standardised, glanceable and safe to use while driving.
Related questions
- 17.6.1 How do Live Activities (ActivityKit) and WeatherKit work, and what are their limits?
- 17.7.1 How do you approach an unfamiliar Apple framework: what do you check before you write code, and how do you…
- 6.7.2 What is the difference between a custom URL scheme and a universal link, and which do you use?
← How do Live Activities (ActivityKit) and WeatherKit work, and what…