I've been building iOS apps for 3 years now. Started with UIKit, switched to SwiftUI, went back to UIKit, and finally settled on... well, it depends.
Here's my honest take after shipping 27 apps.
The SwiftUI Honeymoon
When SwiftUI dropped, I rewrote everything. Every. Single. App.
struct ContentView: View {
@State private var items: [Item] = []
var body: some View {
NavigationStack {
List(items) { item in
ItemRow(item: item)
}
.navigationTitle("My App")
.task {
items = await fetchItems()
}
}
}
}
Look at that. Clean. Declarative. Beautiful.
Then I hit production.
Where SwiftUI Still Falls Short (2026)
1. Complex Navigation
NavigationStack is better than NavigationView, but deep linking and programmatic navigation still feel hacky:
@Observable
class Router {
var path = NavigationPath()
func navigate(to destination: Destination) {
path.append(destination)
}
func popToRoot() {
path = NavigationPath()
}
}
Works... until you need to restore state after a crash.
2. Performance with Large Lists
LazyVStack is lazy, but not lazy enough for 10,000+ items:
// This stutters on older devices
LazyVStack {
ForEach(massiveArray) { item in
ComplexItemView(item: item)
}
}
// Better: manual pagination
LazyVStack {
ForEach(visibleItems) { item in
ComplexItemView(item: item)
.onAppear {
loadMoreIfNeeded(item)
}
}
}
3. Custom Layouts
The Layout protocol in iOS 16+ is powerful but the learning curve is steep.
Where SwiftUI Wins (Absolutely)
1. Rapid Prototyping
I can build a full screen in 20 minutes:
struct ProfileView: View {
let user: User
var body: some View {
ScrollView {
VStack(spacing: 20) {
AsyncImage(url: user.avatarURL) { image in
image.resizable()
.scaledToFill()
.frame(width: 120, height: 120)
.clipShape(Circle())
} placeholder: {
ProgressView()
}
Text(user.name)
.font(.title.bold())
StatsRow(user: user)
ActionButtons(user: user)
}
.padding()
}
}
}
2. Previews
Yes, they crash. Yes, they're slow sometimes. But they've saved me thousands of hours compared to building and running on a simulator.
3. Multiplatform
One codebase for iOS, macOS, watchOS, and visionOS. I shipped a watchOS companion app in 2 hours.
My Verdict for 2026
| Scenario | Winner |
|---|---|
| New app from scratch | SwiftUI |
| Complex enterprise app | UIKit + SwiftUI views |
| Rapid prototyping | SwiftUI (no contest) |
| Heavy custom animations | UIKit |
| watchOS / visionOS | SwiftUI (only option) |
| Team of junior devs | SwiftUI (easier to learn) |
My recommendation: Start with SwiftUI. Drop down to UIKit via UIViewRepresentable when you hit a wall. This gives you 90% SwiftUI productivity with 100% UIKit escape hatches.
The Templates That Save Me Hours
After building 27 apps, I extracted my best patterns into reusable templates. Every new project starts with a proven architecture instead of boilerplate.
If you want to skip the setup phase and start building features immediately, check out my SwiftUI templates and components on my Boosty page.
For daily SwiftUI tips, join my Telegram channel: t.me/SwiftUIDaily
What's your take? Are you all-in on SwiftUI or still mixing frameworks? Drop a comment below.
Top comments (0)