• Coming Soon on App Store
  • Home
  • Contents
    • Articles
    • Videos
  • Channels

Nav Menu

  • Home
  • Articles
  • Videos
  • Channels

Copyright By SoftSky App LTD - 2025

  • Contact Us
  • Terms of Use
  • Privacy Policy

Developing iOS apps since 2009. Former Staff iOS Engineer at WeTransfer, Amsterdam. - Blogging weekly at avanderlee.com - Former Staff iOS Engineer at wetransfer.com, leading the development of the iOS apps with millions of monthly active users. - Tweeting daily about Swift, iOS, and Xcode at twitter.com/twannl - Curating articles for the SwiftLee Weekly Newsletter - Courses via courses.avanderlee.com

RSShttps://www.avanderlee.com/feed
  • intermediate
  • By Antoine van der Lee
  • Oct 7

The 5 biggest mistakes iOS Developers make with async/await

Highlights 5 common Swift Concurrency mistakes when moving to Swift 6: treating async for-loops as normal, assuming async runs off the main thread, ignoring Task cancellation, risky manual migrations, and spawning tasks in onAppear—leading to UI hangs, dup calls, battery drain.

  • intermediate
  • By Antoine van der Lee
  • Sep 29

Derived Data: 5 Things iOS Developers Do Wrong

Many iOS devs misuse Xcode’s Derived Data. Learn what it stores, open it fast via Settings → Locations, and delete only a project’s folder (not all). Mine Logs/Build for metrics (XCLogParser, RocketSim), compare incremental vs clean builds, and inspect Build/Products .app to prune bloat and speed up teams.

  • intermediate
  • By Antoine van der Lee
  • Sep 23

App Store Optimization: Real-world Best Practices

Real-world ASO for RocketSim: choose relevant keywords, rewrite subtitle, and reorder first screenshots to scan & hook users. Measure impact in App Store Connect via daily averages; focus on App Store Browse, track conversion (not just impressions), and note featuring can skew data.

  • intermediate
  • By Antoine van der Lee
  • Sep 16

Introducing Diagnostics: Improved Debugging and User Support

Diagnostics is an open‑source library adding an in‑app issue reporter that attaches an HTML report with OS/app info, device/storage details, and full session logs with JS filtering. Smart Insights via SmartInsightsProvider detect patterns (e.g., update available, low storage) to speed up support and debugging.

  • beginner
  • By Antoine van der Lee
  • Sep 9

SwiftUI Toggle: A Complete Guide

Hands-on guide to SwiftUI Toggle: bind to a Bool, use custom labels or hide them, and add accessibilityLabel when labels are hidden. Explains .toggleStyle(.switch/.button/.checkbox/.automatic), grouping in Form/Section, and creating computed Binding(get:set:) (e.g., UserDefaults; prefer @AppStorage).

  • intermediate
  • By Antoine van der Lee
  • Aug 31

@ViewBuilder usage explained with code examples

Explains SwiftUI’s @ViewBuilder: why body uses it, how it resolves some View with conditionals, and how to apply it in initializers, properties, and methods. Implements a generic VHStack switching VStack/HStack via horizontalSizeClass. Notes if-conditions can affect performance/animations.

  • intermediate
  • By Antoine van der Lee
  • Aug 25

Swift Computed Property: Code Examples

Guide to Swift computed properties: read-only vs get/set, exposing model data safely, using in extensions, overriding in UIKit (prefersStatusBarHidden, setNeedsStatusBarAppearanceUpdate), and get throws/async. When to prefer methods and store heavy results to avoid repeated work.

  • intermediate
  • By Antoine van der Lee
  • Aug 19

Property Wrappers in Swift explained with code examples

Property Wrappers in Swift extract common logic into reusable wrapper objects, reducing boilerplate code. Introduced in Swift 5, they use @propertyWrapper with wrappedValue property. Examples include UserDefaults handling, projected values for Combine publishers, and debugging wrappers. Key features: custom initializers, optional handling, enclosing instance access, and function parameter usage. However, they face compatibility issues with Swift Concurrency's Sendable requirements in strict mode, making macros a potential alternative for new projects.

  • intermediate
  • By Antoine van der Lee
  • Aug 11

Async await in Swift explained with code examples

Intro to async/await and structured concurrency in Swift: replace completion handlers and Result with linear try/await flows. Shows calling async from sync via Task initializer and @MainActor, Xcode refactors, and bridging with withChecked(Throwing)Continuation. Notes Swift 6/6.2 migration impact.

  • intermediate
  • By Antoine van der Lee
  • Aug 5

Global actor in Swift Concurrency explained with code examples

Explains Swift global actors that provide actor isolation across functions, properties, and types. Shows @MainActor and a custom @globalActor (ImageProcessing with static shared) to serialize work. Advises private init to prevent extra executors. Takeaway: isolate domains safely.

  • intermediate
  • By Antoine van der Lee
  • Jul 28

Combine and Swift Concurrency: A threading risk

Combine + Swift Concurrency can crash under Swift 6.2: NotificationCenter publishers run on the poster’s thread and sink closures lack actor checks. Posting from a detached Task to a @MainActor observer fails. Prefer AsyncSequence notifications or start a Task in sink.

  • intermediate
  • By Antoine van der Lee
  • Jul 21

Threads vs. Tasks in Swift Concurrency

Clarifies Threads vs Tasks in Swift Concurrency: Tasks are scheduled on a cooperative thread pool, have no fixed thread; await suspends and yields. Swift caps threads to ~core count to prevent thread explosion and improve performance vs GCD. Demo with Task, Task.sleep, Thread.current.

  • intermediate
  • By Antoine van der Lee
  • Jul 14

Modern Swift Lock: Mutex & the Synchronization Framework

Introduces the Synchronization framework’s Mutex (iOS 18/macOS 15). Shows withLock for inout mutation, returning values, and throwing. Wrap non‑Sendable types to make enclosing types Sendable. When to use a mutex vs actors for synchronous access. Notes OS availability.

  • beginner
  • By Antoine van der Lee
  • Jul 8

Swift Concurrency & Swift 6 Course (Launch offer)

Flagship course to master Swift Concurrency and migrate to Swift 6’s strict checks. Learn async/await, tasks, Sendable, actors, priority inheritance, threading vs tasks, and how compiler checks prevent data races. Includes step-by-step migration habits, Swift 6.2 updates, and a migration build.