Recent Articles

  1. Bringing Structure to Swift's Unstructured Concurrency for Reliable Unit Testing
  2. 19 Dec

    Modern app development often requires asynchronous tasks to be triggered, executed in the background, then responded to once the asynchronous task has completed. While async/await has made this a far simpler process in structured environments, sometimes asynchronous jobs have to be handled in an unstructured way via Apple's Task {} API. This interface represents a convenient way to spawn tasks when we do not wish to block the current execution context waiting for the results. However, usage of this API can represent a challenge when trying to unit test our app, resulting in code that is difficult or impossible to test reliably. In this article we will explore ways to banish this unreliability forever by bringing structure to our use of Swift's unstructured concurrency. Read more…

  3. Fixing UINavigation​Controller Push Animation Layout Issues on iOS 26
  4. 1 Sep

    Building apps that adapt gracefully across size classes and devices has for some time relied on UISplitViewController. However, in certain configurations on iOS 26, this can lead to undesirable animations when views are initially laid out when a view controller is pushed on to a navigation stack. In this article, we will discuss the root cause of the issue and how to resolve it. Read more…

  5. Simplifying String Catalog Workflows with Localizr
  6. 19 Mar

    Modern application development almost invariably involves working with localisation to make an app accessible to as many users as possible. Since 2023, Apple-platform developers have had String Catalogs to manage this process with all languages centralised in a single document. Whilst String Catalogs represent a huge improvement over the previous method of dealing with separate strings and stringsdict files for each language, they can be difficult to work with when dealing with strings that vary by pluralisation or device. This is just one of the areas that Localizr addresses to make your localisation workflow a more pleasant and productive experience. Read more…

See all of my articles.