A racing game with no steering wheel: you draw the line, and the way you draw it becomes your speed.
Before each lap you trace a line across the track with your finger — and that line is the throttle. Draw a straight quickly and the car takes it quickly; ease through a corner and it brakes there. Then you let go, and the physics takes over: tyres, grip, weight transfer. Ask for more than the friction circle allows and the car runs wide, exactly as it would.




The drawing is not a shortcut around driving; it is the driving. The line becomes a speed request along the arc, and that request meets a friction circle. Nothing corrects behind the player's back: no rubber-banding, no assists, no hidden magnetism to a racing line.
No engine upgrades, no pay-to-win, no reward that makes you faster. The career unlocks bodies and liveries — appearance only. A second of lap time comes from the line and nowhere else.
After each race the game reports what the lap gave away against its own achievable profile, metre by metre, naming the three worst corners. A driving coach that does not moralise.
Every screen is SwiftUI. There is no UIViewController in the app. Layouts adapt rather than scale — the same purchase screen reflows from 400 points of height on an iPhone in landscape to a 13-inch iPad, changing type scale and content density.
The scene is RealityKit, held as an ARView in .nonAR mode for one reason: RealityView exposes no post-process hook and ARView does. Seven .metal files hang off it — a compute-driven particle field for spray and mud, screen-space depth work, wind-displaced vegetation, live mud and puddle maps, and a marking pass that keeps painted lines crisp under the chain. Every stage can be switched off individually so its cost in frame time is measured, not estimated.
@MainActor isolation throughout, async/await for StoreKit and asset loading, and a post-process closure called from RealityKit's own render thread — which may not assume main actor, and says so.
@Observable for all game state; no ObservableObject. Transaction.updates is listened to for the life of the app, not just around a purchase — with Ask to Buy a parent may approve hours later. Entitlements are verified locally, and a refund closes the content again.
The whole suite is written in Swift Testing: physics (friction circle, brake balance, slip), track geometry, weather effects on grip, purchase paths, localisation completeness, and image diagnostics that render a frame and assert on pixels.
There is no URLSession in the codebase, no analytics SDK, no tracking framework. Track of the Day derives from the calendar date, so every player worldwide gets the same task on the same day with no server involved. In App Store Connect the privacy answer is Data Not Collected — provable by reading the source.
Free to download with four full tracks — complete, untimed, and with no ads between them. A single non-consumable in-app purchase opens the rest, permanently, and is Family Sharing enabled. No subscription, no advertising, no chests, no energy, no currency, and nothing purchasable that makes a car faster.
The core input is the most forgiving part: a single continuous drag, at any speed, anywhere on the track — no timing window, no dexterity threshold, and the game cannot be lost by drawing slowly. There is no audio-only information; everything the sound conveys, the screen shows too. Motion blur is off by default and switchable in settings. Full VoiceOver coverage of every menu is in progress.
| Title | SPUR 2 — Draw Your Line |
| Platform | iPhone and iPad, iOS 18 or later, landscape |
| Price | Free with one non-consumable in-app purchase |
| Languages | English, German, Spanish, French, Italian, Japanese, Brazilian Portuguese, Simplified Chinese |
| Privacy | Data Not Collected — no network layer in the codebase |
| Developer | Michael Knochen |
| Press contact | to be filled in before publishing |
| App Store | link once live |