Two SwiftData @Query Pitfalls — enum #Predicate and modelContext on Empty Lists

The Setup I was building Inbox/Archive list views for a document scanning app. Simple enough: filter documents by status using SwiftData’s @Query. Two compile-time surprises were waiting. Pitfall 1: #Predicate Can’t Compare Enums What I Wrote The natural approach: @Model class Document { var status: DocumentStatus // enum stored property // ... } enum DocumentStatus: String, Codable { case inbox, archived } Then in the view: @Query( filter: #Predicate<Document> { $0.status == .inbox }, sort: \Document.createdAt, order: .reverse ) private var documents: [Document] Looks clean. Doesn’t compile. ...

April 26, 2026 · 3 min · Young

Why SwiftUI Image Zoom Feels Wrong — and When UIScrollView Is the Answer

The Problem I needed a full-screen image viewer for a document scanning app. Pinch to zoom in, drag to pan around while zoomed. Standard stuff. Surely SwiftUI can handle this natively, right? The Journey Attempt 1: MagnifyGesture Only The straightforward approach: Image(uiImage: uiImage) .scaleEffect(scale) .gesture( MagnifyGesture() .onChanged { value in scale = max(1.0, value.magnification) } .onEnded { _ in withAnimation { scale = 1.0 } } ) Releasing fingers snaps back to 1x. Adding lastScale to persist the zoom level works, but now there’s no way to pan the zoomed image. ...

April 26, 2026 · 3 min · Young

4 Apps, 4 Rejections — What I Learned from App Store Review

I launched 4 iOS apps in quick succession and got rejected on every single one. Here’s what happened and how to avoid the same traps. 1. IAP Products Registered But Not in the Binary App: Renio (subscription tracker) Guideline: 2.1(b) - App Completeness I created subscription products (Monthly, Yearly) in App Store Connect but submitted the app without implementing StoreKit. The products existed in the console but not in the code. ...

April 21, 2026 · 4 min · Young

Handling Audio Interruptions in an iOS Music App with AVPlayer

The Problem I was building a Subsonic-based music streaming app. Background playback worked fine — until I noticed something odd: Play a song, send the app to the background Open YouTube and play a video (music stops — expected) Close the YouTube video Come back to the app: the pause button is showing, but no audio is playing The UI says “playing” while the actual audio is paused. Tapping the button toggles it to play, then you have to tap again. Broken UX. ...

April 21, 2026 · 2 min · Young

HabitTruth - Side Project Idea for Solo Developers

The Problem (Pain Level: 8/10) “I’ll start exercising tomorrow”, “I’ll definitely go to bed early tonight” - Do you make these promises every day and break them just as often? Problems with existing habit tracking apps: Simple checklists: Just check and done, no real accountability Self-deception allowed: You can check even if you didn’t actually do it Lack of motivation: No consequences when streaks break Vulnerable to single failures: “Already failed, might as well give up” mentality A developer on Reddit r/SideProject shared: “I built an iOS app for myself because I kept lying to myself.” ...

January 27, 2026 · 3 min · Young

iOS Postgres Monitoring - Mobile PostgreSQL Monitoring App Startup Idea

Problem DBAs and DevOps engineers need to check database status anytime, anywhere: Urgent alert during on-call Quick query performance check during meetings Monitor DB status after deployment while away Run simple queries from home on weekends Most existing solutions are desktop/web-centric, and dedicated mobile PostgreSQL monitoring apps are very rare. Market Item Details Target Market Global (GL) Segment Database Monitoring, Mobile DevOps Primary Target DBAs, DevOps, Backend developers TAM Niche market but loyal user base PostgreSQL is the most popular open-source database, widely used in AWS RDS, Aurora, etc. ...

January 22, 2026 · 2 min · Young