Give your simulator superpowers

RocketSim: An Essential Developer Tool
as recommended by Apple

Win a ticket for the Do iOS Conference in Amsterdam Join here.

A weekly Swift Blog on Xcode and iOS Development

See all

Recent Posts

Security-scoped bookmarks for URL access

Security-scoped bookmarks allow you to store access to a given user-selected URL. They are commonly used on macOS to store ...
/ Swift

The Going Indie Podcast with Antoine van der Lee

After creating my course, "From Side Project to Going Indie", I proudly announce a new podcast: "Going Indie with Antoine ...
/ General

Using the #expect macro for Swift Testing

Swift Testing is Apple's Swift framework for writing tests and introduces several macros, including the #expect macro. Where we had ...
/ Swift Testing

Swift Keywords

Do you know how to use each keyword in Swift?
Click on the keyword to learn more and explore code examples.

actor associatedtype async @autoclosure available await break catch class continue defer @discardableResult @dynamicCallable @dynamicMemberLookup enum @escaping fileprivate for @globalActor guard infix isolated lazy @MainActor nonisolated optional postfix @propertyWrapper private protocol required @resultBuilder rethrows sendable some struct subscript throw throws try typealias @unchecked @unknown unowned weak where while

See all

Learn more about Swift

Security-scoped bookmarks for URL access

Security-scoped bookmarks allow you to store access to a given user-selected URL. They are commonly used on macOS to store ...
/ Swift

JSON Parsing in Swift explained with code examples

JSON parsing in Swift is a common thing to do. Almost every app decodes JSON to show data in a ...
/ Swift

Typed throws in Swift explained with code examples

Typed throws are new since Xcode 16 and allow you to define the type of error a method throws. Instead ...
/ Swift

Stay updated with the latest in Swift & SwiftUI

Join 20,005 Swift developers in our exclusive newsletter for the latest insights, tips, and updates. Don't miss out – join today!

You can always unsubscribe, no hard feelings.

See all

Learn SwiftUI

@Entry macro: Creating custom environment values in SwiftUI

The @Entry macro in SwiftUI allows you to define custom environment values without writing boilerplate code. While introduced in Xcode ...
/ SwiftUI

Memory consumption when loading UIImage from disk

Memory consumption can quickly increase if you load many images from the disk using UIImage. You'll generally load images from ...
/ DebuggingSwiftUI

Why macOS Development is Perfect for Indie Developers

Building apps for macOS offers developers a fantastic opportunity to expand their skills, create useful utilities to solve their problems, ...
/ SwiftUI

Build Apps Faster using RocketSim

Recommend by Apple as an “Essential Tool for Developers”, RocketSim helps thousands of engineers to save hours per week. Discover these articles and learn how you can leverage RocketSim to improve your workflow:

App Actions

App Actions Perform Menu

RocketSim Tools

See all

Combine all the things

@Published risks and usage explained with code examples

@Published is one of the property wrappers in SwiftUI that allows us to trigger a view redraw whenever changes occur ...
/ CombineSwiftUI

RunLoop.main vs DispatchQueue.main: The differences explained

RunLoop.main and DispatchQueue.main are often used as schedulers within Combine. During code reviews, I often encounter inconsistency in using one ...
/ Combine

PassthroughSubject vs. CurrentValueSubject explained

PassthroughSubject and CurrentValueSubject are two types from the Combine framework that conforms to the Subject protocol. Both are very similar ...
/ Combine

See all

Dive into Core Data

How to observe NSManagedObject changes in Core Data using Combine

Observing changes in Core Data NSManagedObject instances with Combine publishers can be a great solution to keep your user interface ...
/ CombineCore Data

Data validation on insertion, update, and deletion in Core Data

Data validation in apps is important to make sure we save data conforming to the business rules. A name should ...
/ Core Data

Derived Attributes to improve Core Data Fetch Performance

Derived attributes are available since iOS 13 and aim to improve fetch performance in many different scenarios. Although we have ...
/ Core Data

See all

Be an expert on Xcode

Inspect network traffic using the Xcode Simulator

Inspecting network traffic is an essential skill for app developers. Several tools allow you to monitor requests going in and ...
/ Xcode

Xcode Build Insights: Keep track of project compilation times

Xcode Build Insights lets you keep track of compilation times to ensure your project doesn't suddenly become slow to build ...
/ Xcode

Solve Missing API declaration using required reason (ITMS-91053)

Apps submitted to the App Store must define API declarations using the required reasons. Apps that don't will be rejected ...
/ Xcode

See all

Get better at debugging

Memory consumption when loading UIImage from disk

Memory consumption can quickly increase if you load many images from the disk using UIImage. You'll generally load images from ...
/ DebuggingSwiftUI

Debugging SwiftUI views: what caused that change?

Debugging SwiftUI views is an essential skill when writing dynamic views with several redrawing triggers. Property wrappers like @State and ...
/ DebuggingSwiftUI

OSLog and Unified logging as recommended by Apple

OSLog is a replacement for print, and NSLog and Apple's recommended way of logging. It has different logging levels, like ...
/ DebuggingWorkflow

See all

Improve your workflow

Designing Apps: 5 Methods to improve your workflow

Designing apps can be challenging if you don't have a design background. Many of you who read my blog are ...
/ Workflow

Test-Driven Development (TDD) for bug fixes in Swift

Test-driven development (TDD) is a technique that requires you first to write a failing test before you start implementing a ...
/ Workflow

Third-party libraries acknowledgments using a Settings bundle

Third-party libraries help developers build apps faster but often come with a license. The MIT license is likely the most ...
/ Workflow

See all

Optimize yourself and improve

App onboarding funnel optimization to increase conversions

An app onboarding can be seen as a funnel full of steps toward the key action of your application. A ...
/ Optimization

App design: 5 benefits of using system components

Building custom elements and ignoring the sometimes boring system components during app design can be appealing. However, these boring elements ...
/ Optimization

ChatGPT for Swift: Top 5 code generation prompts

Using ChatGPT for Swift code generation can drastically increase your productivity. While I'm uncertain whether AI will take over our ...
/ OptimizationSwift
Explore categories Swift Combine Concurrency SwiftUI Core Data Xcode Debugging Workflow Optimization Swift Charts Swift Testing Most Popular Posts
  1. Security-scoped bookmarks for URL access
  2. Sendable and @Sendable closures explained with code examples
  3. Async await in Swift explained with code examples
  4. JSON Parsing in Swift explained with code examples
  5. MainActor usage in Swift explained to dispatch to the main thread
SwiftLee Weekly Newsletter