Lettura on CarPlay: the walk becomes the drive
The listening slot that keeps losing is the dog walk. The car is the other twenty minutes, and the only thing standing in the way is a permission Apple grants by hand.
Follow-on to the Lettura pitch. Half a page.
Problem
The audio half of this loop was built for the dog walk, and the dog walk is the one slot that keeps losing to a newborn. The car is the other twenty minutes a day of hands-free listening, and today the audio only reaches it through the lock screen, which means eyes on a phone at a red light.
Appetite
One weekend of build. The long pole is not mine. Apple grants the CarPlay audio entitlement per app, on request, in days to weeks. Build and test against the simulator now, ask on the same day, ship to the actual car when the answer lands.
Solution
A play-only audio app on the dashboard. One list with two sections: Oggi, holding today’s chapter or an empty-queue line, and Già fatto, the finished chapters newest first. Tapping a row plays it through the player the phone app already has, and the system’s own now-playing screen takes over from there, driven by the remote-command wiring that already exists. Playback posts the same played event it does on the phone.
The car is play-only. No Fatto, no Ancora, no word field. The chapter is read on the phone and the queue is advanced on the phone. Nothing after today appears in the car either, for the same reason it does not appear on the phone: the server never sends it.
Rabbit holes
- The permission is the schedule. You cannot switch this on in Xcode and you cannot switch it on in App Store Connect. It is a form: app name, bundle id, two sentences on what the app does, and the audio category. Until it is granted, the capability cannot be added to the app id and the provisioning profile will not carry it, so a build on real hardware shows nothing in a real car. The simulator ignores all of this, which is what makes building first and asking in parallel the right order.
- A second scene. CarPlay needs its own scene role and delegate. The phone UI has to keep working when that scene is not connected, which is most of the time.
- One player, two surfaces. The phone screen and the car must reflect the same playback state. Do not create a second player.
- Audio not yet cached. A tap in the car on a chapter that was never downloaded has to start within a couple of seconds: stream it with the bearer token attached, then cache in the background.
No-gos
Text on the car screen, which CarPlay forbids for good reason. Marking a chapter done from a moving car. The recurring-track rotation logic. Voice intents. Anything that changes the server contract.
Get updates
Occasional notes on what's happening at Enginery. No spam, no marketing.