Разработка
Использование Apple Swift и SwiftUI в iOS 16
iOS 16 только что вышла, поэтому давайте проанализируем ее встроенные приложения. Как и в прошлые годы, я постараюсь ответить на несколько вопросов. Сколько бинарников в iOS 16? Какие языки программирования используются для разработки этих приложений? Сколько приложений написано на Swift? Каков процент приложений, использующих SwiftUI, по сравнению с UIKit?
Методология
Методология и инструменты для создания этой статьи были подробно описаны в предыдущих постах. Если вы заинтересованы, пожалуйста, обратитесь к:
- Использование Apple AppKit, Mac Catalyst и SwiftUI в macOS
- Эволюция языков программирования от iPhone OS 1.0 до iOS 14
- Apple использует Swift в iOS 10.1 и macOS 10.12
Прежде чем перейти к деталям, давайте проясним несколько моментов:
- Я анализировал только то, что обычно называют «iOS», то есть все, что выше ядра. Ядро XNU и низкоуровневое firmware (SecureROM, Baseband, …) не включены, даже если Secure Enclave теперь содержит код Swift. С другой стороны, я посчитал фреймворки, расположенные внутри общего кэша dyld — механизма, представленного в iPhone OS 3.1.
- Имейте в виду, что разработчик может смешивать разные языки программирования для создания одного двоичного файла. Одним из примеров является разработанное мной приложение Clatters, в котором я использую Swift, SwiftUI, Objective-C и C, наиболее подходящий язык программирования, используемый для решения каждой конкретной проблемы. В этой статье приложение, содержащее одну строку кода Swift, будет считаться использующим Swift.
- Вы увидите упоминания о Objective-C и C++, но можете заметить отсутствие Objective-C++. Используемый здесь подход не может действительно обнаруживать двоичные файлы, созданные с помощью Objective-C++. Такие двоичные файлы считаются использующими как Objective-C, так и C++.
- Наконец, вы должны принять этот анализ с определенным недоверием. Хотя я считаю, что общая картина верна, мой подход имеет некоторые ограничения из-за того простого факта, что у меня нет доступа к исходному коду iOS и я полагался на неточные артефакты компиляции.
Количество бинарников
Давайте сначала ответим на простой вопрос: сколько бинарников в iOS 16? Количество двоичных файлов, составляющих iOS, продолжает расти: iOS 16 содержит 5403 двоичных файла по сравнению с 4738 в iOS 15. Это 665 новых двоичных файлов.
Swift и SwiftUI в iOS 16
Во время презентации Platforms State of the Union на WWDC 2022 Apple поделилась своим видением платформы, сделав заявление, адресованное разработчикам, создающим новое приложение: «Лучший способ создать приложение — использовать Swift и SwiftUI». Давайте сравним это заявление с собственным использованием Apple Swift и SwiftUI в iOS 16.
Неудивительно, что мы можем четко подтвердить, что некоторые из новых функций iOS 16 были созданы с использованием SwiftUI:
- Live Activities (с фреймворком SportsKit)
- Live Captions (с LiveTranscriptionUI)
- Shared with You (фреймворк SharedWithYou и, возможно, CloudSharingUI, GroupActivities, PeopleViewService)
- Фреймворк Swift Charts
При выполнении этого анализа меня удивило одно число: iOS 16 содержит только 4 приложения, использующие жизненный цикл приложения на основе SwiftUI:
/Applications/Batteries.app/Batteries /Applications/FTMInternal-4.app/FTMInternal-4 /private/var/staged_system_apps/Weather.app/Weather /System/Library/CoreServices/AegirProxyApp.app/AegirProxyApp
Тем не менее, внедрение Swift и SwiftUI продолжает экспоненциальный рост: iOS 16 содержит 226 двоичных файлов, использующих SwiftUI, что вдвое больше, чем в iOS 15. Точно так же количество двоичных файлов, содержащих хотя бы одну строку кода Swift, соответственно увеличилось от iOS 15 к iOS 16:
Некоторые существующие приложения и фреймворки начали внедрять SwiftUI и они заслуживают упоминания:
- AirDropUI
- AirPlayReceiver
- Batteries
- Фреймворк ContactsUI
- FaceTime
- Фитнес (и связанный с ним фреймворк WorkoutCore)
- Здоровье
- Фреймворк HomeUI, на котором работает Home.app
- Подкасты (и связанная с ними платформа PodcastsUI)
- Фреймворк ProximityAppleIDSetupUI
- Некоторые двоичные файлы, связанные с Apple Pay (ContactlessReaderUI, CoreIDVUI, FinanceKitUI, PaymentUIBase, …)
- Некоторые двоичные файлы, связанные с музыкой (AppleMediaServicesUI, _MusicKitInternal_SwiftUI, ClarityBoard, …)
- Некоторые двоичные файлы, связанные с Shazam (ShazamKitUI, ShazamViewService)
- Ассистент обратной связи iOS
Эволюция языков программирования
Анализируя все основные выпуски iOS от iPhone OS 1.0 до iOS 16, мы можем увидеть эволюцию языков программирования, используемых в iOS. Еще раз обратите внимание, что один двоичный файл может быть подсчитан несколько раз, поэтому сумма двоичных файлов на этом графике больше, чем общее количество двоичных файлов:
Некоторые тенденции можно лучше визуализировать, отображая проценты:
Что мы можем узнать из этих графиков?
- Objective-C лежит в основе iOS и прямо или косвенно используется большинством приложений.
- Использование Swift быстро увеличивается по сравнению с прошлыми версиями iOS. В этом году Swift наконец превзошел C++.
- Использование C++ стабильно на протяжении многих лет.
- SwiftUI становится заметным, что является отличным признаком: Apple занимается экспериментальной проверкой собственного фреймворка.
- C медленно, но верно угасает
UIKit против SwiftUI
До сих пор мы сравнивали SwiftUI со всеми бинарниками. Поскольку SwiftUI является UI-фреймворком, было бы справедливее сравнить его с другими двоичными файлами, отображающими некоторый пользовательский интерфейс. Нативные iOS-приложения можно создавать с помощью двух разных UI-фреймворков: UIKit и SwiftUI (обратите внимание, что оба можно смешивать). Мой подход к подсчету количества двоичных файлов, содержащих пользовательский интерфейс, не идеален, но может приблизительно определять тенденцию — я просто проверяю, связаны ли двоичные файлы с платформами UIKit или SwiftUI.
Отображая проценты, мы можем подтвердить, что SwiftUI явно растет в собственных приложениях Apple:
Вывод
Несмотря на то, что у нас нет доступа к исходному коду iOS, мы можем определить языки программирования, используемые для создания встроенных приложений в iOS, и мы можем измерить эволюцию этих языков от iPhone OS 1.0 до iOS 16.
Принятие Swift продолжает экспоненциальный рост и в этом году язык превзошел C++. Точно так же SwiftUI начинает все больше использоваться самой Apple: количество двоичных файлов, использующих SwiftUI, удвоилось от iOS 15 к iOS 16. Apple использует собственные платформы — хороший знак для этих фреймворков.
Как упоминалось ранее, этот подход, очевидно, имеет некоторые ограничения, и, хотя я считаю, что общая картина является точной, я не могу гарантировать, что результаты будут абсолютно точными. Если вы считаете, что я что-то упустил, напишите мне в Twitter.