Hi everyone!
I’m integrating push notifications for a taxi-driver app and ran into a blocking CarPlay issue.
When the iPhone is connected to CarPlay (wired or wireless), the push arrives on the phone without any sound and nothing is shown or announced on the CarPlay screen.
If I unplug CarPlay, the same push plays the default sound and shows a normal banner on the lock screen, so the payload itself looks valid.
Environment
iPhone 13 Pro, iOS 18.0
CarPlay head-unit: Xcode 16.2 CarPlay Simulator
App built with Flutter 3.22 + firebase_messaging: ^15.2.5
Deployment target: iOS 14.0
Xcode capabilities enabled: Push Notifications, Time-Sensitive Notifications
App settings on the device: Allow Notifications -› Sounds ON, Show in CarPlay ON
Siri › Announce Notifications › CarPlay: master toggle ON + my app added to the allowed list
Driving Focus = Off (same result if it’s On)
Native setup in AppDelegate.swift
UNUserNotificationCenter.current().requestAuthorization(
options: [.alert, .sound, .badge, .carPlay]
) { _,_ in }
let carPlayCategory = UNNotificationCategory(
identifier: "CARPLAY_ORDER",
actions: [],
intentIdentifiers: [],
options: [.allowInCarPlay]
)
UNUserNotificationCenter.current().setNotificationCategories([carPlayCategory])
UNUserNotificationCenter.current().delegate = self
application.registerForRemoteNotifications()
APNs payload that I send via FCM
{
"aps": {
"alert": {
"title": "New test order",
"body": "Location info test"
},
"sound": "default",
"category": "CARPLAY_ORDER",
"interruption-level": "time-sensitive",
"relevance-score": 1
}
}
What could be the problem? Please help me solve the error
How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here
Posts under CarPlay tag
160 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
Is there a way to share a SwiftUI App's @Observable model into a CPTemplateApplicationSceneDelegate ?
Is there an incantation to go from the UIApplicationDelegate via @UIApplicationDelegateAdaptor to the UISceneDelegate for CarPlay via a userInfo? I can't seem to figure it out.
Otherwise I have to use a shared global, and I'd prefer not to have to do it this way. Any ideas? Thanks!
Hello all,
I'm confused about how to show lanes in CarPlay.
I understand CPLaneGuidance and CPLane
I don't find anywhere where to tell Carplay which icon to show for each lane.
I've found some information saying we put the icon in CPManeuver, but then CPManeuver is linked to only one CPLaneGuidance, and we can put only one icon in CPManeuver.
At the same time, we might have multiple lanes.
Any help, tips, or examples would be highly helpful.
Just wanted to check here to see if anyone else is running into the issue of CarPlay not working at all on iOS 26 Beta 1, even with the update on Friday.
I plug my phone in (wired) and CarPlay never shows up. I've seen a Reddit thread where other folks are seeing the same thing.
I have a Health & Fitness widget that runs on iPhone and Apple Watch. As Health data access requires the device to be unlocked, the iPhone widget is already slightly limited in capability because of updates.
With widgets further expanding to places like CarPlay, I know I can use the .disfavouredLocations{} API to try and prevent it being offered there. This is crucial as the widget functionality would be basically non-existent as your device is locked during CarPlay use.
My problem is, on the Mac despite using the .disfavouredLocations{.iPhoneWidgetsOnMac} etc...., the widget can still be added in the "other unsupported section". And yet, in that section the Apple Fitness app widget is no where to be seen. Is there an API I am missing to completely remove a widget from the Mac widget gallery and hopefully CarPlay, Standby etc.... (all places where the device running the widget is usually locked -> No Health data)?
Or does the Apple Fitness app have a private API to block it from these places where its function is not wanted and this isn't available to other apps?
I'm developing a CarPlay version of my app, with the CarPlay EV Charging App entitlement (com.apple.developer.carplay-charging).
However, I would like to use the Search template to searching for charging stations — but it seems this template is only available for Navigation Apps(maps).
In this case, what is the recommended approach?
Is it possible to apply both entitlements simultaneously and use the Search template only?
Hey everyone,
I'm currently working on Carplay intergration in my audio app. While exploring Apple Music on carplay, i found this kind of display:
This is a grid of items in a list (i'm on iOS 18 when testing this), but i didn't find anything in developer documentation that would allow me to have this kind of display.
Is this something apple specific, or can i achieve this ? I tried using the grid template but it's not as pretty, nor as flexible as this.
Thanks for your help !
In my app, I want to launch Apple Maps and start turn-by-turn navigation when the user taps a button.
I referred to Apple’s documentation and sample projects and implemented the following code:
if let url = URL(string: "maps://?t=m&daddr=(addr)") {
self.carplayScene?.open(url, options: nil, completionHandler: nil)
}
This works only if Apple Maps has been launched at least once on the iPhone or in the CarPlay environment.
If Apple Maps has never been opened before, it launches the app but does not automatically start navigation.
However, once the user has opened Apple Maps at least once — either on the phone or through CarPlay — then navigation starts as expected from that point on.
Is this behavior expected? Or is it a bug?
iPhone 16 Pro Max on iOS 18.5 before installing iOS 26 beta had no issues connecting to wired (there’s no wireless) CarPlay in my 2022 Honda Civic Sport. Now with IOS 26, my car recognizes that my phone is connected and asks if I want to use CarPlay and I click yes but it does nothing. I reset my head unit, reset all iPhone settings, checked different iPhone settings, tried different cables, can’t seem to determine what part of iOS 26 is causing the problem. Anyone have any ideas before I roll back to 18.5?
I'm using CPListItem like this:
CPListItem(
text: "test",
detailText: "test",
image: nil,
accessoryImage: nil,
accessoryType: .none
)
However, when I tap the item in the list, a loading indicator appears on the right side, as shown in the image I attached. I didn’t configure anything that should cause this behavior.
Why is the loading indicator shown by default when tapping a list item?
Is there a way to prevent it from appearing?
Hello Devs,
I wanted to bring this up to display the frustration that I have obtaining the CarPlay entitlements. First and foremost they don't give you a set timeline and there is no contact number to speak to someone about this. When you call developer support they go on and say it is a different department. There is an email but all I have received is an automated response back to me.
Has anyone received the navigation entitlements and if so what was the timeline of you receiving it?
When my CPMapButton is selected/focused, I would like to be able to provide a focusedImage to correctly show the button when the blue focus is shown. Currently I have:
What do I need to do to create an image that works more like the panning interface buttons?
With CarPlay, is it possible to programmatically know which side of the screen the status bar is placed on?
I'm developing a CarPlay Fueling app with CarPlay entitlement properly configured. While testing, I ran into two issues and would appreciate any guidance:
UserDefaults access while iPhone is locked:
In my CarPlay implementation, I read values from UserDefaults that were previously saved in the iOS app. However, when the iPhone is locked and the CarPlay session is active, it seems that the CarPlay extension cannot read the stored values. Is this the expected behavior? If so, how can I persist and access data across the app and CarPlay reliably?
API calls while iPhone is locked:
The CarPlay interface in my app communicates with a server to display lists and detail views. When the iPhone is locked, are network calls still allowed from the CarPlay extension?
Currently, I do not have any background modes enabled in the app capabilities.
If I enable background modes and implement background network logic to ensure API calls complete properly, would this be considered acceptable usage for CarPlay in App Store review? Or could it raise any rejection concerns during the approval process?
Thanks in advance for your help.
If I have, say a doctor appointment in the Calendar app, and I'm leaving to go to it, the address will appear in Apple Maps on CarPlay. Forgive if I'm getting the details wrong, but I believe if I bring up the Map, it will be available to tap on, so I can quickly go there. I think it may also show up on one on the car-play screens that shows a few different panels.
The point is, I really like this feature, and want to do it in my app.
In my iOS app, the user can order food from a restaurant, and pick it up. I'm not ready to make this app a "quick service" app, but I want to give the user an easy to get to her location. Since I just ordered food, this means that I'll need to leave fairly quickly to go to the location. The Calendar app is able to offer a location because of scheduling, I'd like to do the same.
In iOS 18, CarPlay shows an error: “There was a problem loading this content” after playback starts. Audio works fine, but the Now Playing screen doesn’t load. I’m using MPPlayableContentManager. This worked fine in iOS 17. Anyone else seeing this error in iOS 18?
Hi, after upgrading to iOS 18.5 our app crashes in CarPlay. Only when the app is running on our mobile the carplay app works fine.
If we run the same app in mobiles with iOS < 18.5 everything works.
What has changed in iOS 18.5?
Thanks
I'm trying to implement a custom back button in a CPInformationTemplate using CPBarButton. It works as expected on iOS 18 — the button appears in the navigation bar and correctly pops the template when tapped.
However, on iOS 16 devices, the custom back button does not respond to taps at all.
The reason I need a custom back button is because I want to perform cleanup and reset logic before popping the template.
Is there any workaround for making this work on iOS 16? Or is there a recommended way to hook into the system back button behavior so that I can execute code when the template is dismissed?
Does CarPlay driving tasks entitlement support push notifications on CarPlay? If no, can Critical Alerts entitlement help in this case?
Hello,
I have been running into issues with setting nowPlayingInfo information, specifically updating information for CarPlay and the CPNowPlayingTemplate.
When I start playback for an item, I see lock screen information update as expected, along with the CarPlay now playing information.
However, the playing items are books with collections of tracks. When I select a new track(chapter) within the book, I set the MPMediaItemPropertyTitle to the new chapter name. This change is reflected correctly on the lock screen, but almost never appears correctly on the CarPlay CPNowPlayingTemplate. The previous chapter title remains set and never updates.
I see "Application exceeded audio metadata throttle limit." in the debug console fairly frequently.
From that a I figured that I need to minimize updates to the nowPlayingInfo dictionary. What I did:
I store the metadata dictionary in a local dictionary and only set values in the main nowPlayingInfo dictionary when they are different from the current value.
I kick off the nowPlayingInfo update via a task that initially sleeps for around 2 seconds (not a final value, just for my current testing). If a previous Task is active, it gets cancelled, so that only one update can happen within that time window.
Neither of these things have been sufficient. I can switch between different titles entirely and the information updates (including cover art).
But when I switch chapters within a title, the MPMediaItemPropertyTitle continues to get dropped. I know the value is getting set, because it updates on the lock screen correctly.
In total, I have 12 keys I update for info, though with the above changes, usually 2-4 of them actually get updated with high frequency.
I am running out of ideas to satisfy the throttling thresholds to accurately display metadata. I could use some advice.
Thanks.