This article describes a simple, smart search algorithm that I have used in several iOS apps. The algorithm is smarter than a trivial substring match but not as complex as something like Xcode’s fuzzy matching of method names. It doesn’t understand English or alternate word forms. It’s smart, but simple!

If the data to be searched in your app is representable as a list of one or more words, the algorithm might be a good way to allow its users to quickly find relevant matches when searching.

Sample Project

The simplest way to describe the features of the algorithm and see it…


For a detailed list of symbols that were added or renamed in SF Symbols 2, please refer to my earlier article SF Symbols Changes in iOS 14.

On November 21st 2020, Mike Stern (Platform Experience and Design Evangelism Manager at Apple) announced on Twitter that Apple’s SF Symbols Mac app had been updated to version 2.1:

SF Symbols 2.1 is out. Over 40 new symbols, improved symbol localization, design refinements, and various software fixes.

There are now three different sets of symbols to consider:

  • SF Symbols v1.1 available in iOS/iPadOS/tvOS/Mac Catalyst 13.0, watchOS 6.0 and macOS 11.0
  • SF Symbols v2.0

Over the last few years I have written several articles showing how iOS apps built with different versions of Xcode would appear when run on iOS devices that didn’t exist when the apps were built. As a general rule, apps must build with the latest version of Xcode to opt in to seeing the native screen resolutions of new devices. Older apps would run on newer devices but appeared as letterboxed, pillar boxed and/or scaled versions of previous device sizes. This ensured that the old apps never ran at screen resolutions that didn’t exist when they were built.



In WWDC 2019: 206, Introducing SF Symbols Apple announced a great new resource for iOS developers:

SF Symbols introduces a comprehensive library of vector-based symbols that you can incorporate into your app to simplify the layout of user interface elements through automatic alignment with surrounding text, and support for multiple weights and sizes.

By the time iOS 13 was released there were 1,672 symbols available for developers to use in their own apps. However, 59 of them are restricted and can only be used to refer to particular Apple technologies such as iCloud or the Messages app.

There are a…


Adaptivity is an app which helps developers and designers visualise how iOS’s Size Classes and margins for layout, readable content and the safe area look on real devices and how they change with respect to orientation, iPad Slide Over/Split View and Dynamic Type size changes.

In the full paid version of the app, Adaptivity (A), there are also screens to explore System Colors, System Images, System Materials and Table Views. On iPadOS 13, this version supports multiple windows. Adaptivity (B) is a free, feature-limited, version.


Some apps store personal or sensitive information. For example, my Medical ID Record app stores a comprehensive record of your medical information. This is very private information which the user does not want to be accidentally seen by other people.

One way in which the data could be exposed is in the snapshot images that iOS shows in the App Switcher. Medical ID Record protects against this by showing a privacy protection view on top of its main interface when the app moves into the background. This alternate view is what iOS snapshots and shows in the App Switcher:

Image for post
Image for post


By default, when Xcode runs unit tests it uses your main app target as a host application and effectively injects your test code into your app at run time. This makes it easy for your unit tests to refer to types and methods that are defined in your app. A side effect of this process is that every time you run your unit tests, the host application will execute its usual startup sequence, invoking the various app delegate methods and building the initial user interface (either in code or creating it from a storyboard).

That setup should not be necessary…

This is the latest in a series of articles explaining how iOS and Watch apps appear when run on hardware that didn’t exist when they were designed and built. Previous articles focused on the iPhone X, iPhone XS Max & XR, Series 4 Apple Watch, and 11" and 3rd generation 12.9" iPad Pro:


At the time of writing, WWDC 2019 is drawing to a close. Like many iOS developers I’m slowly processing all the new information that Apple threw at us and will be trying to watch as many videos as I can in the coming weeks (and months!)

I have three immediate goals for my own apps:

  1. Do my current apps run without issues on iOS 13? Apple have a long history of backward compatibility based upon the version of Xcode the app was built with. History suggests that Xcode 10-built apps run on iOS 13 will behave as if they were…


At the time of writing Xcode 10.2 has just been released. I was working through all the latest iOS 12.2 devices to run Dave Verwer’s excellent SimulatorStatusMagic app to clean up the status bars, ready for taking new App Store screenshots, when I noticed something strange.

In its device chooser menu, Xcode usually shows version numbers alongside each device simulator that is available for multiple iOS versions. The exact choices listed depends on which simulator versions you’ve downloaded in the past and the minimum deployment target for your current project:

Image for post
Image for post
Some of the Xcode 10.2 simulators available showing different iOS versions

The Problem

When I got as far as the iPhone Xs I…

Geoff Hackworth

Independent and freelance software developer for iPhone, iPad and Mac

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store