Task Groups in Swift explained with code examples
Task Groups in Swift allow you to combine multiple parallel tasks and wait for the result to return when all ...
Read More
Read More
RocketSim 9.0: Enhance your iOS Simulator
RocketSim is a developer tool that gives your iOS Simulator extra functionalities to increase day-to-day development productivity. Floating windows become ...
Read More
Read More
Engineering goals: How to become a more successful developer
Engineering goals create focus and help you achieve the milestones of becoming a successful developer. You'll know better what you've ...
Read More
Read More
Enum explained in-depth with code examples in Swift
Enum usage in Swift: If case, guard case, fallthrough, and the CaseIteratable protocol. These are all terms which could sound ...
Read More
Read More
SwiftLee 2022: A Year in Review
Another year passed by, and we're close to getting into 2023. It's been a year with a single Swift 5.7 ...
Read More
Read More
OptionSet in Swift explained with code examples
OptionSet in Swift allows you to define a set of options for configurations. It's the Swift variant of the well-known ...
Read More
Read More
How to use FormatStyle to restrict TextField input in SwiftUI
A custom FormatStyle can help you control the allowed characters of a SwiftUI TextField. You might want to allow numbers ...
Read More
Read More
Sheets in SwiftUI explained with code examples
Sheets in SwiftUI allow you to present views that partly cover the underlying screen. You can present them using view ...
Read More
Read More
@dynamicCallable in Swift explained with code examples
It's all in the name: @dynamicCallable in Swift allows you to dynamically call methods using an alternative syntax. While it's ...
Read More
Read More
Binary Targets in Swift Package Manager
Binary Targets in Swift Package Manager (SPM) allow packages to declare xcframework bundles as available targets. The technique is often ...
Read More
Read More
Result builders in Swift explained with code examples
Result builders in Swift allow you to build up a result using 'build blocks' lined up after each other. They ...
Read More
Read More
Getting started with Unit Tests in Swift
Unit tests in programming languages ensure that written code works as expected. Given a particular input, you expect the code ...
Read More
Read More
Refactoring Swift: Best Practices to succeed
Refactoring code is part of the journey toward building sustainable apps. Whether you're experienced or not: every developer refactors their ...
Read More
Read More
Announcing the SwiftLee Talent Collective
Today I'm excited to introduce you to the SwiftLee Talent Collective — an initiative to connect engineers with exciting companies ...
Read More
Read More
Alternate App Icon Configuration in Xcode
Adding alternate app icons to your app allows users to customize their home screen with an app icon that fits ...
Read More
Read More
Never keyword in Swift: return type explained with code examples
The Never type in Swift allows you to tell the compiler about an exit point in your code. It's a ...
Read More
Read More
Side Projects: 10 Tips for being successful
It's common to have a side project as an engineer since we can build our ideas. At the same time, ...
Read More
Read More
Deadlocks in Swift explained: detecting and solving
Deadlocks in Swift can make your app hang, causing a frustrating situation for both you and your users. Your app ...
Read More
Read More
Variable WidgetBundle configuration based on conditions
The WidgetBundle protocol inside WidgetKit allows you to configure supported widgets for your apps. Whenever you add one or more ...
Read More
Read More
Accessibility in SwiftUI explained for UIKit developers
Adding accessibility support in SwiftUI will be more approachable for you compared to UIKit. But still, if you’ve been sharpening ...
Read More
Read More
VoiceOver navigation improvement tips for SwiftUI apps
VoiceOver navigation support in your apps comes with the same requirements as navigating through touch controls. When navigating apps with ...
Read More
Read More
@ViewBuilder usage explained with code examples
The @ViewBuilder attribute is one of the few result builders available for you to use in SwiftUI. You typically use ...
Read More
Read More
Faster StoreKit testing by syncing in-app purchase products
StoreKit testing in the Simulator allows you to speed up testing in-app purchases for your app. You can test in-app ...
Read More
Read More
Shared with You implementation and testing explained
iOS 16 introduced Shared with You allowing you to showcase content shared in Messages inside your app. Users can find ...
Read More
Read More
Sendable and @Sendable closures explained with code examples
Sendable and @Sendable are part of the concurrency changes that arrived in Swift 5.5 and address a challenging problem of ...
Read More
Read More
UIViewRepresentable explained to host UIView instances in SwiftUI
Adopting the UIViewRepresentable protocol allows you to host UIView instances in SwiftUI. Your SwiftUI code is converted to UIKit views ...
Read More
Read More
URLSessionConfiguration: Exploring opt-in configurations
URLSessionConfiguration can be used to initialize URLSession instances in Swift. While in most cases, you'll likely use the default configuration, ...
Read More
Read More
App Store Connect API SDK in Swift: Creating Developer Tools
The new App Store Connect API was announced during WWDC 2018 and made it possible to write applications for App ...
Read More
Read More
Generics in Swift explained with code examples
Generics in Swift allows you to write generic and reusable code, avoiding duplication. A generic type or function creates constraints ...
Read More
Read More
Existential any in Swift explained with code examples
Existential any allows you to define existential types in Swift by prefixing a type with the any keyword. In short, ...
Read More
Read More
Some keyword in Swift: Opaque types explained with code examples
The some keyword in Swift declares opaque types, and Swift 5.1 introduced it with support for opaque result types. Many ...
Read More
Read More
Using NavigationLink programmatically based on binding in SwiftUI
NavigationLink in SwiftUI allows pushing a new destination view on a navigation controller. You can use NavigationLink in a list ...
Read More
Read More
App Icon Generator is no longer needed with Xcode 14
An App Icon Generator generates all required app icon sizes based on a single-size icon input file. Creating and dragging ...
Read More
Read More
Increase App Ratings by using SKStoreReviewController
SKStoreReviewController allows asking your users for App Store ratings from within the app. Positive ratings can help your app stand ...
Read More
Read More
Markdown rendering using Text in SwiftUI
SwiftUI comes with built-in markdown support for text, making it easy to transform the text into bold, italic, and other ...
Read More
Read More
Memory leaks prevention using an autoreleasepool in unit tests
Memory leaks often happen without notice. Although best practices like using a weak reference to self inside closures help a ...
Read More
Read More
AsyncSequence explained with Code Examples
AsyncSequence is part of the concurrency framework and the SE-298 proposal. Its name implies it's a type providing asynchronous, sequential, ...
Read More
Read More
AsyncThrowingStream and AsyncStream explained with code examples
AsyncThrowingStream and AsyncStream are part of the concurrency framework introduced in Swift 5.5 due to SE-314. Async streams allow you ...
Read More
Read More
Downloading and Caching images in SwiftUI
Downloading and caching images is an essential part of building apps in Swift. There are several ways of downloading images ...
Read More
Read More
Using MetricKit to monitor user data like launch times
The MetricKit framework allows us to collect all kinds of data from our end users, including launch times and hang ...
Read More
Read More
Disable animations on a specific view in SwiftUI using transactions
Animations in SwiftUI look great and make your app shine, but sometimes you want to disable animations on a specific ...
Read More
Read More
Error alert presenting in SwiftUI simplified
Presenting error alerts in apps is essential to communicate failures to your end-users. The happy flow of apps is often ...
Read More
Read More
AnyObject, Any, and any: When to use which?
AnyObject and Any got a new option any as introduced in SE-355, making it harder for us developers to know ...
Read More
Read More
How to use the #available attribute in Swift
Marking pieces of code as available or unavailable per platform or version is required in the ever-changing landscape of app ...
Read More
Read More
@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 ...
Read More
Read More
@StateObject vs. @ObservedObject: The differences explained
The @StateObject and @ObservedObject property wrappers tell a SwiftUI view to update in response to changes from an observed object ...
Read More
Read More
How to use the Redacted View Modifier in SwiftUI with useful extensions
The redacted view modifier in SwiftUI allows us to create a so-called skeleton view while our data is loading. Using ...
Read More
Read More
Debugging SwiftUI views: what caused that change?
Debugging SwiftUI views is an essential skill to own when writing dynamic views with several redrawing triggers. Property wrappers like ...
Read More
Read More
@EnvironmentObject explained for sharing data between views in SwiftUI
@EnvironmentObject is part of the family of SwiftUI Property Wrappers that can make working with SwiftUI views a little easier ...
Read More
Read More
Self-documenting code in Swift to increase readability
Self-documenting code helps explain a piece of code to other developers on a project without the need for actual documentation ...
Read More
Read More
Tasks in Swift explained with code examples
Tasks in Swift are part of the concurrency framework introduced at WWDC 2021. A task allows us to create a ...
Read More
Read More
Guard statements in Swift explained with code examples
Guard statements in Swift allow us to implement checks into our code that prevents the current scope from continuing. When ...
Read More
Read More
Writing Swift Articles: Tips to become a better writer
Writing Swift articles is a great way to become a better engineer and is often seen as a required skill ...
Read More
Read More
Swift in 2021: A Year in Review
One of the best years for Swift is close to reaching its end. Time flies when you're having fun, and ...
Read More
Read More
Reflection in Swift: How Mirror works
Reflection in Swift allows us to use the Mirror API to inspect and manipulate arbitrary values at runtime. Even though ...
Read More
Read More
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 ...
Read More
Read More
Creating an App Update Notifier using Combine and async/await
An app update-notifier promotes a new app update to your users. Using a notifier will get better adoption rates with ...
Read More
Read More
Non-fatal errors vs fatal crashes: The differences explained
Non-fatal errors happen in every application that's developed and have a close relationship with fatal errors. Most of us know ...
Read More
Read More
Composition vs. Inheritance: code architecture solutions explained in Swift
Composition and inheritance are both fundamental programming techniques when working in object-oriented programming languages. You've likely been using both patterns ...
Read More
Read More
Property Wrappers in Swift explained with code examples
Property Wrappers in Swift allow you to extract common logic in a distinct wrapper object. This new technique appeared at ...
Read More
Read More
Async await in Swift explained with code examples
Async await is part of the new structured concurrency changes that arrived in Swift 5.5 during WWDC 2021. Concurrency in ...
Read More
Read More
Increasing development effectiveness by recognizing repetition
Development effectiveness determines how fast and efficient you can work as an engineer. The more efficient you can make your ...
Read More
Read More
Presentation tips for performing professional Swift talks
Presentation tips can help you perform professional Swift talks by making sure you're well prepared and professional-looking. Last week, I ...
Read More
Read More
Nonisolated and isolated keywords: Understanding Actor isolation
SE-313 introduced the nonisolated and isolated keywords as part of adding actor isolation control. Actors are a new way of ...
Read More
Read More
EXC_BAD_ACCESS crash error: Understanding and solving it
Building apps all goes well in the beginning. You're developing an app from scratch; it's stable and runs perfectly fine ...
Read More
Read More
Race condition vs. Data Race: the differences explained
Race conditions and data races are similar but have a few significant differences you should know. Both terms are often ...
Read More
Read More
Thread Sanitizer explained: Data Races in Swift
The Thread Sanitizer, also known as TSan, is an LLVM based tool to audit threading issues in your Swift and ...
Read More
Read More
PassthroughSubject vs. CurrentValueSubject explained
PassthroughSubject and CurrentValueSubject are two types from the Combine framework that conforms to the Subject protocol. Both are very similar ...
Read More
Read More
Picking your minimum iOS version to support
When a new iOS version arrives, it's oftentimes a moment to reflect on the supported iOS versions and see to ...
Read More
Read More
@AppStorage explained and replicated for a better alternative
The @AppStorage Property Wrapper was introduced in SwiftUI to allow easy access to the user defaults. When property wrappers were ...
Read More
Read More
How to use throwing properties to catch failures in Swift
Throwing properties allow defining computed properties that throw an error on failure. SE-310 introduced this feature in Swift 5.5 and ...
Read More
Read More
Unwrap or throw: Exploring solutions in Swift
Unwrap or throw is a scenario in which we want to throw an error if an optional returns a nil ...
Read More
Read More
Async let explained: call async functions in parallel
Async let is part of Swift's concurrency framework and allows instantiating a constant asynchronously. The concurrency framework introduced the concept ...
Read More
Read More
Development Assets in Xcode to enrich SwiftUI Previews
Development Assets in Xcode allow you to provide test data to use within SwiftUI previews and other code during development ...
Read More
Read More
Dependency Injection in Swift using latest Swift features
Dependency Injection is a software design pattern in which an object receives other instances that it depends on. It's a ...
Read More
Read More
MainActor usage in Swift explained to dispatch to the main thread
MainActor is a new attribute introduced in Swift 5.5 as a global actor providing an executor which performs its tasks ...
Read More
Read More
Actors in Swift: how to use and prevent data races
Swift Actors are new in Swift 5.5 and are part of the big concurrency changes at WWDC 2021. Before actors, ...
Read More
Read More
Flaky tests resolving using Test Repetitions in Xcode
Flaky tests can be frustrating to deal with. You're ready to open your PR until you realize your tests fail ...
Read More
Read More
Improve discoverability using Static Member Lookup in Generic Contexts
Static Member Lookup is extended to Generic Contexts since the release of SE-0299. It might seem to be a minor ...
Read More
Read More
Presenting sheets with UIKit using a UISheetPresentationController
WWDC 2021 introduced iOS 15 with many API changes, including improvements to presenting sheets in UIKit with the new UISheetPresentationController ...
Read More
Read More
WWDC 2021 Events, Parties, and Panels you don’t want to miss
WWDC 2021 is around the corner and will bring a ton of (home)work for all of us. A new Xcode, ...
Read More
Read More
Swift Jobs: How to make the right career move
Swift jobs are something we're all interested in. Companies are hiring remotely more than ever since everybody is working from ...
Read More
Read More
Fileprivate vs private in Swift: The differences explained
Fileprivate and private are part of the access control modifiers in Swift. These keywords, together with internal, public, and open, ...
Read More
Read More
URLSession: Common pitfalls with background download & upload tasks
URLSession enables you to download and upload files while the app is in the background. Basic instructions to get it ...
Read More
Read More
NSPredicate based XCTestExpectations for conditional checks
NSPredicate allows us to write predicates for validating a certain outcome. They're often used combined with Core Data fetch requests ...
Read More
Read More
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 ...
Read More
Read More
How to create a Conditional View Modifier in SwiftUI
Conditional View Modifier creation in SwiftUI allows you only to apply modifiers if a certain condition is true. Whether it's ...
Read More
Read More
Getting started with the Combine framework in Swift
Combine was introduced as a new framework by Apple at WWDC 2019. The framework provides a declarative Swift API for ...
Read More
Read More
How to test optionals in Swift with XCTest
Optionals types in Swift either have a value or not, and there are several ways to test optionals using the ...
Read More
Read More
How to use the rethrows keyword in Swift
Rethrows in Swift allows forwarding a thrown error by a given function parameter. It's used a lot in methods like ...
Read More
Read More
How to use @autoclosure in Swift to improve performance
@autoclosure in Swift is a type of closure that allows to omit braces and make it look like a normal ...
Read More
Read More
How to create a Dynamic Pager View for onboardings
A pager view in SwiftUI like we know UIPageViewController in UIKit didn't exist until iOS 14 and macOS 11.0. Using ...
Read More
Read More
How and when to use Lazy Collections in Swift
Lazy collections are similar to a regular collection but change the way how modifiers like map, filter, and reduce are ...
Read More
Read More
How to use Variadic parameters in Swift
Variadic parameters make it possible to pass zero or more values of a specific type into a function. It can ...
Read More
Read More
XCTExpectFailure: Expected test failures explained with code examples
XCTExpectFailure was introduced in Xcode 12.5 and allows marking test failures as expected. The first time I read about this ...
Read More
Read More
Lazy var in Swift explained with code examples
A lazy var is a property whose initial value is not calculated until the first time it's called. It's part ...
Read More
Read More
Closures in Swift explained with Code Examples
Closures in Swift can be challenging to understand with types like trailing closures, capturing lists, and shorthand syntaxes. They're used ...
Read More
Read More
What is a Computed Property in Swift?
Computed properties are part of a family of property types in Swift. Stored properties are the most common which save ...
Read More
Read More
SwiftLee 2020 In Review: Most read blog posts
Every year I'm looking back at what I achieved with SwiftLee as well as what I want to achieve in ...
Read More
Read More
Getting started with associated types in Swift Protocols
Associated types in Swift work closely together with protocols. You can literally see them as an associated type of a ...
Read More
Read More
Result in Swift: Getting started with Code Examples
The Result enum is available since Swift 5 and allows us to define a success and failure case. The type ...
Read More
Read More
Xcode Mark Line to improve readability using // Mark: comments
Xcode Mark Lines allows us to create a better overview of sections within our classes or structs. A so-called mark ...
Read More
Read More
App Launch Time: 7 tips to increase performance
App Launch Time is the time it takes before your app becomes responsive after startup. As the first experience of ...
Read More
Read More
Build performance analysis for speeding up Xcode builds
Build performance can be analysed in Xcode to speed up Xcode builds. This can easily speed up your workflow and ...
Read More
Read More
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 ...
Read More
Read More
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 ...
Read More
Read More
Constraints in Core Data Entities explained
Constraints in Core Data are part of an entity configuration. Settings like the entity name and Spotlight display name might ...
Read More
Read More
NSManagedObject events: handling state in Core Data
An NSManagedObject lifecycle goes from insertion and updates until deletion in the end. All those events come with their own ...
Read More
Read More
Try Catch Throw: Error Handling in Swift with Code Examples
Try catch in Swift combined with throwing errors make it possible to nicely handle any failures in your code. A ...
Read More
Read More
Overriding UserDefaults for improved productivity
UserDefaults within apps are used to store data related to user configurations. It's an easily accessible data store for saving ...
Read More
Read More
How-to use Diffable Data Sources with Core Data
Diffable Data Sources were introduced at WWDC 2019 as a replacement for UICollectionViewDataSource and UITableViewDataSource. The API is available on ...
Read More
Read More
Diffable Data Sources Adoption with Ease
Diffable Data Sources were introduced at WWDC 2019 and are available since iOS 13. They're a replacement of the good ...
Read More
Read More
Persistent History Tracking in Core Data
WWDC 2017 introduced a new concept available from iOS 11 which is persistent history tracking. It's Apple's answer for merging ...
Read More
Read More
withAnimation completion callback with animatable modifiers
SwiftUI is great when it comes down to animations as it does a lot for you with methods like withAnimation ...
Read More
Read More
Write-Ahead Logging (WAL) disabled to force commits in Core Data
Write-Ahead Logging is the default journaling mode for Core Data SQLite stores since iOS 7 and OS X Mavericks. Journaling ...
Read More
Read More
How to combine text weights in SwiftUI
Combining multiple text weights in SwiftUI might not look straight forward at first. If you're used to using UIKit you ...
Read More
Read More
Adding a closure as a target to UIButton and other controls in Swift
The target-action pattern is used in combination with user interface controls as a callback to a user event. Whenever a ...
Read More
Read More
Launch screens in Xcode: All the options explained
Launch screens appear when your app starts up and give the user the impression that your app is fast and ...
Read More
Read More
OSLog and Unified logging as recommended by Apple
OSLog as a replacement of print and NSLog is the recommended way of logging by Apple. It's a bit harder ...
Read More
Read More
ValueTransformer in Core Data explained: Storing absolute URLs
ValueTransformers in Core Data are a powerful way of transforming values before they get inserted into the database and before ...
Read More
Read More
Full-screen development with Xcode and the Simulator
While developing apps it's important to create focus to get in your flow and speed up development. Full-screen mode can ...
Read More
Read More
SVG Assets in Xcode for Single Scale Images
Xcode 12 introduced support for using Scalable Vector Graphic (SVG) image assets in iOS, macOS, and iPadOS. It's one of ...
Read More
Read More
SF Symbols: The benefits and how to use them guide
SF Symbols were introduced during WWDC 2019 and are a big present for us developers. Apple basically gave us free ...
Read More
Read More
WWDC 2020: 7 Tips to prepare yourself
In less than a week we will know what WWDC 2020 has brought to us. Apple has been working hard ...
Read More
Read More
@discardableResult in Swift explained: Ignoring return values
While writing methods in Swift you're often running into scenarios in which you sometimes want to ignore the return value ...
Read More
Read More
Core Data Performance: 6 tips you should know
Writing Core Data code with performance in mind helps to prepare your app for the future. Your database might be ...
Read More
Read More
Introducing GitBuddy: Changelog and Release manager for GitHub
It's been a few months since we released the initial version of GitBuddy but it's the right time now to ...
Read More
Read More
Expressible literals in Swift explained by 3 useful examples
Expressible literals allow you to initialize types by making use of literals. There are multiple protocols available in the Swift ...
Read More
Read More
String Interpolation in Swift explained using 4 useful cases
Swift 5 introduced a decent version of string interpolation with SE-228 and updated the old version of the ExpressibleByStringInterpolation protocol ...
Read More
Read More
Using Custom debug descriptions to improve debugging
Custom debug descriptions can help you debug your own custom objects, structs, errors, and other types. Whenever you print out ...
Read More
Read More
URLs in Swift: Common scenarios explained in-depth
URLs are everywhere in an app we built. We reference local files using bundle paths, we fetch data from a ...
Read More
Read More
SwiftUI Previews: Validating views in different states
SwiftUI Previews allow us to develop a lot faster as we can now preview our views live in Xcode. Whenever ...
Read More
Read More
Custom Operators in Swift with practical code examples
Custom operators in Swift can make your code easier to read and simpler to maintain. Code can be written less ...
Read More
Read More
Custom subscripts in Swift explained with code examples
Custom subscripts in Swift allow you to write shortcuts to elements from collections or sequences and can be defined within ...
Read More
Read More
NSFetchedResultsController extension to observe relationship changes
Apple provides us with great classes like the NSFetchedResultsController to interact with Core Data databases in our apps. The API ...
Read More
Read More
Testing private methods and variables in Swift
Testing private methods and variables is often something we run into when writing tests for our applications. You could think ...
Read More
Read More
How to mock Alamofire and URLSession requests in Swift
Mocking data requests that are triggered by either Alamofire or URLSession is something we all run into when we start ...
Read More
Read More
Creating a command line tool using the Swift Package Manager
A command-line tool can be very useful for automating common tasks to boost developer productivity. While developing iOS applications we ...
Read More
Read More
Authentication with signed requests in Alamofire 5
With more than 30k stars on Github, you can tell that Alamofire is a popular framework to use for iOS ...
Read More
Read More
Testing push notifications on the iOS simulator
Testing push notifications in the iOS simulator make it a lot easier to add support for remote notifications. You often ...
Read More
Read More
Swift Package Manager framework creation in Xcode
Swift Package Manager is Apple's answer for managing dependencies. We're all familiar with tools like CocoaPods and Carthage but it's ...
Read More
Read More
Unique values in Swift: Removing duplicates from an array
Removing duplicates to get unique values out of an array can be a common task to perform. Languages like Ruby ...
Read More
Read More
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 ...
Read More
Read More
Ranges in Swift explained with code examples
Ranges in Swift allow us to select parts of Strings, collections, and other types. They're the Swift variant of NSRange ...
Read More
Read More
SwiftLee 2019 in review: Top Swift Development blog posts
You know it's been a great year if you have the feeling that it went really fast. After looking back ...
Read More
Read More
No space left on device: Testing low storage scenarios
No space left on device is an error message that starts to show up more lately. Over the years, storage ...
Read More
Read More
4 Tips to make it easier to fix crashes and bugs
Each app comes with performance issues, crashes, and bugs to fix. Although we try our very best we will always ...
Read More
Read More
Advanced asynchronous operations by making use of generics
Asynchronous operations allow you to write long-running tasks in a distinct matter while being able to add dependencies between several ...
Read More
Read More
Asynchronous operations for writing concurrent solutions in Swift
Asynchronous operations allow executing long-running tasks without having to block the calling thread until the execution completes. It's a great ...
Read More
Read More
Getting started with Operations and OperationQueues in Swift
Operations in Swift are a powerful way to separate responsibilities over several classes while keeping track of progress and dependencies ...
Read More
Read More
Concurrent vs Serial DispatchQueue: Concurrency in Swift explained
Concurrent and Serial queues help us to manage how we execute tasks and help to make our applications run faster, ...
Read More
Read More
Dark Mode: Adding support to your app in Swift
Dark Mode was introduced in iOS 13 and announced at WWDC 2019. It adds a darker theme to iOS and ...
Read More
Read More
Core Data and App extensions: Sharing a single database
Core Data got better and better over the years with improved APIs that make it easier to work with. The ...
Read More
Read More
Auto Layout in Swift: Writing constraints programmatically
Auto Layout constraints allow us to create views that dynamically adjust to different size classes and positions. The constraints will ...
Read More
Read More
Optionals in Swift explained: 5 things you should know
Optionals are in the core of Swift and exist since the first version of Swift. An optional value allows us ...
Read More
Read More
Mastering the assistant editor in Xcode 11
Xcode 11 was introduced during WWDC 2019 and contained improvements in the way the assistant editor works. If you're using ...
Read More
Read More
5 Xcode breakpoints tips you might not yet know
Xcode breakpoints allow us to debug and find out solutions for nasty bugs. Without breakpoints, it would be a fun ...
Read More
Read More
Rich notifications on iOS explained in Swift
Rich notifications on iOS allow us to make the boring default notification just a little nicer by adding images, GIFs, ...
Read More
Read More
Struct vs classes in Swift: The differences explained
Swift brings us classes and structs which both can look quite similar. When should you use a struct and when ...
Read More
Read More
Xcode Instruments usage to improve app performance
Xcode Instruments is a developer tool that comes for free with Xcode. It has a lot of useful tools to ...
Read More
Read More
Error handling in Combine explained with code examples
Once you get started with Combine you'll quickly run into error handling issues. Each Combine stream receives either a value ...
Read More
Read More
Array vs Set: Fundamentals in Swift explained
An Array and a Set seem to be quite the same in the beginning. They're both collection types and have ...
Read More
Read More
Xcode refactoring options explained with examples
A brand new Xcode refactoring engine was introduced in Xcode 9. Although this is quite a few Xcode versions ago ...
Read More
Read More
Unused images and resources clean up in Xcode
Unused images can exist as a result of iterations in a project. Once a feature is no longer needed and ...
Read More
Read More
UIKeyCommand how-to add keyboard shortcuts & speed up your workflow
The UIKeyCommand class allows you to add keyboard shortcuts to your app. Although they might seem useful for iPad only, ...
Read More
Read More
Combine debugging using operators in Swift
Combine debugging can be hard with long stack traces which don't help at all. Asynchronous callbacks follow up on each ...
Read More
Read More
Creating a custom Combine Publisher to extend UIKit
A Custom Combine Publisher can add missing functionalities to UIKit elements you use every day. A lot of boilerplate code ...
Read More
Read More
Using Xcode Previews with existing UIKit views without using SwiftUI
Xcode Previews have been added in Xcode 11 and allow you to quickly preview the current state of your view ...
Read More
Read More
Dynamic Member Lookup combined with key paths in Swift
Dynamic member lookup has been introduced in Swift 4.2 with SE-195 and already allowed some pretty nice solutions to for ...
Read More
Read More
Using NSBatchDeleteRequest to delete batches in Core Data
An NSBatchDeleteRequest can be used to efficiently delete a batch of entries from a Core Data SQLite persistent store. It ...
Read More
Read More
Weak self and unowned self explained in Swift
Weak self and unowned self in Swift for many of us are hard to understand. Although Automatic Reference Counting (ARC) ...
Read More
Read More
Typealias usage in Swift
A typealias in Swift is literally an alias for an existing type. Simple, isn't it? They can be useful in ...
Read More
Read More
Developer productivity boost with Google Search Tips & Tricks
Developer productivity is important to deliver your project on time. There's a lot you can do as I already described ...
Read More
Read More
@unknown default usage with enums in Swift
@unknown default has been introduced in Swift 5 with SE-0192. It's a new addition to the way we can work ...
Read More
Read More
Swift 5.0: How to migrate your project and frameworks
Swift 5.0 has been released in March 2019 and is the first ABI stable Swift release. Although a lot of ...
Read More
Read More
WWDC First timer tips: How to get the most out of it
WWDC first timer tips help you to get the most out of Apple's World Wide Developer Conference. This conference takes place ...
Read More
Read More
Blog about Swift: Tips and ideas to start your own
How to start your own Swift blog? It's a question I get asked more and more. I've given some tips ...
Read More
Read More
Unused localized strings clean up from a Strings file
Strings files are used for localization in iOS and MacOS apps. These files can grow over time and make it ...
Read More
Read More
Required keyword usage in Swift classes and structs
The required keyword in Swift can be used in front of initializers in Swift. Its usage is simple and it's ...
Read More
Read More
Speeding up development: a collection of tips
Speeding up development to increase productivity can bring you a lot. You'll work more efficient, deliver faster, and you'll feel ...
Read More
Read More
Danger plugins to speed up code reviews
Danger plugins can help improve something we do every day: code reviews. Code reviews inside pull requests help you to ...
Read More
Read More
Alamofire vs URLSession: a comparison for networking in Swift
Alamofire and URLSession both help you to make network requests in Swift. The URLSession API is part of the foundation ...
Read More
Read More
How to use for loop, for each, while, and repeat in Swift (in-depth)
For loop, for each, and repeat are examples of control flow statements in Swift. Although most of them look similar, ...
Read More
Read More
QR Code generation with a custom logo and color using Swift
A QR Code is used a lot to share content or to add a new user in apps like Twitter ...
Read More
Read More
Cheat sheet examples for Xcode and Swift development
A cheat sheet can be a handy tool to quickly reference Xcode, Swift or iOS logic from a compact overview ...
Read More
Read More
SwiftLee 2018 in review: Top Swift Development blog posts
With 2019 coming closer it's time to review SwiftLee in 2018 and list the top swift development blog posts of ...
Read More
Read More
Implementing Siri support using NSUserActivity, intents and shortcuts
Siri support can be added using an Intent and an IntentUI extension. This adds quite some overhead and is not ...
Read More
Read More
Speeding up with Xcode Behaviors
Xcode behaviors can change the way how Xcode responds to certain events. Default behaviors help you already by showing for ...
Read More
Read More
Shortcuts essentials in Xcode to speed up your workflow
Making use of essential shortcuts in Xcode can speed up development and keep you in your flow. Xcode allows you ...
Read More
Read More
Measure the performance of code in Swift
It's important in any type of programming language to know how to measure the performance of code as there are ...
Read More
Read More
Performance, functional programming and collections in Swift
Functional programming is often done in Swift and so easy that it could easily hit performance. Iterating over large collections ...
Read More
Read More
SwiftLint valuable opt-in rules to improve your code
SwiftLint is a tool by Realm to enforce Swift style and conventions. It's proven to be adopted by a lot ...
Read More
Read More
Updating to Swift 4.2
Swift 4.2 is a major release and shipped with Xcode 10. It comes with a lot of code improvements for ...
Read More
Read More
Command-click on code options and possibilities in Xcode
Command-click no longer jumps to definition by default since Xcode 9 is introduced. It opens up a handy menu instead ...
Read More
Read More
Defer usage in Swift
Although the defer keyword was already introduced in Swift 2.0, it's still quite uncommon to use it in projects. Its ...
Read More
Read More
CompactMap vs flatMap: The differences explained
CompactMap and flatMap, what are the differences and when do you use each? Swift 4.1 introduced this new method with ...
Read More
Read More
Effective development by improving the daily routine as a developer
Effective development can be achieved by learning more skills, but also by improving the daily routine for you as a ...
Read More
Read More
Compiler Diagnostic Directives using a hashtag in Swift
The Swift standard library brings quite some compiler diagnostic directives by default. Although this might not ring a bell at ...
Read More
Read More
Where usage in Swift
Where is a powerful keyword within Swift to easily filter out values. It can be used in many different variants ...
Read More
Read More
Debugging breakpoints as a replacement for prints
Debugging breakpoints in Xcode allows you to replace prints and reuse debugging statements in future debugging sessions. By simply enabling ...
Read More
Read More
Typed notifications using custom extensions
The Swift API contains a lot of notifications sent out by the system like NSManagedObjectContextObjectsDidChange in Core Data or the ...
Read More
Read More
Using the Network Link Conditioner Utility (how-to)
The Network Link Conditioner on iOS and macOS enables you to test your app in networking conditions like your users ...
Read More
Read More
Core Data Debugging in Xcode using launch arguments
Core Data is Apple’s object graph management and persistency framework for iOS, macOS, watchOS, and tvOS. It's around for a ...
Read More
Read More
Using Xcode custom file templates with GIT
Xcode custom file templates are a great way to develop just a bit faster and enable you to define a ...
Read More
Read More
Useful less known Xcode tips to improve your workflow
Xcode is the main IDE for developing software for macOS, iOS, watchOS, and tvOS. It contains a lot of well-known ...
Read More
Read More
App Store Optimization for your App Store Page
App Store Optimization can help people discover your app on the App Store for iPhone and iPad. With some useful ...
Read More
Read More
Enabling newly added opt-in features in Xcode 10
During WWDC 2018 Apple announced Xcode 10 with a lot of new features. Many of them are available for you ...
Read More
Read More
Printing data requests using a custom URLProtocol
Almost all apps contain some kind of data requests. Printing data requests could sometimes be handy for debugging purposes. This ...
Read More
Read More
Controlling Progress children by adding remove
Controlling Progress children by default makes it only easy to add children to a Progress instance, but removing is not ...
Read More
Read More
Share Extension UI Tests written in Swift
UI Tests are a great tool to validate your application. It is easy to create them for your main application, ...
Read More
Read More
Fixing crashes with Firebase Crashlytics
Using Firebase Crashlytics can help you to solve your crashes faster. In this example we're going to dive into a ...
Read More
Read More
Capture iOS simulator video for App Preview
Creating an app preview video can be really easy using the simulator in just a few steps. Capturing an iOS ...
Read More
Read More
Symbolicate crashlogs with Xcode 9 and Bitcode
You can symbolicate a crash log with Xcode 9 fairly easy. Even with bitcode, which give you multiple DSYM files ...
Read More
Read More
Updating to Swift 4.1
Swift 4.1 is released on the 29th of March and will be shipped with Xcode 9.3. Although it's a minor ...
Read More
Read More
How to get iOS reviews with 4+ stars for your app
Last May the new Buienradar app went live. With over 2 million users each month, it's one of the biggest ...
Read More
Read More
Optional protocol methods in Swift
In Swift it's kind of unsupported to implemented optional protocol methods. You can, which is ugly, use the @objc syntax: ...
Read More
Read More
WWDC First timers tips collection top 10
Again, I'm very happy to be one of the few developers to visit WWDC this year. I'm a first timer ...
Read More
Read More
The start of a new blog
Hi there! After thinking a lot of starting my own blog, I've finally made the decision to create one! As ...
Read More
Read More