A clean, modern podcast player app for iOS built with SwiftUI and Clean Architecture principles.
- 🎙️ Browse trending podcasts
- 🔍 Search for podcasts
- ⭐ Subscribe to your favorite podcasts
- 📱 Clean, modern UI with smooth animations
- 🎵 Audio playback with controls (play, pause, skip forward/backward)
- 📊 Episode list with details
- 💾 Local subscription management
The app follows Clean Architecture principles with clear separation of concerns:
iPodcast/
├── Domain/ # Business Logic Layer
│ ├── Entities/ # Core business models (Podcast, Episode)
│ ├── Repositories/ # Repository protocols
│ └── UseCases/ # Business use cases
├── Data/ # Data Layer
│ ├── Network/ # API services
│ ├── DTOs/ # Data Transfer Objects
│ ├── Repositories/ # Repository implementations
│ └── Local/ # Local storage (UserDefaults)
├── Presentation/ # Presentation Layer
│ ├── Home/ # Home screen (podcast list)
│ ├── Detail/ # Podcast detail screen
│ ├── Player/ # Audio player screen
│ └── Components/ # Reusable UI components
└── Core/ # Shared utilities
├── Constants/ # API constants
└── Extensions/ # Swift extensions
- Visit PodcastIndex API
- Sign up for a free account
- Get your API Key and API Secret
Open iPodcast/Core/Constants/APIConstants.swift and replace the placeholder values:
enum APIConstants {
static let baseURL = "https://api.podcastindex.org/api/1.0"
// Replace with your actual credentials
static let apiKey = "YOUR_API_KEY"
static let apiSecret = "YOUR_API_SECRET"
// ...
}- Open
iPodcast.xcodeprojin Xcode - Select your target device or simulator
- Press
Cmd + Rto build and run
- iOS 16.0+
- Xcode 15.0+
- Swift 5.9+
- Displays trending podcasts
- Search functionality with debouncing
- Subscribed podcasts appear at the top
- Subscribe/unsubscribe toggle
- Shows podcast information and artwork
- Lists all episodes
- Subscribe button
- Tap episode to play
- Full-screen audio player
- Artwork display
- Playback controls (play/pause, skip ±15s)
- Progress slider
- Time display
- Persistent mini player at the bottom
- Shows currently playing episode
- Quick play/pause control
- Tap to expand to full player
- SwiftUI - Modern declarative UI framework
- Combine - Reactive programming
- AVFoundation - Audio playback
- URLSession - Networking
- CryptoKit - API authentication
- UserDefaults - Local data persistence
- Separation of Concerns - Each layer has a single responsibility
- Testability - Business logic is independent of UI and frameworks
- Maintainability - Easy to understand and modify
- Scalability - Easy to add new features
- Independence - UI, database, and external services are replaceable
The app uses the PodcastIndex API with SHA1 authentication:
- Search Podcasts -
/search/byterm - Trending Podcasts -
/podcasts/trending - Get Episodes -
/episodes/byfeedid
View → ViewModel → UseCase → Repository → NetworkService → API
↓
DTO → Entity
- Download episodes for offline playback
- Playback speed control
- Sleep timer
- Episode bookmarks
- Playlist creation
- iCloud sync for subscriptions
- CarPlay support
- Widget support
This project is for educational purposes.
Tawhid Monowar
Note: Make sure to add your PodcastIndex API credentials before running the app!