Give your simulator superpowers

RocketSim: An Essential Developer Tool
as recommended by Apple

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 code to improve its quality or readability. A refactor can be small enough to make you do it unconsciously, while bigger ones can become intimidating. I’ve been developing apps for over 10+ years in which … 

 

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. One of the most frequently asked questions I get relates to how to find a new job or how to make the next career step. I wrote about Swift Jobs: How to make the right … 

 

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 their style. An alternative icon could be a dark or light-mode version of the original icon or a collection of completely different styles. iOS 10.3 was the first version to support alternative icons. In the … 

 

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 type with no values that prevents writing unuseful code by creating dead ends. While the type Never on its own might be a little unknown, you might have been using it already in your codebase. … 

 

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, it’s also trending to start a new project before you’ve finished the previous one. You could say there’s a graveyard of many side projects that didn’t reach the public. While I’m a full-time employee at … 

 

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 becomes unresponsive, and you can often only solve it by restarting the app. While features like actors reduce the number of deadlocks you’ll run into, there’s still a high chance of experiencing deadlocks. Deadlocks can … 

 

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 widgets, you’ll have to add a @main struct conforming to this protocol. Like SwiftUI views, you’ll return the supported widgets inside the body computed property. You’ll not have issues with a consistent set of supported … 

 

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 your UIKit skills for years, it takes a while to get your head around the new declarative/reactive way of doing things. It is an entirely different mental model, and it takes some getting used to. … 

 

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 standard touch controls, we tend to dislike apps that feel cluttered or make us do many interactions to achieve something. We’d probably say such an app does not offer a good user experience. The same … 

 

@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 it to create child views for a specific SwiftUI view in a readable way without having to use any return keywords. I encourage you to read my article Result builders in Swift explained with code …