Skip to content

The Superfone iOS app

Live on the App Store

Solo iOS engineer · Superfone · 2026

Built the native iOS app from an empty Xcode project to a live App Store release in under three weeks — CallKit, offline-first data, and real SIP/PSTN calling.

iOS · Swift / SwiftUI · CallKit · SwiftData · VoIP


In early 2026 I took the iOS app from a blank project to a 1.0 release on the App Store in under three weeks. Calling apps are deceptively hard on iOS — the phone itself is the competition, and the OS gives you a strict, opinionated framework you have to make peace with.

What I built

  • A full Swift / SwiftUI app with a proper launch/onboarding flow and OTP-based auth.

  • CallKit + PushKit, done correctly. This is the part that breaks every naive VoIP app: ghost ringing, “already on a call” states, Do-Not-Disturb compliance, and accepting a call across both SIP and PSTN bridge paths. Getting the native call UI to behave like the system Phone app is most of the work.

  • Offline-first by design. Contacts and call logs persist locally with SwiftData, kept in sync by a background actor that runs full and delta syncs off the main thread — so the UI never janks while thousands of contacts reconcile.

  • Remote feature flags backed by object storage, plus real-time state sync and deep links for missed-call, reminder, and messaging events.

The lesson

Shipping fast and shipping a calling app are usually opposites. The way to do both is to spend your time only on the genuinely hard, platform-specific parts — CallKit state, threading, sync correctness — and refuse to over-build everything else.