Get more mileage out of your app with CarPlay

RSS for tag

Discuss the WWDC22 Session Get more mileage out of your app with CarPlay

Posts under wwdc2022-10016 tag

4 Posts
Sort by:
Post not yet marked as solved
1 Replies
585 Views
CarPlay Simulator not receiving microphone input (Siri) Running carplay simulator Version 1.1 (480.26) Running on: M1 Macbook Pro running macOS Ventura 13.3.1 Connected to: iPhone 13 pro max running iOS 16.4 (20E246) When launching Siri by "Hey Siri", the, the siri indicator apppears and I am able to communicate and send a command, such as "send a text". Then, the Siri will say "who do you want to message", but it is no longer able to hear my voice as input.
Posted
by DannyG72.
Last updated
.
Post marked as solved
2 Replies
1.4k Views
Assuming that I have an iOS app which is managing the payment method of the user (e.g. credit card), what is preventing me to build a CarPlay app (e.g. EV charging app) with a button that triggers the payment of the charging station? I mean, what are the advantages that will be introduced with iOS 16 that will allow the payment of gas stations from CarPlay?
Posted
by cntone89.
Last updated
.
Post not yet marked as solved
3 Replies
1.9k Views
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.
Posted
by ahtctn.
Last updated
.
Post not yet marked as solved
3 Replies
3k Views
Hi I identified an issue that I cannot resolve with CarPlay. I am now rewriting an existing app that I initially created with ObjectiveC/Swift/UIKit. The new app should be super elegant, and of course SwiftUI based. The thing is, if I use the old App Lifecycle (using App Delegates or Scene Delegates) without SwiftUI, everything works fine and smooth. However, I don't really want that, but rather have a single code base and not mess with ****** workarounds. The funny thing is, if I place the @main item to the SwiftUI part, it tells me the life cycle would not be implemented, but it is. Anybody has an idea? Or this is a bug in SwiftUI / CarPlay? I was trying to find some original code reference from Apple related to SwiftUI base apps and having a CarPlay 'extension' but couldn't find any - the latest WWDC code example was still based on the old framework Thanks Marco Here are the files import UIKit import SwiftUI @main // < == if @main is here, it DOES NOT WORK fine -- using non Swift UI app cycle /*  2022-11-11 12:24:34.516461+0100 CarPlayTutorial[49059:1094508] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Application does not implement CarPlay template application lifecycle methods in its scene delegate.'  ...  CoreSimulator 857.13 - Device: iPhone 14 Pro (A32C27BF-48D7-48EA-A32B-26A6CC562201) - Runtime: iOS 16.1 (20B72) - DeviceType: iPhone 14 Pro  *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Application does not implement CarPlay template application lifecycle methods in its scene delegate.'  (lldb)  */ struct testappApp: App {  @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate   var body: some Scene {         WindowGroup {             ContentView()         }     } } struct ContentView: View {     var body: some View {         Text("Hallo")     } } //@main // < == if @main is here, it works fine -- using non Swift UI app cycle class AppDelegate: UIResponder, UIApplicationDelegate {     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {         return true     }     func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {         if (connectingSceneSession.role == UISceneSession.Role.carTemplateApplication) {             let scene =  UISceneConfiguration(name: "CarPlay", sessionRole: connectingSceneSession.role)             scene.delegateClass = CarPlaySceneDelegate.self             return scene         } else {             return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)         }     }     func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {     } } the Scene Delegate that I used, but is largely ignored is import UIKit class SceneDelegate: UIResponder, UIWindowSceneDelegate {     var window: UIWindow?     func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {         print(scene.debugDescription)         print(session.debugDescription)         print(connectionOptions.debugDescription)         guard let _ = (scene as? UIWindowScene) else { return }     }     func sceneDidDisconnect(_ scene: UIScene) {         print(scene.debugDescription)     }     func sceneDidBecomeActive(_ scene: UIScene) {         print(scene.debugDescription)     }     //... } The CarPlay delegate is this class CarPlaySceneDelegate: UIResponder  {     var interfaceController: CPInterfaceController? } extension CarPlaySceneDelegate: CPTemplateApplicationSceneDelegate {     func templateApplicationScene(_ templateApplicationScene: CPTemplateApplicationScene, didConnect interfaceController: CPInterfaceController) {         self.interfaceController = interfaceController         self.interfaceController?.delegate = self     }     private func templateApplicationScene(_ templateApplicationScene: CPTemplateApplicationScene, didDisconnect interfaceController: CPInterfaceController) {         self.interfaceController = nil     } } extension CarPlaySceneDelegate: CPTabBarTemplateDelegate {     func tabBarTemplate(_ tabBarTemplate: CPTabBarTemplate, didSelect selectedTemplate: CPTemplate) {     } } extension CarPlaySceneDelegate: CPInterfaceControllerDelegate {     func templateWillAppear(_ aTemplate: CPTemplate, animated: Bool) {         print("templateWillAppear", aTemplate)     }     func templateDidAppear(_ aTemplate: CPTemplate, animated: Bool) {         print("templateDidAppear", aTemplate)     }     func templateWillDisappear(_ aTemplate: CPTemplate, animated: Bool) {         print("templateWillDisappear", aTemplate)     }     func templateDidDisappear(_ aTemplate: CPTemplate, animated: Bool) {         print("templateDidDisappear", aTemplate)     } } the info plist section: <dict> <key>UIApplicationSupportsMultipleScenes</key> <false/> <key>UISceneConfigurations</key> <dict> <key>UIWindowSceneSessionRoleApplication</key> <array> <dict> <key>UISceneConfigurationName</key> <string>Default Configuration</string> <key>UISceneDelegateClassName</key> <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string> </dict> </array> <key>UIWindowSceneSessionRoleExternalDisplay</key> <array> <dict> <key>UISceneClassName</key> <string>CPTemplateApplicationScene</string> <key>UISceneConfigurationName</key> <string>CarPlay</string> <key>UISceneDelegateClassName</key> <string>$(PRODUCT_MODULE_NAME).CarPlaySceneDelegate</string> </dict> </array> </dict> </dict>
Posted Last updated
.