SwiftLee Weekly

Swift moves fast.
You don't have to.

The 5-minute Tuesday email for Swift & iOS developers, by Antoine van der Lee.

No spam. One email every Tuesday. Unsubscribe in one click.

Antoine van der Lee

Curated by Antoine van der Lee, read weekly by 31,000+ developers at Apple, Google, Meta, Amazon, and Airbnb.

Latest issues

Issue #324

How Apple migrates projects to Swift · A new iOS 27 API for UIKit · A creative way of using markdown in SwiftUI

Featuring: How to free up Xcode disk space safely with an AI Agent

Issue #323

App copywriting & Agents · SwiftData's new HistoryObserver · Timezone testing without physically traveling

Featuring: How to Test iOS Apps in Different Time Zones on a Physical iPhone

Issue #322

A new Agent Skill · AI Mission Control · Splitting Large SwiftUI Views using Apple's Best Practices

Featuring: User Diagnostics Reports: Solving app bugs faster with AI Agents

Issue #331

Spending $10K per week on agents · A new Safari MCP server · A risk of rotating a Liquid Glass view

Featuring: Defer in Swift explained with Code Examples

Issue #330

Using Cursor in Xcode 27 · 3 breaking changes in iOS 27 SDK · A proxy, agent integration, and camera solution for Xcode's Simulator

Featuring: Memberwise Initializer in Swift explained with Code Examples

Issue #329

AI Controlling Xcode's Device Hub · A new CLI for App Store Connect · What's new in SwiftUI & Swift Concurrency?

Featuring: Swift 6.4: What’s New in Concurrency

Issue #328

What's new in SwiftData? · A peek into Xcode 27' SwiftUI Agent Skill · Using Claude with Foundation Models

Featuring: SwiftUI Best Practices, straight from Apple's Xcode 27 Agent Skill

Issue #327

Xcode 27's Agent' Skills · Is RocketSim sherlocked? · An often used Property Wrapper that changed into a macro in SwiftUI

Featuring: Using Xcode 27's Agent Skills in Claude, Codex, and Cursor

Issue #326

I built a new app: Introducing MCP Beast · Stateless actors? · WWDC Quiz to warm you up

Featuring: WWDC 2026: My predictions and wishes

Issue #325

Xcode Instruments & Swift Concurrency · Accessibility at WWDC'26 · The MCPs I use for polishing app releases

Featuring: Using Xcode Instruments to optimize Swift Concurrency Code

Issue #324

IFTTT MCP and Reddit for App Promotion · safeAreaBar in SwiftUI · XcodeMCP and Claude Code

Featuring: Recording a Physical iPhone for App Preview Videos

Issue #323

AI-Powered Xcode Simulator Automation · Dynamic Quick Actions on iOS · A new Accessibility Competition with prices

Featuring: AI-Powered Xcode Simulator Automation (token-efficient)

Issue #322

Indirect enum cases in Swift · Unexpected Task suspension points slowing down your apps · 63% fewer tokens used to navigate the Simulator using Agents

Featuring: Unexpected Task suspension points in Swift Concurrency

Issue #321

SwiftUI Animations · SwiftUI Performance Tuning · Column breakpoints in Xcode

Featuring: Immediate tasks in Swift Concurrency explained

Issue #320

Apple Developer meetup during WWDC · Draggable bottom sheet in SwiftUI · Xcode Instruments x AI Agents

Featuring: Xcode Instruments Time Profiler: Improve performance with AI

Issue #319

Network Optimization using AI Agents · Lazy properties in SwiftUI? · Kids & Vibe Coding

Featuring: Network Requests Optimization using Xcode’s Simulator & Agents

Issue #318

SwiftUI is not accessible by default · A list replacement in SwiftUI · Controlling the Simulator using Agents

Featuring: RocketSim 15: VoiceOver Navigator & Pro Simulator Recordings

Issue #317

6 new Agent Skills for Xcode · WWDC 2026 Pins · Swift 6.3 and Xcode 26.4 must-knowns

Featuring: Xcode Build Optimization using 6 Agent Skills

Issue #316

Apple's Hidden Collection & Sequence APIs · The "One More Prompt" risk · Generally useful prompts for app development

Featuring: The “One More Prompt” risk of agentic coding

Issue #315

7 (!!) Swift Evolution Proposal changes · Xcode 26 Compilation Caching · Spacer side effects in SwiftUI

Featuring: Agentic Development: Multi-Project Challenges

Issue #314

4 new Agent Skills for iOS development · A 9-Step framework for choosing the right Agent Skill · A new iOS 26 SwiftUI Modifier

Featuring: A 9-Step Framework for Choosing the Right Agent Skill

Issue #313

Combining MCP & Agent Skills · Optimizing SwiftUI animations using AI · Integrating AI into Xcode's Simulator

Featuring: Using an MCP to perform product optimizations

Issue #312

A new VoiceOver Navigator tool for Xcode · Tracking token usage in Foundation Models · Two SwiftUI animation articles

Featuring: VoiceOver Navigator & 120 FPS Recordings for Xcode’s Simulator

Issue #311

An Agent Skill for Swift Testing · Using Gemini in Xcode · Automating Codex & The Agentic Loop

Featuring: Swift Testing Agent Skill: Write high quality tests with AI

Issue #310

Agentic Coding in Xcode · Is Combine dead? · A new way of testing VoiceOver

Featuring: Core Data Agent Skill: Now available open-source

Issue #309

An interview with the creator of Clawd · A new SwiftUI Agent Skill · How Apple hooks entire frameworks

Featuring: SwiftUI Agent Skill: Build better views with AI

Issue #308

AI Agents eating SaaS · Unexpected SwiftUI Binding side effect · A brand new Agent Skill for SwiftUI

Featuring: AI App Development: What I Learned in One Month

Issue #307

AI Prompts for network requests · @_exported import VS public import · Universal Links at scale

Featuring: 11 Things I learned after using AI Agents full-time

Issue #306

Fight Google and Apple Reviews · Agent Skills explained · Inline arrays in Swift

Featuring: Agent Skills explained: Replacing AGENTS.md with reusable AI knowledge

Issue #305

Codex Skills for iOS Development · Replay network requests inside Swift Tests · LLM improvements 12 months later

Featuring: Icon Composer: Transforming an AI-generated icon

Issue #304

The importance of being your own end user · SwiftLee in 2025: A year in review · NSSpain Conference videos!

Featuring: SwiftLee in 2025: A full year as an indie developer

Issue #303

SwiftAgents · Giving your agents eyes · Stretchable headers in SwiftUI

Featuring: From App Idea to 10K MRR – YouTube Series

Issue #302

From App Idea to 10K MRR · SwiftUI Group being harmful? · Swift Configuration 1.0

Featuring: 9 months of a Swift Concurrency Course

Issue #301

Copycat apps and App Store Guidelines · Getting your talk accepted at conferences · AI-power App Metric Insights

Featuring: Battery life on iOS and the impact of killing apps

Issue #300

Teaching AI to read Xcode builds · The Transferable protocol · Swift Package Scripts

Featuring: The 7 changes I do for every new Xcode project

Issue #299

Black Friday discounts · Using @Observable with UIKit · A SwiftData change you might not have noticed

Featuring: Black Friday: SwiftLee Courses & RocketSim

Issue #298

Approachable Concurrency · Xcode Instruments & suspension points · Two defeated conference challenges

Featuring: Approachable Concurrency in Swift 6.2: A Clear Guide

Issue #297

From App Idea to 10K MRR · From Swift to Mojo · One Swift mistake...

Featuring: MainActorMessage & AsyncMessage: Concurrency-safe notifications

Issue #296

Simulator Camera Testing · A goodbye to a long running conference · Optimize the performance of your SwiftUI app

Featuring: Simulator Camera: Test your app without a physical device

Issue #295

Xcode Build Performance Analysis · Swift for Android · WWDC APIs timeline

Featuring: Build performance analysis for speeding up Xcode builds

Issue #294

Glass Views & Animations · Singletons & Swift Concurrency · Structured experiments

Featuring: SwiftUI Architecture: Structure Views for Reusability and Clarity

Issue #293

My AI Agents journey · The importance of Swift Migration Tooling · Custom ViewModifiers are useless

Featuring: Why Swift Migration Tooling Matters

Issue #292

if expressions as assignments (click to see the post)

Featuring: The 5 biggest mistakes iOS Developers make with async/await

Issue #291

Next-level Xcode Simulator recordings · Additional iOS 26 documentation for Agents.md · Swift Package Manager traits

Featuring: Derived Data: 5 Things iOS Developers Do Wrong

Issue #290

Apple Docs for LLMs · Supporting async calls in defer · Physics-driven moti

Featuring: App Store Optimization: Real-world Best Practices

Issue #289

Nothing really stands out · Copy is hard to read · Images don't feel part of a consistent design · Screenshot 1: Build trust & authority · Screenshot 2: Core Benefit (Aha moment) · Screenshot 3: Breadth & add more trust

Featuring: Introducing Diagnostics: Improved Debugging and User Support

Issue #288

A new free 5-day email course launching later this month · RocketSim's major macOS Tahoe update · New performance related lessons for my Swift Concurrency Course

Featuring: SwiftUI Toggle: A Complete Guide

Issue #287

Dealing with Xcode migrations · Debugging Swift Concurrency · Controlling warnings in Swift Packages

Featuring: @ViewBuilder usage explained with code examples

Issue #286

Raw Identifiers in Swift · Using a WebView in SwiftUI · Using App Intents correctly

Featuring: Swift Computed Property: Code Examples

Issue #285

My Apple Design Workshop experience · The end of Property Wrappers? · Watch out for 30,000x slower Equatable conformance

Featuring: Property Wrappers in Swift explained with code examples

Issue #284

@isolated(any) · New Observations API · SwiftUI for macOS Tahoe

Featuring: Async await in Swift explained with code examples

Issue #283

My favorite open-sourced Apple frameworks · The biggest benefit of Going Indie · A special "I'm on a holiday" edition

Featuring: Global actor in Swift Concurrency explained with code examples

Issue #282

A threading risk for Combine & Swift Concurrency · Flux pattern in Swift · A crash debugging experience

Featuring: Combine and Swift Concurrency: A threading risk

Issue #281

Snapshot testing and CI · A hidden Xcode 26 AI prompt · 10 + 1 tips on using Claude Code

Featuring: Threads vs. Tasks in Swift Concurrency

Issue #280

@Animatable in SwiftUI · Preparing for the future of App Development · 6 Mistakes that slow down development

Featuring: Modern Swift Lock: Mutex & the Synchronization Framework

Issue #279

Vibe coding in Xcode 26 · Extensible enums in Swift · Designing UI with Liquid Glass

Featuring: Swift Concurrency & Swift 6 Course (Launch offer)

Issue #278

The end of Flutter? · Losing £25,000 · Time to drop support for older iOS versions?

Featuring: Sparkle: Distribution apps in- and out of the Mac App Store

Issue #277

Reverse-Engineering Xcode's Coding Intelligence prompt · Speed up iOS Launch with fault ordering · Running the camera in Xcode's Simulator

Featuring: #Playground Macro: Running Code Snippets in Xcode’s canvas

Issue #276

Default Actor Isolation · macOS Tahoe & App Icons · SwiftData or...?

Featuring: Default Actor Isolation in Swift 6.2

Issue #275

Notable WWDC changes · Automatic observation tracking for UIKit · What is it like to visit WWDC?

Featuring: @concurrent explained with code examples

Issue #274

Microapps architecture · Private APIs for hidden UIKit views · SwiftUI tracing using Macros

Featuring: Unique values in Swift: Removing duplicates from an array

Issue #273

Build apps without Xcode or xcodebuild · Camera support for Xcode's Simulator · An App Store Connect feature you need to enable

Featuring: Billing Grace Period Explained: How It Works and Why It Matters

Issue #272

Default Isolation in Swift 6.2 · The .ignoredByLayout() modifier in SwiftUI · Optimizing Mathematical Computations in Swift

Featuring: Institutional Purchases: Understanding and Detecting

Issue #271

Testing SwiftUI views · What's new in Swift 6.2? · Using Model Context Protocol on iOS

Featuring: Universal Links implementation on iOS

Issue #270

3 Indie Marketing Tips · Using Task Local values for dependencies · Will WWDC have a big impact?

Featuring: Testing push notifications on the iOS simulator

Issue #269

On-Device AI Models · A single line that bricks your iPhone · What happens if you don't know the answer?

Featuring: SwiftUI ForEach Explained with Code Examples

Issue #268

A first look at Swift 6.2 · A code deprecation coming in iOS 19 · Create MCP Servers in Swift

Featuring: Swift 6.2: A first look at how it’s changing Concurrency

Issue #267

How .ipa files can increase app security · Optimizing user flows in apps · Flexible SwiftUI user interfaces

Featuring: Swift Reduce: Combining elements into a single value

Issue #266

Structured spacing in SwiftUI · Test scoping traits · A great app that nobody knows about

Featuring: SwiftUI Alert Guide + Code Examples

Issue #265

What's new in Xcode 16.3 and Swift 6.1? · Static vs. Dynamic dispatching · New: RocketSim AI

Featuring: SwiftUI Grid, LazyVGrid, LazyHGrid Explained with Code Examples

Issue #264

SwiftData's ModelActor is weird · A new FlowNavigation library for SwiftUI · Why you should avoid using Group in SwiftUI

Featuring: SwiftUI TabView: Explained with Code Examples

Issue #263

SwiftUI Coordinator Pattern · Is it time to migrate to Swift 6? · Structural Identity in SwiftUI

Featuring: Swift Concurrency Course: Modern Concurrency & Swift 6

Issue #262

Rendering Pixel Art in SwiftUI · .animation() vs. withAnimation() · An @Observable performance risk

Featuring: Picker in SwiftUI explained with code examples

Issue #261

Structured Concurrency? · SwiftUI Animations · Threading in Swift Concurrency

Featuring: What is Structured Concurrency?

Issue #260

Conference ticket giveaway · Task.yield vs. Task.sleep · What is a good course price?

Featuring: Task.sleep() vs. Task.yield(): The differences explained

Issue #259

Swift 6 · ScrollTargetBehavior protocol · A major milestone for RocketSim

Featuring: Swift 6: What’s New and How to Migrate

Issue #258

ControlGroup in SwiftUI · 1-on-1 with an app development expert · My favorite books

Featuring: How to develop an app for iOS

Issue #257

Can you land an iOS job within 1 year? · Winning an Apple Design Award · Open-sourcing Swift Build

Featuring: Parameterized tests in Swift: Reducing boilerplate code

Issue #256

Debugging the undebuggable · Color mixing in SwiftUI · Indie app launch learnings

Featuring: Network Link Conditioner: Simulating Slow Networking

Issue #255

Network Speed Control for Xcode's Simulator · Important App Store News · Creative Coding using Swift

Featuring: RocketSim 13 - Network Speed Control

Issue #254

SwiftUI Navigation Patterns · Will AI replace app developers? · Building crash-free apps

Featuring: SwiftUI Lists: Present rows of data explained with code examples

Issue #253

From Apple Design Award to Going Indie · An Xcode feature that removed 66k lines of code · What defines a Senior?

Featuring: iOS App Development: How to get started?

Issue #252

SwiftLee 2024 In Review · SwiftLee's Most Read Articles of 2024 · What to expect from SwiftLee in 2025

Featuring: SwiftLee in 2024: Lessons learned and achievements

Issue #251

Dealing with in-app subscription billing issues · Getting started with Swift · Localization using SPM

Featuring: Swift Tutorials: Learn Swift with Easy-to-Follow Code Examples

Issue #250

Noncopyable types in Swift · Exploring MLX Swift · Xcode Library Customization

Featuring: SwiftUI Button: Custom Styles, Variants, and Best Practices

Issue #249

Exploring Apple Intelligence · SwiftUI Design System · Mutable let in Swift

Featuring: SF Symbol: How to for Swift & SwiftUI

Issue #248

Concurrency step-by-step · Geometry Effect in SwiftUI · Reducing an iOS app's size by half

Featuring: Enum explained in-depth with code examples in Swift

Issue #247

Black Friday Discounts · Apple Intelligence in SwiftUI · Balancing support requests in side projects

Featuring: Black Friday: 50% discount on RocketSim & Going Indie Course

Issue #246

App Store Nominations · ChatGPT for Xcode · Lazy vars and observable classes

Featuring: Contingent pricing for in-app subscriptions

Issue #245

Xcode's integrated code formatter · ARCtic Conference · Is Swift too complex?

Featuring: MainActor usage in Swift explained to dispatch to the main thread

Issue #244

Apple Intelligence · GitHub Copilot for Xcode · Common concurrency mistakes

Featuring: URLSession async/await: Perform network requests in Swift

Issue #243

SwiftUI View Transitions · Expedited App Reviews · Debug SwiftUI Crashes

Featuring: Mastering the @require Macro in Swift Testing

Issue #242

30% discount on iOS Courses · Working at startups vs. large companies · What is @preconcurrency actually doing?