iOS 17 стала доступна и давайте проанализируем ее встроенные приложения, чтобы ответить на несколько вопросов. Сколько бинарных файлов содержится в iOS 17? Какие языки программирования используются для разработки этих приложений? Сколько приложений написано на Swift? Какова доля приложений, использующих SwiftUI по сравнению с UIKit?
Методология
Методология и инструменты для создания этой статьи были подробно описаны в моих предыдущих постах. Если вам интересно, пожалуйста, ознакомьтесь с ними.
Уточним несколько пунктов:
- Я анализировал только то, что принято называть iOS, т.е. все, что выше ядра. Ядро XNU и низкоуровневые прошивки не учитываются. Обратите внимание, что в этом году я анализировал Secure Enclave.
- Я считал фреймворки, расположенные внутри общего кэша dyld — механизма, появившегося в iPhone OS 3.1.
- Следует помнить, что разработчик может смешивать различные языки программирования для создания одного двоичного файла. В качестве примера можно привести разработанное мной приложение для Mac — Dependencies, в котором я использую Swift, Objective-C, C++ и C — наиболее подходящий язык программирования для решения каждой конкретной задачи. В этой статье приложение, содержащее одну строку Swift-кода, будет считаться использующим Swift.
- Вы увидите упоминания о Objective-C и C++, но, возможно, заметите отсутствие Objective-C++. Используемый здесь подход на самом деле не позволяет обнаружить бинарные файлы, созданные с использованием Objective-C++. Такие двоичные файлы считаются использующими и Objective-C, и C++.
- Наконец, к данному анализу следует отнестись с долей сомнения. Хотя я считаю общую картину точной, мой подход имеет некоторые ограничения, поскольку я не имею доступа к исходному коду iOS и полагаюсь на неточные артефакты компиляции.
Количество бинарных файлов
Сначала ответим на простой вопрос — сколько бинарных файлов содержится в iOS 17? Количество файлов, составляющих iOS, продолжает расти: iOS 17 содержит 6030 файлов по сравнению с 5403 в iOS 16. Это 627 новых программ.
Swift и SwiftUI в iOS 17
Неудивительно, что в этом году значительно увеличилось количество приложений, использующих SwiftUI. Среди них можно отметить следующие:
- Приложение Preferences с несколькими его пакетами (StorageSettingsUI, WallpaperSettings, MultitaskingAndGesturesSettings, ThirdPartyApplicationSettings, ActionButtonSettings, …)
- Несколько двоичных файлов, связанных со здоровьем (Health.app, HealthUI, MentalHealthUI, WorkoutUI, …)
- Приложение Home, которое, судя по всему, претерпело значительные изменения (Home.app, HomeEnergyUI, HomeUICommon, HomeDataModel, HomeAccessoryControlUI, …)
- Поддержка новой кнопки Action (ActionButtonSettings, ActionButtonConfigurationUI, …)
- Кроме того, ряд других важных приложений, таких как «Календарь» и «Напоминания», теперь используют SwiftUI.
В iOS 16 только 4 приложения использовали жизненный цикл приложений на основе SwiftUI. В iOS 17 эта цифра выросла до 14 приложений:
/Applications/Batteries.app/Batteries /Applications/ClarityCamera.app/ClarityCamera /Applications/ClarityPhotos.app/ClarityPhotos /Applications/FinanceUIService.app/FinanceUIService /Applications/FTMInternal-4.app/FTMInternal-4 /Applications/MusicRecognition.app/MusicRecognition /Applications/PASViewService.app/PASViewService /Applications/Preferences.app/Preferences /Applications/SafetyMonitorApp.app/SafetyMonitorApp /Applications/ShazamEventsApp.app/ShazamEventsApp /Applications/WorkoutRemoteViewService.app/WorkoutRemoteViewService /private/var/staged_system_apps/Weather.app/Weather /System/Library/CoreServices/AegirProxyApp.app/AegirProxyApp /System/Library/CoreServices/ShortcutsActions.app/ShortcutsActions
Продолжается рост принятия Swift и SwiftUI — в iOS 17 уже 385 двоичных файлов, использующих SwiftUI. Аналогичным образом, количество двоичных файлов, содержащих хотя бы одну строку Swift-кода, увеличилось на 50% по сравнению с iOS 16 и iOS 17:
Эволюция языков программирования
Анализируя все основные релизы iOS, начиная с iPhone OS 1.0 и заканчивая iOS 17, мы можем проследить эволюцию языков программирования, используемых в iOS. Еще раз отметим, что один бинарный файл может учитываться несколько раз, поэтому сумма файлов на этом графике больше, чем общее количество файлов:
Некоторые тенденции можно лучше представить с помощью процентного соотношения:
Что мы можем узнать из этих графиков?
- Objective-C по-прежнему является основой iOS и прямо или косвенно используется в большинстве приложений
- Внедрение Swift и SwiftUI продолжает быстро расти
- Доля Objective-C, C и C++ продолжает снижаться.
UIKit против SwiftUI
До сих пор мы сравнивали SwiftUI со всеми двоичными файлами. Поскольку SwiftUI является фреймворком пользовательского интерфейса, было бы справедливее сравнивать его с другими двоичными файлами, отображающими некоторый пользовательский интерфейс. Нативные приложения для iOS могут быть построены с использованием двух различных UI-фреймворков: UIKit и SwiftUI (отметим, что возможно смешение обоих). Мой подход к подсчету количества двоичных файлов, содержащих пользовательский интерфейс, не идеален, но должен показать примерную тенденцию. Я просто проверяю, связываются ли исполняемые файлы с фреймворками UIKit или SwiftUI.
Впервые количество бинарных файлов, использующих исключительно UIKit, уменьшилось по сравнению с предыдущим годом:
Отображая процентное соотношение, мы можем подтвердить, что SwiftUI явно растет в собственных приложениях Apple:
Secure Enclave
Secure Enclave — это аппаратный компонент безопасности, изолированный от основного процессора и обеспечивающий дополнительный уровень защиты. Изначально он был представлен в iPhone 5S для обеспечения безопасности конфиденциальных пользовательских данных, играя важную роль в работе Touch ID, Face ID и Apple Pay.
В сессии «Что нового в Swift» на WWDC22 компания Apple заявила, что Swift теперь подходит для ограниченных сред, таких как процессор Secure Enclave.
В iOS 17 Secure Enclave содержит 19 двоичных файлов, и, к моему удивлению, ни один из них не использует Swift:
Так используется ли Swift в Secure Enclave? Да! Оказывается, двоичный файл hibernation
в macOS Ventura использует Swift:
Заключение
Несмотря на отсутствие доступа к исходному коду iOS, мы можем определить языки программирования, используемые для создания встроенных приложений в iOS, и проследить эволюцию этих языков с iPhone OS 1.0 до iOS 17.
Принятие Swift и SwiftUI продолжает расти: количество двоичных файлов с использованием этих фреймворков увеличилось на 50% с iOS 16 по iOS 17. Еще одним хорошим признаком развития является более широкое использование SwiftUI в жизненном цикле приложений. Также впервые по сравнению с предыдущим годом уменьшилось количество бинарных файлов, использующих исключительно UIKit.
В ближайшие годы будет интересно понаблюдать за тем, начнет ли Swift распространяться в низкоуровневых микропрограммах, таких как Secure Enclave. В настоящее время Swift отсутствует в Secure Enclave в iOS, хотя в macOS он используется.
Как уже говорилось, такой подход имеет очевидные ограничения, и хотя я считаю общую картину точной, я не могу гарантировать, что результаты будут абсолютно точными. Если вы считаете, что я что-то упустил, пожалуйста, свяжитесь со мной на Mastodon @timac@mastodon.social.