Swift was introduced a couple of years ago at Apple’s 2014 WWDC. Over the years I analyzed iOS to measure how many built-in applications were using Swift. iOS 9 released in 2015 included a single application written with Swift: Calculator. Since then this number has grown with each iOS release: iOS 10.1, iOS 11.1, iOS 12.0 and finally iOS 13.1.
iOS 14 is now available so let’s check how this number evolved since iOS 13. Apple announced SwiftUI during WWDC 2019, a year ago. In this article I will also try to measure which built-in apps are using this new UI framework.
- Easily preview Mermaid diagrams
- Live update when editing in your preferred editor
- Capture screenshots with customizable margins
- Create PNG from the Terminal
- Free download on the Mac App Store
Methodology
The methodology and tools used for this article have been detailed in the previous posts. If you are interested, please refer to Apple’s use of Swift in iOS 10.1 and macOS 10.12.
Later in this article, I describe how I adjusted the tools to detect SwiftUI.
Apple’s use of Swift in iOS 14
iOS 14.0 contains 351 binaries and frameworks using Swift. Note that these binaries might contain a single line of Swift code and are not necessarily entirely written in Swift. This list has been built using iOS 14.0 (18A373) for iPhone 11 Pro Max:
/Applications/ActivityMessagesApp.app/PlugIns/ActivityMessagesExtension.appex/ActivityMessagesExtension
/Applications/AppStore.app/AppStore
/Applications/AppStore.app/PlugIns/ProductPageExtension.appex/ProductPageExtension
/Applications/AppStore.app/PlugIns/SubscribePageExtension.appex/SubscribePageExtension
/Applications/BusinessExtensionsWrapper.app/PlugIns/Business.appex/Business
/Applications/Diagnostics.app/Diagnostics
/Applications/FindMy.app/FindMy
/Applications/FindMy.app/PlugIns/FindMyNotificationsContent.appex/FindMyNotificationsContent
/Applications/FindMy.app/PlugIns/FindMyNotificationsService.appex/FindMyNotificationsService
/Applications/FindMy.app/PlugIns/FindMySiriIntents.appex/FindMySiriIntents
/Applications/FTMInternal-4.app/FTMInternal-4
/Applications/GameCenterUIService.app/PlugIns/GameCenterMessageExtension.appex/GameCenterMessageExtension
/Applications/Health.app/Health
/Applications/HealthENBuddy.app/HealthENBuddy
/Applications/HealthENLauncher.app/HealthENLauncher
/Applications/InCallService.app/InCallService
/Applications/Magnifier.app/Magnifier
/Applications/MobilePhone.app/MobilePhone
/Applications/MobileSlideShow.app/PlugIns/PhotosReliveWidget.appex/PhotosReliveWidget
/Applications/MobileTimer.app/PlugIns/WorldClockWidget.appex/WorldClockWidget
/Applications/SharingViewService.app/SharingViewService
/Applications/Sidecar.app/PlugIns/ContinuityCamera.appex/ContinuityCamera
/Applications/Sidecar.app/PlugIns/ContinuityDisplay.appex/ContinuityDisplay
/Applications/Sidecar.app/PlugIns/ContinuityMarkup.appex/ContinuityMarkup
/Applications/Sidecar.app/PlugIns/ContinuitySignature.appex/ContinuitySignature
/Applications/Sidecar.app/PlugIns/ContinuitySketch.appex/ContinuitySketch
/Applications/Sidecar.app/Sidecar
/Applications/SleepLockScreen.app/SleepLockScreen
/private/var/staged_system_apps/AppleTV.app/PlugIns/TVWidgetExtension.appex/TVWidgetExtension
/private/var/staged_system_apps/Books.app/Books
/private/var/staged_system_apps/Books.app/Frameworks/BookCore.framework/BookCore
/private/var/staged_system_apps/Books.app/Frameworks/JSApp.framework/JSApp
/private/var/staged_system_apps/Calculator.app/Calculator
/private/var/staged_system_apps/Files.app/Files
/private/var/staged_system_apps/Fitness.app/Fitness
/private/var/staged_system_apps/Fitness.app/PlugIns/FitnessWidget.appex/FitnessWidget
/private/var/staged_system_apps/Maps.app/PlugIns/GeneralMapsWidget.appex/GeneralMapsWidget
/private/var/staged_system_apps/Measure.app/Measure
/private/var/staged_system_apps/MobileCal.app/PlugIns/CalendarWidgetExtension.appex/CalendarWidgetExtension
/private/var/staged_system_apps/MobileNotes.app/MobileNotes
/private/var/staged_system_apps/MobileNotes.app/PlugIns/com.apple.mobilenotes.SharingExtension.appex/com.apple.mobilenotes.SharingExtension
/private/var/staged_system_apps/MobileNotes.app/PlugIns/com.apple.mobilenotes.WidgetExtension.appex/com.apple.mobilenotes.WidgetExtension
/private/var/staged_system_apps/Music.app/Frameworks/MusicApplication.framework/MusicApplication
/private/var/staged_system_apps/Music.app/Frameworks/MusicApplication.framework/XPCServices/MusicScriptUpdateService.xpc/MusicScriptUpdateService
/private/var/staged_system_apps/Music.app/Music
/private/var/staged_system_apps/Music.app/PlugIns/MediaPicker.appex/MediaPicker
/private/var/staged_system_apps/Music.app/PlugIns/MusicMessagesApp.appex/MusicMessagesApp
/private/var/staged_system_apps/Music.app/PlugIns/MusicNotificationContentExtension.appex/MusicNotificationContentExtension
/private/var/staged_system_apps/Music.app/PlugIns/MusicWidgets.appex/MusicWidgets
/private/var/staged_system_apps/Music.app/PlugIns/PlaybackIntent.appex/PlaybackIntent
/private/var/staged_system_apps/News.app/PlugIns/NewsAudioExtension.appex/NewsAudioExtension
/private/var/staged_system_apps/News.app/PlugIns/NewsTag.appex/NewsTag
/private/var/staged_system_apps/News.app/PlugIns/NewsToday2.appex/NewsToday2
/private/var/staged_system_apps/News.app/PlugIns/NewsTodayIntents.appex/NewsTodayIntents
/private/var/staged_system_apps/Podcasts.app/Frameworks/AppStoreKit.framework/AppStoreKit
/private/var/staged_system_apps/Podcasts.app/Frameworks/NowPlayingUI.framework/NowPlayingUI
/private/var/staged_system_apps/Podcasts.app/Frameworks/PodcastsStoreUI.framework/PodcastsStoreUI
/private/var/staged_system_apps/Podcasts.app/PlugIns/PodcastsClassKitExtension.appex/PodcastsClassKitExtension
/private/var/staged_system_apps/Podcasts.app/PlugIns/PodcastsWidget.appex/PodcastsWidget
/private/var/staged_system_apps/Podcasts.app/Podcasts
/private/var/staged_system_apps/Reminders.app/PlugIns/RemindersIntentsExtension.appex/RemindersIntentsExtension
/private/var/staged_system_apps/Reminders.app/PlugIns/RemindersIntentsUIExtension.appex/RemindersIntentsUIExtension
/private/var/staged_system_apps/Reminders.app/PlugIns/RemindersSharingExtension.appex/RemindersSharingExtension
/private/var/staged_system_apps/Reminders.app/PlugIns/RemindersSpotlightIndexExtension.appex/RemindersSpotlightIndexExtension
/private/var/staged_system_apps/Reminders.app/PlugIns/RemindersWidgetExtension.appex/RemindersWidgetExtension
/private/var/staged_system_apps/Reminders.app/Reminders
/private/var/staged_system_apps/SequoiaTranslator.app/PlugIns/CacheDeleteExtension.appex/CacheDeleteExtension
/private/var/staged_system_apps/SequoiaTranslator.app/SequoiaTranslator
/private/var/staged_system_apps/Shortcuts.app/Shortcuts
/private/var/staged_system_apps/Stocks.app/PlugIns/StocksDetailIntents.appex/StocksDetailIntents
/private/var/staged_system_apps/Stocks.app/PlugIns/StocksWidget.appex/StocksWidget
/private/var/staged_system_apps/Stocks.app/Stocks
/private/var/staged_system_apps/Tips.app/PlugIns/TipsSwift.appex/TipsSwift
/private/var/staged_system_apps/Weather.app/PlugIns/WeatherWidget.appex/WeatherWidget
[...]
You can get the full list here: BinariesUsingSwift.txt
Detecting binaries using SwiftUI
SwiftUI, announced at WWDC 2019, is a new framework to build user interfaces with Swift. As a consequence a binary using SwiftUI will use Swift. Can we get the list of built-in apps using SwiftUI?
When I worked on the iOS 14 widgets for Clatters 3.0, I noted that the widgets were linking against /System/Library/Frameworks/SwiftUI.framework/Versions/A/SwiftUI
.
( Clatters lets you easily monitor in one place your brand, product or any other keyword on your favorite social networks - Reddit, HackerNews and even comments on the iOS App Store. You should check it out at https://apps.apple.com/app/clatters/id1480930237! 😜 )
The script detecting Swift could easily be adjusted to detect SwiftUI by using this line:
otool -L $1 2>/dev/null | grep -o /System/Library/Frameworks/SwiftUI.framework/SwiftUI | wc -l
Apple’s use of SwiftUI in iOS 13.7
Until now I did not publish the list of apps using SwiftUI in iOS. To have a first reference, I built the list for iOS 13.7. With no surprise, iOS 13.7 only contained a handful of binaries relying on SwiftUI:
/Applications/SharingViewService.app/SharingViewService
/System/Library/Frameworks/SwiftUI.framework/SwiftUI
/System/Library/PrivateFrameworks/Settings/LegalAndRegulatorySettingsPrivate.framework/LegalAndRegulatorySettingsPrivate
/System/Library/PrivateFrameworks/Settings/SettingsUIKitPrivate.framework/SettingsUIKitPrivate
/System/Library/PrivateFrameworks/Settings/WallpaperSettings.framework/WallpaperSettings
/System/Library/PrivateFrameworks/VideosUI.framework/VideosUI
Apple’s use of SwiftUI in iOS 14.0
iOS 14.0 contains a lot more binaries using SwiftUI. The primary reason is without a doubt WidgetKit, the first public SwiftUI-only framework. Each widget available in iOS 14 appears in this list. Another shiny new iOS 14 feature is the Translate app which appears to be built with SwiftUI.
/Applications/MobilePhone.app/MobilePhone
/Applications/MobileSlideShow.app/PlugIns/PhotosReliveWidget.appex/PhotosReliveWidget
/Applications/MobileTimer.app/PlugIns/WorldClockWidget.appex/WorldClockWidget
/Applications/SharingViewService.app/SharingViewService
/Applications/SleepLockScreen.app/SleepLockScreen
/private/var/staged_system_apps/AppleTV.app/PlugIns/TVWidgetExtension.appex/TVWidgetExtension
/private/var/staged_system_apps/Fitness.app/PlugIns/FitnessWidget.appex/FitnessWidget
/private/var/staged_system_apps/Maps.app/PlugIns/GeneralMapsWidget.appex/GeneralMapsWidget
/private/var/staged_system_apps/MobileCal.app/PlugIns/CalendarWidgetExtension.appex/CalendarWidgetExtension
/private/var/staged_system_apps/MobileNotes.app/PlugIns/com.apple.mobilenotes.WidgetExtension.appex/com.apple.mobilenotes.WidgetExtension
/private/var/staged_system_apps/Music.app/PlugIns/MusicWidgets.appex/MusicWidgets
/private/var/staged_system_apps/News.app/PlugIns/NewsTag.appex/NewsTag
/private/var/staged_system_apps/News.app/PlugIns/NewsToday2.appex/NewsToday2
/private/var/staged_system_apps/Podcasts.app/PlugIns/PodcastsWidget.appex/PodcastsWidget
/private/var/staged_system_apps/Reminders.app/PlugIns/RemindersWidgetExtension.appex/RemindersWidgetExtension
/private/var/staged_system_apps/SequoiaTranslator.app/SequoiaTranslator
/private/var/staged_system_apps/Shortcuts.app/Shortcuts
/private/var/staged_system_apps/Stocks.app/PlugIns/StocksWidget.appex/StocksWidget
/private/var/staged_system_apps/Tips.app/PlugIns/TipsSwift.appex/TipsSwift
/private/var/staged_system_apps/Weather.app/PlugIns/WeatherWidget.appex/WeatherWidget
/System/Library/Frameworks/_AuthenticationServices_SwiftUI.framework/_AuthenticationServices_SwiftUI
/System/Library/Frameworks/_AVKit_SwiftUI.framework/_AVKit_SwiftUI
/System/Library/Frameworks/_HomeKit_SwiftUI.framework/_HomeKit_SwiftUI
/System/Library/Frameworks/_MapKit_SwiftUI.framework/_MapKit_SwiftUI
/System/Library/Frameworks/_QuickLook_SwiftUI.framework/_QuickLook_SwiftUI
/System/Library/Frameworks/_SceneKit_SwiftUI.framework/_SceneKit_SwiftUI
/System/Library/Frameworks/_SpriteKit_SwiftUI.framework/_SpriteKit_SwiftUI
/System/Library/Frameworks/_StoreKit_SwiftUI.framework/_StoreKit_SwiftUI
/System/Library/Frameworks/SwiftUI.framework/SwiftUI
/System/Library/Frameworks/UIKit.framework/PlugIns/com.apple.UIKit.ColorPicker.appex/com.apple.UIKit.ColorPicker
/System/Library/Frameworks/WidgetKit.framework/WidgetKit
/System/Library/PrivateFrameworks/CalendarWidget.framework/CalendarWidget
/System/Library/PrivateFrameworks/ChronoCore.framework/ChronoCore
/System/Library/PrivateFrameworks/ChronoCore.framework/Support/chronod
/System/Library/PrivateFrameworks/ChronoKit.framework/ChronoKit
/System/Library/PrivateFrameworks/ComplicationDisplay.framework/ComplicationDisplay
/System/Library/PrivateFrameworks/GameCenterUI.framework/GameCenterUI
/System/Library/PrivateFrameworks/GameCenterUI.framework/PlugIns/GameCenterDashboardExtension.appex/GameCenterDashboardExtension
/System/Library/PrivateFrameworks/PhotosUIApps.framework/PhotosUIApps
/System/Library/PrivateFrameworks/Settings/LegalAndRegulatorySettingsPrivate.framework/LegalAndRegulatorySettingsPrivate
/System/Library/PrivateFrameworks/Settings/SettingsUIKitPrivate.framework/SettingsUIKitPrivate
/System/Library/PrivateFrameworks/Settings/WallpaperSettings.framework/WallpaperSettings
/System/Library/PrivateFrameworks/WorkflowEditor.framework/WorkflowEditor
/System/Library/PrivateFrameworks/WorkflowUICore.framework/WorkflowUICore
Conclusion
Unsurprisingly the brand new iOS 14 features have been built with some Swift code. One of the most notable feature of iOS 14 is the addition of widgets on the Home Screen. Widgets are built using WidgetKit, the first SwiftUI-only framework. This explains why the SwiftUI adoption was so quick this year. Another important new feature of iOS 14 is the Translate app which appears to be built with SwiftUI.
If we exclude the Swift libraries, iOS 14.0 contains 291 binaries using Swift, more than doubling the number from iOS 13. It is also worth noting that SwiftUI has been quickly adopted in iOS 14 with 43 binaries.
- Easily preview Mermaid diagrams
- Live update when editing in your preferred editor
- Capture screenshots with customizable margins
- Create PNG from the Terminal
- Free download on the Mac App Store