Blog
Notes from the studio - building, shipping, and learning in iOS. Subscribe via RSS →
Single-person iOS studio toolkit (Xcode, scripts, sanity)
The hardware, Xcode setup, scripts, and operational habits that let one person ship 48 iOS apps in a year - without burning out.
Surviving App Review: 5 rejections we learned from
Five App Store rejections we collected building 48 apps - what triggered each, how we resolved them, and the preflight checklist we now run.
Best privacy-first iOS apps for 2026
Apps that respect your data - tested in 2026. No third-party trackers, no behavioral SDKs, no surprise cloud uploads.
The iOS privacy nutrition label, demystified
App Privacy nutrition labels are confusing and easy to fill in wrong. Here's the decision tree we use to fill them out for every app we ship - and the categories where studios accidentally lie.
Inside ADWize: AdSense analytics in your pocket
Why we built ADWize, the trade-offs of consuming the AdSense API on-device, and what we'd build differently next time.
How BodiLog uses HealthKit and SwiftData together
The data architecture behind BodiLog - when HealthKit is the source of truth, when SwiftData is, and how we resolve conflicts without losing user trust.
Best iOS weight tracker apps in 2026
Comparison of the best iOS weight tracker apps in 2026 - HealthKit integration, trend smoothing, and privacy stories.
Custom Product Pages (CPP): the underused ASO weapon
Custom Product Pages let you run up to 35 variants of your App Store listing per app. Most indie devs skip them. Here's how to use them and what we measured.
Behind Pomoly: building a focus timer that doesn't nag
How we designed Pomoly - a Pomodoro timer that ships Live Activities, widgets, and ambient sounds without the gamification trap most focus apps fall into.
Localizing iOS apps to 15 languages without hiring translators
Every app we ship is localized to up to 15 languages. We don't hire translators. Here's the workflow that produces respectable copy at near-zero cost.
App Store screenshot anatomy: the 3-line formula we use
What makes the first three App Store screenshots actually convert. The formula we apply to every app launch - value claim, hero feature, trust signal.
Best Pomodoro & focus timer apps for iPhone (2026)
Comparison of the best Pomodoro and focus timer apps for iOS in 2026 - Live Activity support, ambient sounds, and pricing.
Pricing your indie iOS subscription: what we've learned
Yearly vs monthly, the weekly trap, trial length, and per-country pricing. The pricing decisions we now default to across our 48-app catalog.
Paywall design: 3 patterns we've tested across 48 apps
Hard paywalls vs feature gates vs free + nudges. We've shipped all three across our catalog. Here's how each performs and when we pick which.
Free trial vs lifetime unlock: what converted better
We tested 7-day free trials against one-time lifetime purchases on the same apps. Here's what each did to conversion, retention, and revenue per user.
Best iOS habit tracker apps in 2026
An honest comparison of the best iOS habit tracker apps in 2026 - what each does well, what they cost, and which one fits your style.
App Intents & Shortcuts: the iOS discovery surface most apps ignore
App Intents put your app in Spotlight, Siri, Shortcuts, and the Action Button. Most indie apps never wire them up. Here's why you should and how to ship one in an afternoon.
Setting up RevenueCat for an iOS app in 30 minutes
A no-fluff walkthrough of getting RevenueCat live in a SwiftUI iOS app - dashboard, SDK, paywall, sandbox testing - in about half an hour.
Live Activities done right: when to ship, when to skip
ActivityKit Live Activities and Dynamic Island work brilliantly for some apps and badly for others. Here's how we decide - and what we'd do differently next time.
iPad-first SwiftUI without splitting your codebase
Most universal iOS apps treat iPad as a stretched iPhone. The result is bad on both. Here's how we ship iPad and iPhone from one SwiftUI codebase that respects each.
SwiftData migrations: 5 patterns that actually work
Production-tested SwiftData migration patterns from 30+ shipped iOS apps. Schema versioning, lightweight changes, custom plans, and the case where you give up and rebuild.
Building widgets people actually use (WidgetKit, 2026)
Most widgets are forgotten. Here's how we design WidgetKit widgets across our apps that survive on the home screen - update budgets, glanceability, and the three-tier mental model.
SwiftUI vs UIKit in 2026: when to still pick UIKit
SwiftUI is the default for new iOS apps in 2026, but there are still narrow situations where UIKit is the right call. Here's the line we draw.
Our shared SwiftUI starter: what's in it, what's not
How a focused 1,500-line SwiftUI starter let us ship 48 iOS apps in a year - and what we deliberately keep out of it.
How we shipped 48 iOS apps in a year
Lessons learned building a calm, useful catalog of small SwiftUI apps - what worked, what didn't, and the templates we now reuse on every project.
Why SwiftData (with CloudKit) changed our process
SwiftData removed an entire layer of plumbing from our stack. Here's how we use it across a half-dozen production apps - and where it still trips us up.
ASO for tiny studios that ship a lot
You don't need a big budget to rank. A practical playbook for keyword research, screenshot iteration, and localization - the same one we run for every release.