Программирование
Эволюция языков программирования: использование Swift, SwiftUI и Obj-C в iOS 15
Несмотря на то, что у нас нет доступа к исходному коду iOS, мы можем определить языки программирования, используемые для создания встроенных приложений в iOS, и мы можем измерить эволюцию этих языков от iPhone OS 1.0 до iOS 15.
iOS 15 была выпущена несколько месяцев назад, в сентябре 2021 года. В этой статье анализируются встроенные приложения, входящие в “комплект” iOS 15. Сколько двоичных файлов в iOS 15? Какие языки программирования используются для разработки этих приложений? Сколько приложений написано на Swift? Использует ли Apple SwiftUI для некоторых встроенных приложений? Ответы в этой статье.
Методология
Методология и инструменты для создания этой статьи были подробно описаны в моих предыдущих постах. Если вам интересно, пожалуйста, обратитесь к:
- Эволюция языков программирования с iPhone OS 1.0 до iOS 14
- Использование Apple Swift в iOS 10.1 и macOS 10.12.
- Сравнение iPhone OS 1.0 с iOS 14 с помощью карт
Прежде чем переходить к деталям, давайте проясним несколько моментов:
- Я анализировал только то, что обычно называют iOS, то есть все, что находится выше ядра. Ядро XNU и низкоуровневое ПО (SecureROM, Baseband,…) не включены в этот обзор. С другой стороны, я подсчитал фреймворки, расположенные внутри общего кэша dyld, механизма, представленного в iPhone OS 3.1.
- Имейте в виду, что разработчик может смешивать разные языки программирования для создания одного двоичного файла. Одним из примеров является разработанное мной приложение Clatters, в котором я использую Swift, SwiftUI, Objective-C и C, наиболее подходящие языки программирования для решения каждой конкретной проблемы. В этой статье приложение, содержащее даже одну строку кода Swift, будет считаться использующим Swift.
- Вы увидите упоминания Objective-C и C++, но можете заметить отсутствие Objective-C++. Используемый здесь подход не позволяет обнаруживать двоичные файлы, созданные с помощью Objective-C++. Такие двоичные файлы считаются использующими как Objective-C, так и C++.
- Наконец, вы должны отнестись к этому анализу с определенным недоверием. Хотя я считаю, что общая картина точна, мой подход имеет некоторые ограничения из-за того простого факта, что у меня нет доступа к исходному коду iOS и я полагаюсь на неточные артефакты компиляции.
Swift и SwiftUI в iOS 15
Вероятно, одна из самых интересных цифр — это использования Apple Swift и SwiftUI в iOS 15. Итак, начнем с этого!
iOS 15 содержит 114 двоичных файлов с использованием SwiftUI, что почти в 3 раза больше, чем в iOS 14. Точно так же количество двоичных файлов, содержащих хотя бы одну строку кода Swift, удвоилось от iOS 14 к iOS 15:
Как видите, Apple продолжает постепенно применять Swift для своих встроенных приложений. Этот год также стал важным годом для принятия SwiftUI. Несколько широко распространенных приложений теперь в iOS 15 используют SwiftUI:
- Books
- Maps
- Notes
- Weather
- Tips
- Music
- Podcasts
- FaceTime? (InCallService)
- AppSettings?
Эти новые приложения добавились к 5 предыдущим приложениям, использующим SwiftUI:
- Translate
- Shortcuts
- Phone
- AirPods Connect Pop-up? (SharingViewService)
- Lock Screen? (SleepLockScreen)
Другие двоичные файлы, использующие SwiftUI, в основном представляют собой виджеты или новые фреймворки. Вот полный список из 114 двоичных файлов, использующих 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
Общее количество двоичных файлов
Сколько двоичных файлов мы можем найти в iOS 15? iOS 15 состоит из 4738 двоичных файлов по сравнению с 4173 в iOS 14. Это 565 новых двоичных файлов.
Эволюция языков программирования
Анализируя все основные выпуски iOS от iPhone OS 1.0 до iOS 15, мы можем увидеть эволюцию языков программирования, используемых в iOS. Опять же, обратите внимание, что один двоичный файл можно подсчитать несколько раз, поэтому сумма больше, чем общее количество двоичных файлов:
Из всех двоичных файлов в iOS 15:
- 89% используют Objective-C
- 17% используют C++
- 13% используют Swift
- 8% полностью написаны на C
- 2% используют SwiftUI
Что мы можем узнать из этого?
- Objective-C по-прежнему лежит в основе iOS и в ближайшее время не исчезнет.
- Apple использует Swift все больше и больше. В прошлом году Swift превзошел C. В этом году Swift приближается к C++.
- В прошлом году SwiftUI был едва заметен, но в этом году Apple, похоже, использовала его более широко, даже во флагманских приложениях.
- C++ и C по-прежнему играют важную роль. Эти языки обычно используются двоичными файлами, связанными с аудио, видео, телефонией, Интернетом и другими низкоуровневыми фреймворками.
Вот еще одно представление об эволюции каждого языка программирования:
Выводы
Несмотря на то, что у нас нет доступа к исходному коду iOS, мы можем определить языки программирования, используемые для создания встроенных приложений в iOS, и мы можем измерить эволюцию этих языков от iPhone OS 1.0 до iOS 15.
Как мы видели, Apple продолжает наращивать использование Swift в своих собственных приложениях — количество двоичных файлов, использующих Swift, удвоилось от iOS 14 к iOS 15. Примерно 13% двоичных файлов теперь используют Swift. Кроме того, в этом году действительно началось принятие SwiftUI — несколько флагманских приложений теперь используют SwiftUI.
Как упоминалось ранее, у этого подхода, очевидно, есть некоторые ограничения, и хотя я считаю, что общая картина точна, я не могу гарантировать, что результаты будут совершенно точными. Если вы думаете, что я что-то пропустил, напишите мне в Twitter.
-
Разработка1 месяц назад
Как я сделал успешный побочный проект и возненавидел его
-
Новости1 неделя назад
Видео и подкасты о мобильной разработке 2024.39
-
Новости2 недели назад
Видеозвонки с Лили, Приключения и пианино — обновления Duolingo
-
Программирование1 месяц назад
Задачи с собеседований: Leetcode — Является ли число палиндромом