Connect with us

Программирование

Эволюция языков программирования: использование Swift, SwiftUI и Obj-C в iOS 15

Несмотря на то, что у нас нет доступа к исходному коду iOS, мы можем определить языки программирования, используемые для создания встроенных приложений в iOS, и мы можем измерить эволюцию этих языков от iPhone OS 1.0 до iOS 15.

Опубликовано

/

     
     

iOS 15 была выпущена несколько месяцев назад, в сентябре 2021 года. В этой статье анализируются встроенные приложения, входящие в “комплект” iOS 15. Сколько двоичных файлов в iOS 15? Какие языки программирования используются для разработки этих приложений? Сколько приложений написано на Swift? Использует ли Apple SwiftUI для некоторых встроенных приложений? Ответы в этой статье.

Методология

Методология и инструменты для создания этой статьи были подробно описаны в моих предыдущих постах. Если вам интересно, пожалуйста, обратитесь к:

Прежде чем переходить к деталям, давайте проясним несколько моментов:

  • Я анализировал только то, что обычно называют 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:

Эволюция языков программирования: использование Swift, SwiftUI и Obj-C в 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 новых двоичных файлов.

Эволюция языков программирования: использование Swift, SwiftUI и Obj-C в iOS 15

Эволюция языков программирования

Анализируя все основные выпуски iOS от iPhone OS 1.0 до iOS 15, мы можем увидеть эволюцию языков программирования, используемых в iOS. Опять же, обратите внимание, что один двоичный файл можно подсчитать несколько раз, поэтому сумма  больше, чем общее количество двоичных файлов:

Эволюция языков программирования: использование Swift, SwiftUI и Obj-C в iOS 15

Из всех двоичных файлов в 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 по-прежнему играют важную роль. Эти языки обычно используются двоичными файлами, связанными с аудио, видео, телефонией, Интернетом и другими низкоуровневыми фреймворками.

Вот еще одно представление об эволюции каждого языка программирования:

Эволюция языков программирования: использование Swift, SwiftUI и Obj-C в iOS 15

Выводы

Несмотря на то, что у нас нет доступа к исходному коду iOS, мы можем определить языки программирования, используемые для создания встроенных приложений в iOS, и мы можем измерить эволюцию этих языков от iPhone OS 1.0 до iOS 15.

Как мы видели, Apple продолжает наращивать использование Swift в своих собственных приложениях — количество двоичных файлов, использующих Swift, удвоилось от iOS 14 к iOS 15. Примерно 13% двоичных файлов теперь используют Swift. Кроме того,  в этом году действительно началось принятие SwiftUI — несколько флагманских приложений теперь используют SwiftUI.

Как упоминалось ранее, у этого подхода, очевидно, есть некоторые ограничения, и хотя я считаю, что общая картина точна, я не могу гарантировать, что результаты будут совершенно точными. Если вы думаете, что я что-то пропустил, напишите мне в Twitter.

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: