Single-person iOS studio toolkit (Xcode, scripts, sanity)
Running an iOS studio solo is mostly about removing friction from the same 5 actions you do every day. Here's the toolkit that lets one person ship 48 apps a year - what's on the laptop, in Xcode, in the scripts folder, and in the daily routine.
Hardware
Nothing exotic. M-series MacBook (16GB minimum, more never hurts). External 27-inch monitor for code on top, simulator + debugger on bottom. Wired keyboard. Trackpad and mouse depending on the day.
iPhone Pro for testing modern features (Dynamic Island, Live Activities). iPad mini and iPad Pro for layout testing. One Apple Watch in a drawer for the apps that need it.
Xcode setup
Two Xcode habits worth their weight:
- Custom shortcuts. Map 'Build & Run' to a single key (we use F5). Map 'Run on iPad simulator' to another. Map 'Open in External Editor' to launch the file in Cursor or VS Code for non-Swift edits.
- Behaviors (Xcode → Behaviors → Edit). Configure 'Build Failed' to play a sound and stay in the issue navigator. Configure 'Test Failed' to do the same. Auditory feedback turns out to compound focus quality.
- Multiple Xcode windows for related apps. When updating the template across apps, three Xcode windows in mission control beats one window switching projects all day.
Editor + AI assist
We write Swift in Xcode (its tooling is unmatched). For Markdown, Python scripts, and JSON spec files, we use Cursor. Claude or Cursor's built-in AI chat handles 'rename this property across the project,' 'translate these strings to Italian,' 'write me a regex for X.' Massive multiplier.
We deliberately do not use AI to write Swift architecture decisions. AI is great at the manual parts (regex, refactor, translation, docstring). Architecture is still the human job.
Scripts we run daily
The scripts folder has about 20 small tools, but the ones we actually use:
new-app.sh- clones the template, renames bundle ID, sets up RevenueCat keys, opens Xcode. About 90 seconds from idea to cursor.release.sh- runs tests, archives, uploads to App Store Connect, opens the version in TestFlight.translate.py- feeds Localizable.xcstrings to an LLM API for new strings only. We described the workflow in our localization post.screenshots.sh- runs ascelerate's screenshot capture across our standard device set + 15 languages.sitemap.py- regenerates this site's sitemap from apps.json. Triggered after every catalog change.
Calm operations
The non-code part of running a studio:
- One support inbox. hello@mk0.net. Reply within 24h or not at all (we always reply).
- Review responses. We respond to every review under 4 stars within a week. Costs nothing, signals care.
- Boring on-call. No alerts. If something is broken, the App Store ratings will tell us. Calm is a feature.
- One day a week off code. Strategy, ASO, marketing, finance. The code-only weeks always shipped less than the mixed weeks.
The compounding trick
Every script you write twice, save. Every UI pattern you build twice, lift into the template. Every rejection you survive, write into the preflight (see our App Review post).
After a year of doing this consistently, the second-year speed is genuinely 3-5x the first year. Not because you're typing faster - because you've removed the friction one decision at a time.