Is anyone else experiencing issues with CarPlay with this beta update?
Posts under CarPlay tag
128 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Memory leak in CarPlay when using CPTabBarTemplate
Reproduced using the code example "Integrating CarPlay with Your Music App" from the official Apple documentation - https://developer.apple.com/documentation/carplay/integrating-carplay-with-your-music-app
Steps to reproduce the leak:
Download and run the example on CarPlay.
Select the Settings tab.
Click the first item in the list "Use Apple Music".
Click Back button.
Repeat steps 3 and 4 several times.
Open Debug Memory Graph in xCode and search for "CPGridTemplate" - the count will be greater than 0.
Conditions under which the memory leak disappears:
If you open and switch to all tabs one by one, the leak disappears.
My app developed with the new Xcode 26 doesn't appear on CarPlay when running on iOS 14–15 devices. My developer has obtained the com.apple.developer.carplay-driving-task permission, but iOS 16+ devices allow my app to display on CarPlay.
Can anyone help resolve this issue? Is it because the carplay-driving-task permission is only available for iOS 16+ devices? If I want compatibility with iOS 14–15 devices, do I need to apply to Apple for the carplay-audio permission to use it? Has anyone encountered a similar issue?
Thanks!
Hello,
Can someone let me know why my car play screen keeps changing and how do I stop the change?
Hi everyone,
I am working on a CarPlay integration, and need open a two level list opened from a root template. However, I am always receiving an error message when opening the 2nd pushed template.
To narrow it down not to have an issue with some app specific code I created the CarPlay scene below.
I am aware that there is a limit, but two levels I understand are supported on all CarPlay integrations, the maximum seems to be 5.
The app is just crashing right after showing the 2nd template.
Any ideas? Any hints are much appreciated.
Thanks a lot!
Regards, Michael
class CarPlaySceneDelegate2: UIResponder, CPTemplateApplicationSceneDelegate {
// [...]
private func createRootTemplate() -> CPListTemplate {
let pushToAItem = CPListItem(text: "Push to Template A", detailText: "Level 1 → Level 2")
pushToAItem.handler = {[weak self] (pushToAItem, completion) in
guard let self = self else {
completion()
return
}
self.interfaceController?.pushTemplate(
self.pushTemplateA(),
animated: true,
completion: { (didPresent, error) in
completion()
}
)
}
let section = CPListSection(items: [pushToAItem])
let template = CPListTemplate(title: "Root Template", sections: [section])
return template
}
private func pushTemplateA() -> CPListTemplate {
let pushToBItem = CPListItem(text: "Push to Template B", detailText: "Level 2 → Level 3")
pushToBItem.handler = {[weak self] (pushToBItem, completion) in
guard let self = self else {
completion()
return
}
self.interfaceController?.pushTemplate(
self.pushTemplateB(),
animated: true,
completion: { (didPresent, error) in
completion()
}
)
}
let backToRootItem = CPListItem(text: "Pop to Root", detailText: "Go back to root")
backToRootItem.handler = { [weak self] _, completion in
self?.interfaceController?.popToRootTemplate(animated: true, completion: nil)
completion();
}
let infoItem = CPListItem(text: "Current Depth", detailText: "2 (Template A)")
let stackCountItem = CPListItem(
text: "Stack Count",
detailText: "\((interfaceController?.templates.count ?? 0) + 1)"
)
let section = CPListSection(items: [pushToBItem, backToRootItem, infoItem, stackCountItem])
let template = CPListTemplate(title: "Template A", sections: [section])
return template
}
private func pushTemplateB() -> CPListTemplate {
let pushToCItem = CPListItem(text: "Push to Template C", detailText: "Level 3 → Level 4")
pushToCItem.handler = {[weak self] (pushToCItem, completion) in
guard let self = self else {
completion()
return
}
self.interfaceController?.pushTemplate(
self.pushTemplateC(),
animated: true,
completion: { (didPresent, error) in
completion()
}
)
}
let backToRootItem = CPListItem(text: "Pop to Root", detailText: "Go back to root")
backToRootItem.handler = { [weak self] _, completion in
self?.interfaceController?.popToRootTemplate(animated: true, completion: nil)
completion()
}
let popOneItem = CPListItem(text: "Pop One", detailText: "Go back to Template A")
popOneItem.handler = { [weak self] _, completion in
self?.interfaceController?.popTemplate(animated: true, completion: nil)
completion()
}
let infoItem = CPListItem(text: "Current Depth", detailText: "3 (Template B)")
let stackCountItem = CPListItem(
text: "Stack Count",
detailText: "\((interfaceController?.templates.count ?? 0) + 1)"
)
let section = CPListSection(items: [pushToCItem, popOneItem, backToRootItem, infoItem, stackCountItem])
let template = CPListTemplate(title: "Template B", sections: [section])
return template
}
private func pushTemplateC() -> CPListTemplate {
let backToRootItem = CPListItem(text: "Pop to Root", detailText: "Go back to root")
backToRootItem.handler = { [weak self] _, completion in
self?.interfaceController?.popToRootTemplate(animated: true, completion: nil)
completion()
}
let popOneItem = CPListItem(text: "Pop One", detailText: "Go back to Template B")
popOneItem.handler = { [weak self] _, completion in
self?.interfaceController?.popTemplate(animated: true, completion: nil)
completion()
}
let infoItem = CPListItem(text: "Current Depth", detailText: "4 (Template C)")
let stackCountItem = CPListItem(
text: "Stack Count",
detailText: "\((interfaceController?.templates.count ?? 0) + 1)"
)
let section = CPListSection(items: [popOneItem, backToRootItem, infoItem, stackCountItem])
let template = CPListTemplate(title: "Template C", sections: [section])
return template
}
}
Hello,
I have a CarPlay Navigation app and utilize the AVSpeechSynthesizer to speak directions to a user. Everything works great on my CarPlay simulator as well as when plugged into my GMC truck. However, I found out yesterday that one of my users with a Ford truck the audio would cut in an out.
After much troubleshooting, I was able to replicate this on my own truck when using Bluetooth to connect to CarPlay. My user was also utilizing Bluetooth. Has anyone else experienced this? Is there a fix to the problem?
import SwiftUI
import AVFoundation
class TextToSpeechService: NSObject, ObservableObject, AVSpeechSynthesizerDelegate {
private var speechSynthesizer = AVSpeechSynthesizer()
static let shared = TextToSpeechService()
override init() {
super.init()
speechSynthesizer.delegate = self
}
func configureAudioSession() {
speechSynthesizer.delegate = self
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .voicePrompt, options: [.mixWithOthers, .allowBluetooth])
} catch {
print("Failed to set audio session category: \(error.localizedDescription)")
}
}
func speak(_ text: String) {
Task(priority: .high) {
let speechUtterance = AVSpeechUtterance(string: text)
speechUtterance.voice = AVSpeechSynthesisVoice(language: AVSpeechSynthesisVoice.currentLanguageCode())
try AVAudioSession.sharedInstance().setActive(true, options: .notifyOthersOnDeactivation)
speechSynthesizer.speak(speechUtterance)
}
}
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
Task {
stopSpeech()
try AVAudioSession.sharedInstance().setActive(false)
}
}
func stopSpeech() {
speechSynthesizer.stopSpeaking(at: .immediate)
}
}
With iOS 26 the CPListSection header has a transparent background, and when the list scrolls under the header it doesn't look good at all. We expected to see a glass fading effect maybe, like the one on the top of the screen. Is it a known bug?
For some reason, Carplay 18.x works fine, however in under certain situations in our app, Carplay 26.x breaks.
The expected grid layout should be :
However, this is what we see in some cases when we update our templates.
I have not been able to isolate the cause of this issue. Has anyone ever seen this happen on their CarPlay apps and discovered the cause?
The data sets fed into the templates are identical, the difference is in some of the timing and update order...
I have applied for CarPlay support here Apply here to get your app approved for CarPlay use: https://developer.apple.com/contact/carplay/ but have not received any acceptance or answers. Does anyone know what to do?
Dear Apple Developer Support Team,
We are seeking a solution that would allow us to include the CarPlay entitlement while distributing our app using an enterprise profile. Could you please provide guidance on how we might achieve this? Are there any alternative approaches or considerations that could help us navigate this limitation?
Your expertise and advice would be greatly appreciated as we work to ensure our app meets the needs of our users while complying with Apple’s guidelines.
Thank you for your time and support.
Topic:
App Store Distribution & Marketing
SubTopic:
General
Tags:
Entitlements
Accounts
CarPlay
Business and Enterprise
I am developing CarPlay addition on our app. Which is distributed with the Enterprise In distribution method, so we do not have a product in the App Store. I am wondering if CarPlay support can be provided in applications distributed with the Enterprise in distribution method?
If this is not possible, I will inform management that this is not possible.
I am waiting for your answers, thanks.
Topic:
Developer Tools & Services
SubTopic:
General
Tags:
Enterprise
Entitlements
CarPlay
wwdc2022-10016
What is the best way to detect if the Wifi is being used for Wireless Carplay or is just a normal network interface?
Have a 2019 Ford Edge w/ Sync 3.4, wired carplay. Worked fine w/ iPhone 16 Pro on iOS 18. Upgraded to iPhone 17 Pro, came w/ iOS 26, carplay hasn't worked since.
I've kept trying throughout new iOS 26 releases, lately with iOS 26.3 Public Beta 1, still not working.
Have a long running issue with updates and system diagnostics as I've tried over the last few months: FB20739050
There is also a Apple support community thread with issues like this (and a ton of others) - my first post there was https://discussions.apple.com/thread/256138283?answerId=261613103022&sortBy=oldest_first#261613103022
I'm hoping here in the developer forums someone can maybe take a look at the feedback item and various system diagnostics to pin-point the issue. I'm a little concerned it's still not fixed this far into the follow-up point releases of iOS 26.
Appreciate any help, thanks!
--Chuck
I need to install the AirPlay profile on an iphone to watch decrypted traffic in ATS for development work on CarPlay.
The documentation for ATS says to click "Utilities -> Download Profiles -> AirPlay Diagnostic Mode".
When I do this, it brings up a file dialog, presumably to select a location to download. But nothing happens. The other profiles launch a web browser and download the .mobileconfig profile.
How do I get the AirPlay profile? Am I misunderstanding how this is supposed to work?
I found ATSAssetsInfoDefault.plist which references these files. And they all have https://developer.apple.com/services-account/download?path=/iOS/iOS_Logs/... except the AirPlay profile, which is type "slug" and just says ats-airplay-diagnostic-mode-profile.
Is this a bug in the app?
I am having an issue with the code that I posted below. I capture voice in my CarPlay app, then allow the user to have it read back to them using AVSpeechUtterance.
This works fine on some cars, but many of my beta testers report no audio being played. I have also experienced this in a rental car where the audio was either too quiet or the audio didn't play.
Does anyone see any issue with the code that I posted? This is for CarPlay specifically.
class CarPlayTextToSpeechService: NSObject, ObservableObject, AVSpeechSynthesizerDelegate {
private var speechSynthesizer = AVSpeechSynthesizer()
static let shared = CarPlayTextToSpeechService()
/// Completion callback
private var completionCallback: (() -> Void)?
override init() {
super.init()
speechSynthesizer.delegate = self
}
func configureAudioSession() {
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .voicePrompt, options: [.duckOthers, .interruptSpokenAudioAndMixWithOthers, .allowBluetoothHFP])
} catch {
print("Failed to set audio session category: \(error.localizedDescription)")
}
}
public func speak(_ text: String, completion: (() -> Void)? = nil) {
self.configureAudioSession()
// Store the completion callback
self.completionCallback = completion
Task(priority: .high) {
let speechUtterance = AVSpeechUtterance(string: text)
let langCode = Locale.preferredLocalLanguageCountryCode
if langCode == "en-US" {
speechUtterance.voice = AVSpeechSynthesisVoice(identifier: AVSpeechSynthesisVoiceIdentifierAlex)
} else {
speechUtterance.voice = AVSpeechSynthesisVoice(language: langCode)
}
try AVAudioSession.sharedInstance().setActive(true, options: .notifyOthersOnDeactivation)
speechSynthesizer.speak(speechUtterance)
}
}
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
Task {
stopSpeech()
try AVAudioSession.sharedInstance().setActive(false)
}
// Call completion callback if available
self.completionCallback?()
self.completionCallback = nil
}
func stopSpeech() {
speechSynthesizer.stopSpeaking(at: .immediate)
}
}
My app utilizes background audio to play music files. I have the audio background mode enabled and I initialize the AVAudioSession in playback mode with the mixWithOthers option. And it usually works great while the app is backgrounded. I listen for audio interruptions as well as route changes and I am able to handle them appropriately and I can usually resume my background audio no problem.
I discovered an issue while connected to CarPlay though. Roughly 50% of the time when I disconnect from a phone call while connected to CarPlay I get the following error after calling the play() method of my AVAudioPlayer instance:
"ATAudioSessionClientImpl.mm:281 activation failed. status = 561015905"
If I instead try to start a new audio session I get a similar error:
Error Domain=NSOSStatusErrorDomain Code=561015905 "Session activation failed" UserInfo={NSLocalizedDescription=Session activation failed}
Like I said, this isn't reproducible 100% of the time and is so far only seen while connected to CarPlay. I don't think Im forgetting so additional capability or plist setting, but if anyone has any clues it would be greatly appreciated. Otherwise this is likely just a bug that I need to report to Apple.
One very important note, and reason I believe it's just a bug, is that while I was testing I found that other music apps like Spotify will also fail to resume their audio at the same time my app fails.
Another important detail is that when it works successfully I receive the audio session interruption ended notification, and when it doesn't work I only receive a route configuration change or route override notification. From there I am able to still successfully granted background time to execute code, but my call to resume audio fails with the above mentioned error codes.
After the update to iOS 17, tapping on message notification shown on CarPlay Dashboard is navigating to the CarPlay app instead of announcing the message notification.
Announce Notifications turned ON
Announce Messages turned ON
Announce New Messages option is selected
Other apps message notifications are announced as expected when tapping on the notification implying that the settings are set as required.
Enabled com.apple.developer.carplay-communication
Class CustomCarPlaySceneDelegate: UIResponder, CPTemplateApplicationSceneDelegate {
func templateApplicationScene(_ templateApplicationScene: CPTemplateApplicationScene,
didConnect interfaceController: CPInterfaceController)
func templateApplicationScene(_ templateApplicationScene: CPTemplateApplicationScene,
didDisconnectInterfaceController interfaceController: CPInterfaceController)
func scene(_ scene: UIScene, willContinueUserActivityWithType userActivityType: String)
}
I'm creating an app and I want the user to see the PNG image with the background removed in the widget, but I want the background to be transparent. I've seen this done before in some apps' CarPlay widgets. How can I do this?
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'm developing a CarPlay app and encountered an inconsistent behavior with template detection.
When I present a CPActionSheetTemplate and then print the presentedTemplate property, it returns nil.
However, when I present a CPAlertTemplate, the presentedTemplate property correctly returns the template object.
This inconsistency is causing issues in my app where I need to check if there's already a presented template before showing another one to avoid conflicts.
Why does CPActionSheetTemplate not get detected in presentedTemplate while CPAlertTemplate does? Is this intended behavior or a bug?
Any guidance on how to properly detect if a CPActionSheetTemplate is currently presented would be greatly appreciated.