When examining the iOS 15.2 simulators in Xcode 13.2 beta 1, I noticed that there had been a few changes to SF Symbols since iOS 15.0. After testing on real devices I discovered that these had been added in iOS 15.1. There was no Xcode release that included an iOS 15.1 simulator, so I hadn’t noticed the change until iOS 15.2.
There are now six 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 available in iOS/iPadOS/tvOS/Mac Catalyst 14.0, watchOS 7.0 and macOS 11.0
- SF Symbols v2.1 available in iOS/iPadOS/tvOS/Mac Catalyst 14.2, watchOS 7.1 and macOS 11.0
- SF Symbols v2.2 available in iOS/iPadOS/tvOS/Mac Catalyst 14.5, watchOS 7.4 and macOS 11.3
- SF Symbols v3.0 available in iOS/iPadOS/tvOS/Mac Catalyst 15.1, watchOS 8.0 and macOS 12.0
- SF Symbols v3.1 available in iOS/iPadOS/tvOS 15.1, Mac Catalyst 15.0, watchOS 8.1 and macOS 12.0
An app can only use symbol names that are supported by the OS version it is running on. Symbols that were renamed are still available using their earlier names for backwards compatibility. However, Jiang Jiang (who appears to work at Apple) mentioned on Twitter that:
It is worth noticing that while aliased (old) names continue to work it is definitely better to migrate to the up-to-date names for performance reasons.
The minimum iOS deployment version of your app will determine which symbols you can use and whether you must keep using the older names (or use runtime availability checks to use the new names on later versions). In my testing, a Mac Catalyst app running on macOS 12.0.1 does not pass a runtime availability check for iOS 15.1, but it does support the new symbols.
At the time of writing, the latest version of Apple’s own SF Symbols Mac app is v3.0 (build 60) and has not been updated to include these latest changes. EDIT: v3.0 (build 63) was released around November 12th 2021.
My own Adaptivity app is a tool for iOS developers and designers, and one of its many features is a very comprehensive view to browse SF Symbols. It can view any of the SF Symbol data sets that your device supports. The screenshots in this article were taken from Adaptivity v8.2 and demonstrate the symbol changes in iOS 15.1.
For a detailed list of symbols that were added or renamed in earlier iOS versions, see my previous articles:
- SF Symbols Changes in iOS 14.0 (SF Symbols 2.0)
- SF Symbols Changes in iOS 14.2 (SF Symbols 2.1)
- SF Symbols Changes in iOS 14.5 (SF Symbols 2.2)
- SF Symbols Changes in iOS 15.0 (SF Symbols 3.0)
Changes in SF Symbols 3.1
There are relatively few changes this time:
- New symbols 11 new symbols, but 2 are (supposedly) right-to-left localizations of existing symbols
- Renamed symbols 2 symbols have been renamed
- Hierarchical / Palette rendering 9 new symbols support the hierarchical and palette render modes. 2 existing symbols with incorrect layers have been fixed
- Localized variants 4 symbols are named to suggest that they support right-to-left localizations, but 2 of them don’t actually change appearance
There are no changes to multicolor or restricted symbols.
There are 11 new symbols in iOS 15.1:
Adaptivity’s ‘Availability’ annotation (selected from the Info icon in the bottom right) adds a small
15.1+ annotation to symbols which are new in iOS 15.1. To make it easier to see which symbols are not supported in iOS 13, there is no annotation shown for symbols that were available in iOS 13 (unless they were renamed since; see below for more information).
Adaptivity also has a custom ‘Added’ collection which shows all the symbols that have been added in the data set you are viewing:
Two symbols have been renamed:
text.justifyleft is now
text.justifyright is now
Adaptivity makes it easy to see renamed symbols. When the ‘Availability’ annotation is enabled, a list of iOS versions is shown for symbols that have been renamed since they were first added. The information shown in the context menu includes previous names when this annotation is enabled.
Adaptivity also has a custom ‘Renamed’ collection which shows all the symbols that have been renamed in the data set you are viewing. For the iOS 15.1 data set, that contains just two symbols:
Hierarchical and Palette Symbols
The screenshot above in the “Added Symbols” sections shows the 9 new symbols which support hierarchical and palette render modes.
In iOS 15.0, I discovered two symbols with incorrect layer assignments that led to an inconsistent appearance in hierarchical and palette render modes compared with similarly-named symbols:
These have been fixed in iOS 15.1:
Apple’s naming conventions use words such as
backward for symbols that have right-to-left localized variants. In general (but not always), symbols with words such as
right do not change. There are many symbols which come with both fixed left/right and localized leading/trailing versions.
Adaptivity has an optional right-to-left annotation (⇄) to identify symbols that have right-to-left localizations. There is a custom ‘Right-to-Left Localized’ collection to make them easy to find. Adaptivity can also show the image variants for right-to-left and language localizations.
square.3.layers.3d.down.backward symbols are flipped in right-to-left variants:
text.justify.trailing symbols are named to suggest they ought to change appearance (especially since there are
text.justify.right symbols that do not change). However, in my testing, they do not change appearance:
This is seen more clearly using Adaptivity’s list view (so the full symbol names are visible) and the Force Right-to-Left option in the Settings screen. This flips the entire user interface in the same way as the Right-to-Left Pseudolanguage option that can be configured in Xcode’s scheme settings when running your own app:
Note how the
backward versions of
square.3.layers.3d.down change in right-to-left so that the
forward symbol is the same as the
left symbol and the
backward symbol is the same as the
right symbol. The
trailing versions of
text.justify do not change.
EDIT: Apple’s SF Symbols Mac app v3.1 (build 63) does not mark these symbols as having right-to-left variants. I still suspect this is a bug, but at least the app is consistent with observed behaviour.
Adaptivity has many other features in addition to browsing SF Symbols. It is primarily a tool to visualize the different window sizes, layout margins, readable content guides, bar heights and Dynamic Type sizes that a modern, adaptive, iOS app uses when running on different devices and iPad multitasking sizes. There are also views for browsing System Colors, System Fonts and System Materials, and a view for exploring iPadOS Pointer Interactions. In iOS/iPadOS 15 you can also configure
UISheetPresentationController options for modally-presented view controllers.
The app is a universal purchase and includes the Mac Catalyst version. On macOS 11 and later, this is “optimised for Mac” with native controls and does not scale content. If you are an iOS developer or designer, I’m sure you will find Adaptivity very useful. Testimonials, more screenshots and information on all the features is available on my web site.
Other Articles That You Might Like
I have written articles on How iPad Apps Adapt to the New 8.3" iPad Mini, How iOS Apps Adapt to the various iPhone 12 Screen Sizes, Bringing Adaptivity to Mac Catalyst, How to Switch Your iOS App and Scene Delegates for Improved Testing and the View Controller Presentation Changes in iOS 13.
The search algorithm used in Adaptivity’s System Colors and System Images views is described in A Simple, Smart Search Algorithm for iOS in Swift. I have also written about Working with Multiple Versions of Xcode and how to Hide Sensitive Information in the iOS App Switcher Snapshot Image.
If you found any of these articles helpful then please take a look at my apps in the iOS App Store to see if there’s anything that you’d like to download (especially the paid ones 😀).
If you work with a lot of Xcode projects you might like my Mac Menu Bar utility XcLauncher. It’s like having browser bookmarks for your favorite Xcode projects, workspaces, playgrounds, and Swift packages. There is more information on my website about XcLauncher’s features.