Craft, Engineering
How I ship fixes to live iOS games in minutes with over-the-air updates
The OTA update workflow behind my games — what Capacitor + Capgo can and can't ship past App Store review, and how it changes live-game operations for a solo developer.
Indie game developer · Aarhus, Denmark
A player emails: the trick multiplier in Dolphin Beyond reads wrong after a specific combo. It’s a one-line fix. On a traditional native pipeline, that one line now waits days for App Store review while every new player hits the bug.
My games don’t work that way. The fix ships over the air — often the same afternoon. This post explains the setup, because OTA updates are the single biggest operational advantage of building games with web technology, and almost nobody talks about them concretely.
How it works
My games are TypeScript/React builds wrapped in a native shell with Capacitor. The native shell — the part App Store review approves — is a stable container: WebView, plugins, entitlements. The game is the web bundle inside it.
Capgo manages replacing that bundle remotely. Push an update to a channel; the app downloads it in the background and applies it on next launch. Signed, versioned, staged — with instant rollback if telemetry says an update misbehaves.
fix committed → bundle built → pushed to channel → live on players' phones
(minutes, not review cycles)
The rules I follow
OTA on iOS comes with obligations, and I treat them seriously:
- Only the web bundle updates. Anything native — new plugins, permissions, entitlements — goes through a full App Store submission, as Apple requires. OTA is for the interpreted layer the shell was approved to run.
- No functionality smuggling. OTA ships fixes, tuning and content for the reviewed experience — never features that change what the app fundamentally is. Staying honest here is what keeps the mechanism trustworthy (and your developer account safe).
- Native releases still happen regularly. OTA reduces urgency, not diligence; the binary train keeps rolling with plugin updates and OS-version work.
What this changes for a solo live game
Operationally, everything:
- Physics and balance tuning land while the discussion thread is still warm. Dolphin Beyond’s feel improvements shipped as a stream of small OTA updates after launch.
- Emergencies deflate. A broken screen in a live game is a minutes-long incident, not a days-long one with an expedited-review request attached.
- Rollback is a button. A bad update reverts before most players ever launch into it.
For a one-person studio, this is the difference between operating three live games and being buried by them. Review cycles stop being the pulse of your live game; your own build pipeline is.
The caveat that keeps me disciplined
The App Store approved a product, and players downloaded that product. OTA is a maintenance channel for it, not a side door around review. Used with that discipline, it’s the most underrated tool in the web-game stack — and one more reason the “web tech for games” bet keeps paying (the full argument is in the manifesto).