Boilerplate · Podcast

Podcast App Boilerplate for iOS

A SwiftUI base wired for accounts, subscriptions, and sync, with clear guidance on the audio-specific work an AVFoundation player needs: background playback, the audio session, and downloads that survive a locked screen.

Last updated: 2026-07-17 8 min read By Ahmed Gagan, iOS Engineer
Quick Answer

The Swift Kit is a podcast app boilerplate for iOS that costs $99 one-time and gives you a SwiftUI architecture ready for an AVFoundation audio player, a Supabase backend for subscriptions and listen state, and a RevenueCat paywall for a premium tier. Audio apps have specific requirements — background playback, a correctly configured audio session, lock-screen controls, and downloads — and the kit gives you a clean home for that AVPlayer work rather than a proprietary player that fights you. It ships the accounts, sync, storage, and billing every podcast app needs; you build the playback, feed parsing, and download logic. It targets iOS 16 and up, including the iOS 26 Liquid Glass look.

Price
$99 one-time, lifetime updates
Audio
AVFoundation-friendly architecture for background playback
Backend
Supabase auth, Postgres subscriptions + progress, storage
Monetization
RevenueCat paywall for a premium listening tier

Audio playback and the background-mode work a podcast app can't skip

A podcast app is an audio app, and iOS audio has non-negotiable requirements the moment a user locks their phone. Playback has to continue in the background, the lock screen and Control Center have to show the episode and respond to play, pause, and skip, and the audio session has to be configured so your app cooperates with other audio. The Swift Kit does not ship a proprietary player that hides AVFoundation from you — that would fight you the moment you need custom behavior. Instead it gives you a clean SwiftUI architecture where an AVPlayer-based player model lives naturally, plus the account and sync layer that playback progress writes to. You enable the Audio background mode in your target's capabilities, set the audio session category to playback, and the player keeps running when the screen is off.

An AVPlayer audio session that survives a locked screen
import AVFoundation
import Observation

@Observable
final class AudioPlayer {
    private var player: AVPlayer?

    func configureSession() {
        let session = AVAudioSession.sharedInstance()
        // .playback keeps audio going when the screen locks;
        // .spokenAudio tunes behavior for talk content.
        try? session.setCategory(.playback, mode: .spokenAudio)
        try? session.setActive(true)
    }

    func play(episodeURL: URL) {
        player = AVPlayer(url: episodeURL)
        player?.play()
    }

    func pause() { player?.pause() }
}
// Also enable the "Audio, AirPlay, and Picture in Picture"
// background mode in Signing & Capabilities.

Lock-screen controls and Now Playing info

Once audio plays in the background, users expect to control it without opening the app — from the lock screen, Control Center, AirPods, and CarPlay. That is MPRemoteCommandCenter and MPNowPlayingInfoCenter, both native and free. The Swift Kit does not wrap these behind a custom abstraction, because they are the kind of platform surface you want direct control over; it gives you an architecture where the player model that owns your AVPlayer is the obvious place to register remote commands and publish the current episode's title, artwork, and elapsed time. This is podcast-specific glue you write once, and the kit keeps it out of your view layer where it belongs.

Registering remote commands for the lock screen
import MediaPlayer

extension AudioPlayer {
    func setupRemoteCommands() {
        let center = MPRemoteCommandCenter.shared()
        center.playCommand.addTarget { [weak self] _ in
            self?.player?.play(); return .success
        }
        center.pauseCommand.addTarget { [weak self] _ in
            self?.player?.pause(); return .success
        }
        center.skipForwardCommand.preferredIntervals = [30]
    }

    func updateNowPlaying(title: String, elapsed: TimeInterval) {
        var info = [String: Any]()
        info[MPMediaItemPropertyTitle] = title
        info[MPNowPlayingInfoPropertyElapsedPlaybackTime] = elapsed
        MPNowPlayingInfoCenter.default().nowPlayingInfo = info
    }
}

Downloads, offline listening, and progress that syncs

Podcast listeners download episodes to listen on a commute, a flight, or a run with no signal — offline listening is core, not optional. The kit gives you the foundation to build it honestly. You download episode files with URLSession's background download support so a transfer finishes even if the app is suspended, store them in the app's file system, and record which episodes are downloaded and how far the user got in Supabase Postgres. Because playback progress lives on the account, a user can start an episode on their phone and resume it on their iPad. The kit's centralized data layer is where that download index and progress state live cleanly.

  • Use URLSession background downloads so episode transfers complete when the app is suspended
  • Store downloaded audio in the app's file system, indexed in Supabase Postgres
  • Playback progress on the account so a user resumes across iPhone and iPad
  • Supabase storage for show artwork and any user-generated audio or clips

Subscriptions, premium feeds, and reminders

Podcast apps monetize with a premium tier — ad-free listening, exclusive shows, or early access. The Swift Kit ships RevenueCat with a configurable paywall and multi-tier entitlements, so you can gate a premium feed behind a subscription and let free users hear the standard catalog. Sign in with Apple and email auth anchor a listener's subscriptions and history to a real account. Push notifications — included in the kit — are how a podcast app drives retention: a new episode of a followed show just dropped. Analytics show which shows get listened to and where the paywall converts, and onboarding gets a new listener from install to their first play with minimal friction.

  • RevenueCat paywall for ad-free, exclusive, or early-access premium tiers
  • Sign in with Apple + email so followed shows and history follow the listener
  • Push notifications for new episodes of followed shows
  • Analytics on listens and paywall conversion, plus an onboarding flow

What you build on top

The Swift Kit is not a finished podcast app. There is no bundled podcast directory, no RSS feed parser, no proprietary audio engine. That is the point — your show catalog, your feed ingestion, and your playback experience are your product. You bring the RSS or API parsing that turns a feed into episodes, the player behavior on top of AVFoundation, and the download management. The kit removes the roughly 30% of any audio app that is identical everywhere: accounts, subscription sync, storage, paywall, push, onboarding, analytics, and a design system that rethemes from one file. What it adds on top of a generic boilerplate is honesty about the audio-specific work — background modes, the audio session, remote commands — so you are not surprised by why your audio stops the second the screen locks.

Want it built instead?

Skip the estimate. I configure The Swift Kit to your brand and take it through App Store review — $499 setup, $999 launched. You keep the full source either way.

See done-for-you

Building a podcast app: from scratch vs with The Swift Kit

Build from scratch vs With The Swift Kit comparison
FeatureBuild from scratchWith The Swift Kit
Accounts + listening historyBuild and test auth and sync from zeroSign in with Apple + Supabase progress sync wired
Audio playerYou build the AVPlayer layer (same work either way)Clean home for AVFoundation, no fighting the architecture
Background audio + lock screenConfigure sessions and remote commands from scratchGuidance and a place for it, wired to the player model
Downloads / offline listeningDesign the download index and storage yourselfSupabase-indexed download architecture to build on
Premium subscription tierIntegrate StoreKit/RevenueCat yourself (days–weeks)RevenueCat paywall + tiers wired
New-episode notificationsSet up push infrastructure from scratchPush notifications included
Time to first paying listenerWeeks to monthsDays
CostYour time (the expensive part)$99 one-time, lifetime updates

Frequently Asked Questions

Does the podcast boilerplate handle background audio and lock-screen controls?
It gives you the architecture and guidance rather than a black-box player. You enable the Audio background mode in your target's capabilities, set the AVAudioSession category to playback, and register MPRemoteCommandCenter commands plus MPNowPlayingInfoCenter on the player model the kit gives a clean home to. The kit deliberately does not hide AVFoundation behind a wrapper, because background audio and remote commands are exactly the surfaces you need direct control over.
Does this podcast app kit include a player or an RSS feed parser?
No, and that is intentional. Your player behavior and feed ingestion are your product's differentiation, so the kit does not bundle a proprietary audio engine or an RSS parser. It gives you a SwiftUI architecture where an AVPlayer-based model lives naturally, plus the accounts, sync, storage, and paywall around it. You write the AVFoundation playback and the feed parsing that turns an RSS or API feed into episodes.
How do episode downloads and offline listening work in an app built on this?
You build downloads on the kit's foundation using URLSession background download support, so a transfer completes even if the app is suspended, and you store the audio in the app's file system. The kit's Supabase Postgres layer is where you index which episodes are downloaded and how far the listener got. Because progress is on the account, a user can resume an episode across their iPhone and iPad.
Can I run a premium ad-free or exclusive-show tier in a podcast app with this?
Yes. RevenueCat is wired with a configurable paywall and entitlements, so the common model is a free tier with the standard catalog and a Pro tier for ad-free listening, exclusive shows, or early access. Restore and entitlement checks are handled, so a reinstalling listener regains their premium feed without custom code.
Will a podcast app built on this notify listeners when a followed show releases a new episode?
The kit includes the push notification infrastructure that new-episode alerts depend on — device registration and delivery are in place. You wire the trigger: when your backend detects a new episode in a feed a user follows, you send the push. The retention loop for a podcast app is exactly this, and the plumbing is done so you focus on the follow logic.

Keep exploring

Ship your podcast app in days, not months

Get accounts, subscription sync, a clean home for your AVFoundation player, downloads architecture, and a premium paywall for $99 one-time — and spend your build on playback and shows, not background-mode debugging.

Get The Swift Kit — $99

One-time purchase · Lifetime updates · 14-day refund