Shipping an iPhone Game with a Robot on the Mixing Desk

App Store metadata, age ratings, screenshots, pricing, even this blog post — the release of Roadie Wars 5 was driven through the App Store Connect API by an AI copilot.

The last mile of an iPhone game is famously not fun: provisioning, archiving, App Store Connect's forty small forms. My rule for this project was that the last mile had to be as automated as the art department. Here's what that looked like.

A stdlib-only App Store Connect client. Apple's API wants ES256-signed JWTs, and the Mac's Python has neither pyjwt nor cryptography installed. Rather than fight package management, the project has asc.py — a tiny client that signs tokens by shelling out to openssl and converting the signature format by hand. No dependencies, works forever. On top of it, ship.sh: archive, export, validate, upload, one command, date-derived build numbers.

The whole listing went in through the API. Description, keywords, promo text, categories, pricing (free, 175 territories), the privacy policy URL, review contact details, the age-rating questionnaire — all pushed as JSON, then read back to verify. The questionnaire was the entertaining one: Apple's 2026 version has about 23 required fields, some enums, some booleans, documented nowhere in the order you need them. The script just retries, dropping whichever field the error complains about until Apple says yes. Fun fact learned along the way: the Arcade subcategory no longer exists. Pour one out.

The screenshots are built by the same pipeline that built the game's art

Screenshots as a pipeline, not a chore. The store screenshots are real gameplay — captured from the Simulator at exact App Store resolution, launched with debug flags that jump straight to any stage (the venues rotate every five stages, so five launches gets you five looks). Then a compositor sets each capture on a Gemini-painted backstage poster backdrop with big two-tone captions. First attempt had Gemini paint the captions too; they got cropped off by the aspect-ratio math and taught me a lesson about letting the image model do typography. Round two: Gemini paints a text-free backdrop, and the captions are drawn in Impact by twenty lines of Python. Right tool, right job.

The robot in question. A lot of the above was driven by an AI copilot (Claude, running in Anthropic's Cowork mode) with its hands on both my Mac and the App Store Connect API — capturing the screenshots, writing the compositor, filling the listing, publishing the privacy policy to this very site through its own API, and drafting these posts with me. The division of labour was consistently: I decide, it types, we both debug. It also found a bug in this website's blog API while doing it, which I suppose is a code review I didn't ask for.

The punchline is the timeline. The Xcode project was created on August 9th. The finished listing — build attached, screenshots up, metadata verified — was ready for review on August 15th. Six days, one developer, several robots, no crunch.

The tour starts when review clears. See you at the dingy bar.


This is part 5 of a five-part series on building Roadie Wars 5 : Stage Climb:

  1. Why our first iPhone game starts at 5
  2. An AI art department in a Python folder
  3. The whole tour is a JSON file
  4. Comic cutscenes and a localhost editor
  5. Shipping an iPhone game with a robot on the mixing desk

Roadie Wars 5 : Stage Climb is heading to the App Store — climb the rig, save the tour.