axiom-now-playing-carplay

Time cost: 15-20 minutes (if MPNowPlayingInfoCenter already working)

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "axiom-now-playing-carplay" with this command: npx skills add charleswiltgen/axiom/charleswiltgen-axiom-axiom-now-playing-carplay

CarPlay Integration

Time cost: 15-20 minutes (if MPNowPlayingInfoCenter already working)

Key Insight

CarPlay uses the SAME MPNowPlayingInfoCenter and MPRemoteCommandCenter as Lock Screen and Control Center. If your Now Playing integration works on iOS, it automatically works in CarPlay with zero additional code.

What CarPlay Reads

iOS Component CarPlay Display

MPNowPlayingInfoCenter.nowPlayingInfo

CPNowPlayingTemplate metadata (title, artist, artwork)

MPRemoteCommandCenter handlers CPNowPlayingTemplate button responses

Artwork from nowPlayingInfo

Album art in CarPlay UI

No CarPlay-specific metadata needed. Your existing code works.

CPNowPlayingTemplate Customization (iOS 14+)

For custom playback controls beyond standard play/pause/skip:

import CarPlay

@MainActor class SceneDelegate: UIResponder, UIWindowSceneDelegate, CPTemplateApplicationSceneDelegate {

func templateApplicationScene(
    _ templateApplicationScene: CPTemplateApplicationScene,
    didConnect interfaceController: CPInterfaceController
) {
    // ✅ Configure CPNowPlayingTemplate at connection time (not when pushed)
    let nowPlayingTemplate = CPNowPlayingTemplate.shared

    // Enable Album/Artist browsing (shows button that navigates to album/artist view in your app)
    nowPlayingTemplate.isAlbumArtistButtonEnabled = true

    // Enable Up Next queue (shows button that displays upcoming tracks)
    nowPlayingTemplate.isUpNextButtonEnabled = true

    // Add custom buttons (iOS 14+)
    setupCustomButtons(for: nowPlayingTemplate)
}

private func setupCustomButtons(for template: CPNowPlayingTemplate) {
    var buttons: [CPNowPlayingButton] = []

    // Playback rate button
    let rateButton = CPNowPlayingPlaybackRateButton { [weak self] button in
        self?.cyclePlaybackRate()
    }
    buttons.append(rateButton)

    // Shuffle button
    let shuffleButton = CPNowPlayingShuffleButton { [weak self] button in
        self?.toggleShuffle()
    }
    buttons.append(shuffleButton)

    // Repeat button
    let repeatButton = CPNowPlayingRepeatButton { [weak self] button in
        self?.cycleRepeatMode()
    }
    buttons.append(repeatButton)

    // Update template with custom buttons
    template.updateNowPlayingButtons(buttons)
}

}

Entitlement Requirement

CarPlay requires an entitlement in your Xcode project:

Info.plist:

<key>UIBackgroundModes</key> <array> <string>audio</string> </array>

Entitlements file:

<key>com.apple.developer.carplay-audio</key> <true/>

Without the entitlement, CarPlay won't show your app at all.

CarPlay-Specific Gotchas

Issue Cause Fix Time

CarPlay doesn't show app Missing entitlement Add com.apple.developer.carplay-audio

5 min

Now Playing blank in CarPlay MPNowPlayingInfoCenter not set Same fix as Lock Screen (Pattern 1) 10 min

Custom buttons don't appear Configured after push Configure at templateApplicationScene(_:didConnect:)

5 min

Buttons work on device, not CarPlay simulator Debugger interference Test without debugger attached 1 min

Album art missing Same as iOS issue Fix MPMediaItemArtwork (Pattern 3) 15 min

Testing CarPlay

Simulator (Xcode 12+):

  • I/O → External Displays → CarPlay

  • Tap CarPlay display

  • Find your app in Audio section

  • Important: Run without debugger for reliable testing (debugger can interfere with CarPlay audio session activation)

Real Vehicle: Requires entitlement approval from Apple (automatic for apps with UIBackgroundModes audio; no manual request needed).

Verification

  • App appears in CarPlay Audio section

  • Now Playing shows correct metadata

  • Album artwork displays

  • Play/pause/skip buttons respond

  • Custom buttons (if any) appear and work

  • Tested both with and without debugger

Resources

Skills: axiom-now-playing, axiom-now-playing-musickit

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

axiom-vision

No summary provided by upstream source.

Repository SourceNeeds Review
General

axiom-swiftdata

No summary provided by upstream source.

Repository SourceNeeds Review
General

axiom-swiftui-26-ref

No summary provided by upstream source.

Repository SourceNeeds Review
General

axiom-swiftui-architecture

No summary provided by upstream source.

Repository SourceNeeds Review