Swift 6 turns data-race checks from “nice to have” into “this won’t compile.” If your app is split across many internal frameworks, the smoothest path is incremental: surface Swift 6…
When writing automated tests, it is important to prevent retain cycles. A retain cycle occurs when two objects have a strong reference to each other. This can happen when an…
In the realm of engineering, where technical prowess often takes center stage, we sometimes overlook the human element behind the achievements. The journey to becoming a truly great engineer is…
Disagreements happen a lot in software engineering. That’s because everyone has their own ideas on how to solve problems, and let’s be honest, we engineers have strong opinions. But here’s…
We all hear about SOLID principles, but what does SOLID actually mean in the trenches of real-life iOS app development? Why should these five letters matter to you? If you’ve…
Geometry Reader GeometryReader in SwiftUI by definition is a container view that provides access to the size and coordinate space of its view. But there should be some parent view…
PhotoKit and PhotosUI are at the heart of iOS photo management, providing unparalleled access to, display of, and interaction with photo assets. These frameworks are indispensable for anyone aiming to…
When it comes to iOS testing, automation tools are often a topic of heated debate among developers. Yet, stepping away from the technical back-and-forth, it’s the business perspective that frequently…
Using Core Data In-Memory Store An in-memory Core Data store operates directly within the app’s memory (RAM), providing a swift and efficient way to access and manage data. As the…
Parallelizing test execution & Randomizing Order If you ever encounter performance issues with your tests (e.g., large test suite), try executing the tests in parallel as it could help to…
When it comes to testing, end-to-end tests may not provide immediate feedback compared to unit tests. However, by incorporating a solution that runs both unit and end-to-end tests through an…
Data Races Data races in concurrent programming occur when multiple threads access the same memory location without proper synchronization, leading to unpredictable program behavior and potential memory corruption. In Swift,…
Both throttle and debounce are operators that can be used for handling rapid changes or updates in values. However, they differ in how they handle the timing of emitting values.…
“Image Flickering” or “Cell Reuse Bug,” occurs when you scroll a UITableView or UICollectionView rapidly, and you see the image from one cell appearing in another cell that should display…
When it comes to testing modules in integration, it’s beneficial to use end-to-end tests. However, it’s not practical or realistic to use end-to-end tests when testing individual modules. Let’s imagine…
When developing mobile apps, it’s important to find a balance between solving current issues and preparing for future changes. This balance involves designing the system in a way that can…
Let’s say you have two services: a remote service that fetches data from a server, and a local service that retrieves data from local storage. In this scenario, the goal…
Understanding Swift Performance Understand the implementation to understand performance Dimensions of Performance If we want to write fast Swift code, we’re going to need to avoid paying for dynamism and…
Reflection: Is a form of meta programming that allows you to extract information from data structure in runtime. Swift’s version of reflection enables us to iterate over, and read the…
Hope you’ll enjoy Swifty Posts!