iOS 15 was released a few months ago in September 2021. In this article, I analyze the built-in apps composing iOS 15. How many binaries are in iOS 15? Which programming languages are used to develop these apps? How many apps are written with Swift? Has Apple adopted SwiftUI for some built-in apps?
- 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 to create this article have been detailed in my previous posts. If you are interested, please refer to:
- Evolution of the programming languages from iPhone OS 1.0 to iOS 14
- Apple’s use of Swift in iOS 10.1 and macOS 10.12.
Before jumping into the details, let’s clarify a few points:
I only analyzed what is commonly called ‘iOS’, i.e. everything above the kernel. The XNU kernel and low-level firmwares (SecureROM, Baseband, …) are not included. On the other hand, I counted the frameworks located inside the dyld shared cache, a mechanism introduced in iPhone OS 3.1.
Keep in mind that a developer can mix different programming languages to create one binary. One example is an app I developed, Clatters, where I use Swift, SwiftUI, Objective-C and C, the most appropriate programming language being used to solve each specific problem. In this article, an app containing a single line of Swift code will be counted as using Swift.
You will see mentions of Objective-C and C++ but you might notice the absence of Objective-C++. The approach used here can’t really detect binaries built with Objective-C++. Such binaries are counted as using both Objective-C and C++.
Finally you should take this analysis with a grain of salt. While I believe the overall picture to be accurate, my approach has some limitations due to the simple fact that I don’t have access to the iOS source code and relied on imprecise compilation artifacts.
Swift and SwiftUI in iOS 15
Probably one of the most interesting figure is to measure Apple’s use of Swift and SwiftUI in iOS 15. So let’s start with that!
iOS 15 contains 114 binaries using SwiftUI, that’s almost 3 times the number from iOS 14. Likewise the number of binaries containing at least one line of Swift code has doubled between iOS 14 and iOS 15:
As you can see, Apple continues to progressively adopt Swift for its own built-in apps. This year is also a big year for the adoption of SwiftUI. A few widely used apps now appear to use SwiftUI in iOS 15:
- Books
- Maps
- Notes
- Weather
- Tips
- Music
- Podcasts
- FaceTime? (InCallService)
- AppSettings?
These new apps add up to the previously 5 apps using SwiftUI:
- Translate
- Shortcuts
- Phone
- AirPods Connect Pop-up? (SharingViewService)
- Lock Screen? (SleepLockScreen)
The other binaries using SwiftUI are mostly widgets or new frameworks. Here is the complete list of 114 binaries using SwiftUI:
/Applications/AppSettings.app/AppSettings
/Applications/AppStore.app/PlugIns/AppStoreWidgetsExtension.appex/AppStoreWidgetsExtension
/Applications/FamilyControlsAuthenticationUI.app/FamilyControlsAuthenticationUI
/Applications/FindMy.app/PlugIns/FindMyWidgetIntentsItems.appex/FindMyWidgetIntentsItems
/Applications/FindMy.app/PlugIns/FindMyWidgetIntentsPeople.appex/FindMyWidgetIntentsPeople
/Applications/FindMy.app/PlugIns/FindMyWidgetItems.appex/FindMyWidgetItems
/Applications/FindMy.app/PlugIns/FindMyWidgetPeople.appex/FindMyWidgetPeople
/Applications/FTMInternal-4.app/FTMInternal-4
/Applications/GameCenterWidgets.app/PlugIns/GCWidgets.appex/GCWidgets
/Applications/InCallService.app/InCallService
/Applications/PeopleViewService.app/PlugIns/PeopleWidget_iOSExtension.appex/PeopleWidget_iOSExtension
/Applications/SleepWidgetContainer.app/PlugIns/SleepWidgetExtension.appex/SleepWidgetExtension
/private/var/staged_system_apps/Books.app/Books
/private/var/staged_system_apps/Maps.app/Maps
/private/var/staged_system_apps/MobileMail.app/PlugIns/MailWidgetExtension.appex/MailWidgetExtension
/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/Music.app/Frameworks/MusicApplication.framework/MusicApplication
/private/var/staged_system_apps/Podcasts.app/Frameworks/PodcastsStoreUI.framework/PodcastsStoreUI
/private/var/staged_system_apps/Shortcuts.app/PlugIns/QuickLookExtension.appex/QuickLookExtension
/private/var/staged_system_apps/Tips.app/Tips
/private/var/staged_system_apps/Weather.app/Weather
/System/Library/Assistant/UIPlugins/SiriFindMyUIPlugin.siriUIBundle/SiriFindMyUIPlugin
/System/Library/Frameworks/_CoreLocationUI_SwiftUI.framework/_CoreLocationUI_SwiftUI
/System/Library/Frameworks/_MusicKit_SwiftUI.framework/_MusicKit_SwiftUI
/System/Library/Frameworks/FamilyControls.framework/FamilyControls
/System/Library/Frameworks/FamilyControls.framework/PlugIns/ActivityPickerExtension.appex/ActivityPickerExtension
/System/Library/Health/FeedItemPlugins/Heart.healthplugin/Heart
/System/Library/Health/FeedItemPlugins/Highlights.healthplugin/Highlights
/System/Library/Health/FeedItemPlugins/MenstrualCyclesAppPlugin.healthplugin/MenstrualCyclesAppPlugin
/System/Library/Health/FeedItemPlugins/SleepHealthAppPlugin.healthplugin/SleepHealthAppPlugin
/System/Library/Health/FeedItemPlugins/Summaries.healthplugin/Summaries
/System/Library/PreferenceBundles/BatteryUsageUI.bundle/BatteryUsageUI
/System/Library/PreferenceBundles/CoreRoutineSettings.bundle/CoreRoutineSettings
/System/Library/PreferenceBundles/FocusSettings.bundle/FocusSettings
/System/Library/PrivateFrameworks/AccessibilitySharedUISupport.framework/AccessibilitySharedUISupport
/System/Library/PrivateFrameworks/ActionKitUI.framework/ActionKitUI
/System/Library/PrivateFrameworks/CommandAndControlUI.framework/CommandAndControlUI
/System/Library/PrivateFrameworks/CoreChartSwift.framework/CoreChartSwift
/System/Library/PrivateFrameworks/CoreSuggestionsUI.framework/CoreSuggestionsUI
/System/Library/PrivateFrameworks/FocusSettingsUI.framework/FocusSettingsUI
/System/Library/PrivateFrameworks/FocusUI.framework/FocusUI
/System/Library/PrivateFrameworks/HealthExperienceUI.framework/HealthExperienceUI
/System/Library/PrivateFrameworks/HealthRecordsUI.framework/HealthRecordsUI
/System/Library/PrivateFrameworks/HealthVisualization.framework/HealthVisualization
/System/Library/PrivateFrameworks/HearingUI.framework/HearingUI
/System/Library/PrivateFrameworks/MediaFoundation.framework/MediaFoundation
/System/Library/PrivateFrameworks/MessagesSupport.framework/MessagesSupport
/System/Library/PrivateFrameworks/MLKit.framework/MLKit
/System/Library/PrivateFrameworks/MLKit.framework/PlugIns/com.apple.MLKit.MLModelPreview.appex/com.apple.MLKit.MLModelPreview
/System/Library/PrivateFrameworks/MLKit.framework/PlugIns/com.apple.MLKit.MLPackagePreview.appex/com.apple.MLKit.MLPackagePreview
/System/Library/PrivateFrameworks/NotesUI.framework/NotesUI
/System/Library/PrivateFrameworks/PaymentUI.framework/PaymentUI
/System/Library/PrivateFrameworks/PeopleUI.framework/PeopleUI
/System/Library/PrivateFrameworks/PreviewsInjection.framework/PreviewsInjection
/System/Library/PrivateFrameworks/PreviewsMessaging.framework/PreviewsMessaging
/System/Library/PrivateFrameworks/ScreenTimeUICore.framework/ScreenTimeUICore
/System/Library/PrivateFrameworks/SleepHealthUI.framework/SleepHealthUI
/System/Library/PrivateFrameworks/SleepWidgetUI.framework/SleepWidgetUI
/System/Library/PrivateFrameworks/SnippetUI.framework/SnippetUI
/System/Library/PrivateFrameworks/TipKit.framework/TipKit
/System/Library/PrivateFrameworks/TranslationUI.framework/TranslationUI
/System/Library/PrivateFrameworks/TranslationUIServices.framework/PlugIns/TranslationUIService.appex/TranslationUIService
/System/Library/PrivateFrameworks/VideosUI.framework/VideosUI
/System/Library/PrivateFrameworks/WeatherUI.framework/WeatherUI
/System/Library/PrivateFrameworks/WorkflowUI.framework/WorkflowUI
/System/Library/Snippets/UIPlugins/AudioUIPlugin.bundle/AudioUIPlugin
/System/Library/Snippets/UIPlugins/SiriVideoUIPlugin.bundle/SiriVideoUIPlugin
/System/Library/Snippets/UIPlugins/SystemPlugin.bundle/SystemPlugin
/usr/lib/swift/libswiftExtensionKit.dylib
/usr/libexec/proximitycontrold
Total number of binaries
How many binaries can we enumerate in iOS 15? iOS 15 is composed of 4738 binaries, up from 4173 in iOS 14. That’s 565 new binaries.
Evolution of the programming languages
By analyzing all major releases of iOS from iPhone OS 1.0 to iOS 15, we can see the evolution of the programming languages used by iOS. Again please note that a single binary can be counted multiple times, so the sum of the binaries in this graph is greater than the total number of binaries:
Out of all the binaries in iOS 15:
- 89% are using Objective-C
- 17% are using C++
- 13% are using Swift
- 8% are entirely written in C
- 2% are using SwiftUI
What can we learn here?
- Objective-C is still at the core of iOS and is not going away anytime soon.
- Apple’s use of Swift is progressing faster than ever. Last year Swift surpassed C. This year Swift is getting closer to C++.
- SwiftUI was barely noticeable last year but this year Apple seems to have adopted it more widely, even in flagship apps.
- C++ and C still play an important role. These languages are typically used by binaries related to audio, video, telephony, web, and other low-level frameworks.
Here is another representation of the evolution of each programming language:
Raw Data
In case you want to perform a deeper analysis, you can download below the raw data I generated for all major releases of iOS from iPhone OS 1.0 to iOS 15.0.
Version | Device | Raw Data |
---|---|---|
iOS 15.0 (19A346) | iPhone 13 Pro | iOS15.txt |
iOS 14.0 (18A373) | iPhone X | iOS14.txt |
iOS 13.1 (17A844) | iPhone X | iOS13.txt |
iOS 12.0 (16A366) | iPhone X | iOS12.txt |
iOS 11.1 (15B93) | iPhone X | iOS11.txt |
iOS 10.1 (14B72) | iPhone 5s | iOS10.txt |
iOS 9.0 (13A344) | iPhone 5s | iOS9.txt |
iOS 8.0 (12A365) | iPhone 5s | iOS8.txt |
iOS 7.0.1 (11A470a) | iPhone 5s | iOS7.txt |
iOS 6.0 (10A403) | iPhone 3GS | iOS6.txt |
iOS 5.0 (9A334) | iPhone 3GS | iOS5.txt |
iOS 4.0 (8A293) | iPhone 3GS | iOS4.txt |
iPhone OS 3.0 (7A341) | iPhone 3GS | iOS3.txt |
iPhone OS 2.0 (5A347) | iPhone 2G | iOS2.txt |
iPhone OS 1.0 (1A543a) | iPhone 2G | iOS1.txt |
Conclusion
Even though we don’t have access to the iOS source code, we can determine the programming languages used to create the built-in apps in iOS and we can measure the evolution of these languages from iPhone OS 1.0 to iOS 15.
As we saw, Apple continues to adopt Swift for its own apps: the number of binaries using Swift has doubled between iOS 14 and iOS 15. Approximatively 13% of the binaries are now using Swift. Additionally, the adoption of SwiftUI really started this year with several flagship apps now using SwiftUI.
As previously mentioned, this approach has obviously some limits and while I believe the overall picture to be accurate, I can’t guarantee that the results are perfectly exact. If you think that I missed something, please reach out to me on Mastodon @timac@mastodon.social.