Testing CarPlay Audio using the simulator

1k Views Asked by At

I have developed an iOS radio audio app using Swift / UIKit and everything works well.

I want to integrate wit CarPlay and got the required entitlements.

I believe I have set everything up right for the most part as I can see the CPListTemplate with my CPListItems and on tapping one of them, it goes to the CPNowPlayingTemplate and the audio starts playing in the simulator.

While everything seems to be working well, However, there are 2 issues:

  1. I can't seem to interact with CPNowPlayingTemplate play / pause button, I just keep seeing the play button but clicking it does nothing

CarPlay Simulator

I am able to do this on the device's lock screen and through Command Center after adding this code:

func setupNowPlayingInfoCenter(){
    UIApplication.shared.beginReceivingRemoteControlEvents()
    MPRemoteCommandCenter.shared().playCommand.isEnabled = true
    MPRemoteCommandCenter.shared().playCommand.addTarget { [weak self] event in
      self?.reliableRadioPlayer?.play()
      return .success
    }
    
    MPRemoteCommandCenter.shared().pauseCommand.isEnabled = true
    MPRemoteCommandCenter.shared().pauseCommand.addTarget { [weak self] event in
      self?.reliableRadioPlayer?.pause()
      return .success
    }
  }
  1. The second issue is again on the same screen, I cannot see any of the meta data such as the artwork, song name and artist name - again these show up on the device's lock screen and the Command Center with the help of these lines of code:
MPNowPlayingInfoCenter.default().nowPlayingInfo = 
[MPMediaItemPropertyTitle: currentlyPlaying.getSongName(),
MPMediaItemPropertyArtist: currentlyPlaying.getSongArtist(),
MPMediaItemPropertyArtwork: artwork]

Do I need to set anything else up or are these simply limitations of the CarPlay simulator ?

Thanks

1

There are 1 best solutions below

0
On

While I do not believe this is going to be best answer and someone might come up with something better, here are some things I believe could improve how you test CarPlay and explain some issues you might face:

  1. Add these two lines of code before launching your NowPlayingTemplate
#if targetEnvironment(simulator)
    UIApplication.shared.endReceivingRemoteControlEvents()
    UIApplication.shared.beginReceivingRemoteControlEvents()
#endif

I immediately saw some improvements in the meta data displayed by the simulator Swift CarPlay NowPlayingTemplate

  1. The player status does not reflect accurately on the simulator

When you launch the app on the CarPlay simulator and the now playing template is showing, most likely your audio is going to be playing but the player's status is going to show and this will not show the isPlaying status accurately in your CPListTemplate if you have one

Swift CarPlay NowPlayingTemplate Status stopped Swift CarPlay CPListTemplate CPListItem isPlaying false

There is nothing to worry about here as it works fine in the car, however, I suggest just clicking the play button so you can see the active status in the NowPlayingTemplate and CPListTemplate screen with the animated bars

Swift CarPlay NowPlayingTemplate Status playing Swift CarPlay CPListTemplate CPListItem isPlaying true

  1. Testing on a real device

While I don't think most of us can buy a car just to test CarPlay, you could look into buying a car stereo which supports CarPlay like a Sony XAV-AX5500, Sony XAV-AX1005DB or something lower end like this

You cannot power up a car stereo normally with your plugs at home, so I suggest youtubing some videos to power this up, however, this was the easiest one I found using a laptop charger - basically I believe you need something 12V or greater

Good luck