Разработка
Использование Apple Swift и SwiftUI в iOS 18
Несмотря на то что у нас нет доступа к исходному коду iOS, мы можем определить языки программирования, используемые для создания встроенных приложений в iOS, и проследить эволюцию этих языков с iPhone OS 1.0 до iOS 18.
Как и в случае с предыдущими версиями iOS, давайте проанализируем встроенные приложения iOS 18, чтобы ответить на несколько вопросов. Сколько бинарных файлов содержит iOS 18? Какие языки программирования использовались для разработки приложений? Сколько приложений написано на Swift? Какой процент приложений использует SwiftUI по сравнению с UIKit?
Методология
Методология и инструменты для создания этой статьи были подробно описаны в моих предыдущих постах. Если вам интересно, пожалуйста, ознакомьтесь с ними:
- Использование Apple AppKit, Mac Catalyst и SwiftUI в macOS
- Эволюция языков программирования от iPhone OS 1.0 до iOS 14
- Использование Swift компанией Apple в iOS 10.1 и macOS 10.12
Прежде чем перейти к деталям, давайте проясним несколько моментов:
- Я анализировал только то, что принято называть «iOS», т.е. все, что находится выше ядра. Ядро XNU и низкоуровневые прошивки не включены.
- Я считал фреймворки, расположенные внутри общего кэша dyld — механизма, появившегося в iPhone OS 3.1.
- Не забывайте, что разработчик может смешивать разные языки программирования для создания одного бинарного файла. В этой статье приложение, содержащее одну строку Swift-кода, будет считаться использующим Swift.
- Вы увидите упоминания Objective-C и C++, но можете заметить отсутствие Objective-C++. Используемый здесь подход на самом деле не может обнаружить бинарные файлы, созданные с использованием Objective-C++. Такие файлы считаются использующими как Objective-C, так и C++.
- Наконец, вы должны воспринимать этот анализ с долей сомнения. Хотя я считаю общую картину точной, мой подход имеет некоторые ограничения, поскольку у меня нет доступа к исходному коду iOS и я полагался на неточные артефакты компиляции.
Количество бинарных файлов
Давайте сначала ответим на простой вопрос — сколько бинарных файлов содержится в iOS 18? Количество файлов, составляющих iOS, продолжает расти: iOS 18 содержит 6800 бинарных файлов, по сравнению с 6030 в iOS 17. Это 770 новых файлов.
Swift и SwiftUI в iOS 18
Неудивительно, что в этом году количество приложений, использующих SwiftUI, продолжает расти. Среди них можно отметить следующие:
- Новое приложение Passwords
- Приложение Siri.app, которое теперь использует SwiftUI
- Приложение Calculator, которое было заметно переработано
- Новое приложение Journal, представленное в iOS 17.2.
Новые технологии также опираются на Swift, например:
- Apple Intelligence с фреймворками ProactiveSummarization и SummarizationKit
- PrivateCloudCompute для Apple Intelligence, которая включает некоторые компоненты с открытым исходным кодом
- MarketplaceKit для создания альтернативных магазинов приложений
- LimitedLibraryPickerViewService для доступа к контактным данным человека
Кроме того, несколько других приложений и фреймворков теперь используют Swift, например, приложение Camera и BarcodeScanner, а также такие фреймворки, как CoreML, CoreNFC, CoreGraphics, CoreText, LinkPresentation и DoNotDisturb.
iOS 18 теперь содержит 592 бинарных файла, использующих SwiftUI, а количество бинарных файлов, содержащих хотя бы одну строку кода Swift, увеличилось на 50% по сравнению с iOS 17 и iOS 18:
В iOS 16 только 4 приложения использовали жизненный цикл приложений на базе SwiftUI, а в iOS 17 их число выросло до 14. В iOS 18 жизненный цикл приложений на базе SwiftUI теперь используют 19 приложений:
/Applications/Batteries.app/Batteries /Applications/ClarityCamera.app/ClarityCamera /Applications/ClarityPhotos.app/ClarityPhotos /Applications/FinanceUIService.app/FinanceUIService /Applications/FTMInternal-4.app/FTMInternal-4 /Applications/GAXApp.app/GAXApp /Applications/LimitedAccessPromptView.app/LimitedAccessPromptView /Applications/MusicRecognition.app/MusicRecognition /Applications/PASViewService.app/PASViewService /Applications/Preferences.app/Preferences /Applications/Print Center.app/Print Center /Applications/ProductKitViewer.app/ProductKitViewer /Applications/SafetyMonitorApp.app/SafetyMonitorApp /Applications/ShazamEventsApp.app/ShazamEventsApp /private/var/staged_system_apps/Calculator.app/Calculator /private/var/staged_system_apps/Passwords.app/Passwords /private/var/staged_system_apps/Weather.app/Weather /System/Library/CoreServices/AegirProxyApp.app/AegirProxyApp /System/Library/CoreServices/ShortcutsActions.app/ShortcutsActions
В iOS 18 появились новые приложения, использующие жизненный цикл приложений на основе SwiftUI:
- Calculator
- Passwords
- Print Center
- GAXApp связанное с фичей Guided Access
- LimitedAccessPromptView для доступа к контактным данным человека
- ProductKitViewer
Эволюция языков программирования
Проанализировав все основные релизы iOS, начиная с iPhone OS 1.0 и заканчивая iOS 18, мы можем увидеть эволюцию языков программирования, используемых в iOS. Еще раз обратите внимание, что один бинарный файл может быть учтен несколько раз, поэтому сумма двоичных файлов на этом графике больше, чем общее количество двоичных файлов:
Некоторые тенденции можно лучше представить с помощью процентного соотношения:
UIKit против SwiftUI
До сих пор мы сравнивали SwiftUI со всеми файлами. Поскольку SwiftUI — это фреймворк пользовательского интерфейса, было бы справедливее сравнивать его с другими файлами, отображающими какой-либо пользовательский интерфейс. Нативные приложения для iOS могут быть созданы с помощью двух различных фреймворков пользовательского интерфейса: UIKit и SwiftUI (обратите внимание, что можно смешивать оба). Мой подход к подсчету количества двоичных файлов, содержащих пользовательский интерфейс, не идеален, но должен дать приблизительную тенденцию. Я просто проверяю, линкуются ли бинарные файлы с фреймворками UIKit или SwiftUI.
В iOS 18 количество приложений, использующих UIKit, выросло всего на 8%, в то время как количество приложений, использующих SwiftUI, выросло более чем на 50%:
Мы можем четко проследить эту тенденцию с помощью процентных соотношений:
Интересно отметить, что в iOS 18 появился новый фреймворк SwiftUICore, который используется в UIKitCore (и косвенно в UIKit). Вероятно, это было сделано для того, чтобы помочь интегрировать низкоуровневый код SwiftUI с UIKit.
Расширенная функция BlastDoor
В iOS 14 появилась новая функция безопасности под названием BlastDoor, призванная помочь защитить систему путем изоляции недоверенных данных, поступающих через Messages и Apple Identity Services (IDS).
iOS 18, похоже, BlastDoor расширили, чтобы помочь предотвратить атаки из большего количества источников:
/System/Library/PrivateFrameworks/BlastDoor.framework/BlastDoor /System/Library/PrivateFrameworks/BlastDoor.framework/Resources/BlastDoorPosterArchiveBridging.bundle/BlastDoorPosterArchiveBridging (NEW) /System/Library/PrivateFrameworks/CTBlastDoorSupport.framework/CTBlastDoorSupport (NEW) /System/Library/PrivateFrameworks/IDSBlastDoorSupport.framework/IDSBlastDoorSupport /System/Library/PrivateFrameworks/IDSBlastDoorSupport.framework/XPCServices/IDSBlastDoorService.xpc/IDSBlastDoorService /System/Library/PrivateFrameworks/MediaAnalysisBlastDoorSupport.framework/MediaAnalysisBlastDoorSupport (NEW) /System/Library/PrivateFrameworks/MediaAnalysisBlastDoorSupport.framework/XPCServices/MediaAnalysisBlastDoorService.xpc/MediaAnalysisBlastDoorService (NEW) /System/Library/PrivateFrameworks/MessagesBlastDoorSupport.framework/MessagesBlastDoorSupport /System/Library/PrivateFrameworks/MessagesBlastDoorSupport.framework/XPCServices/MessagesAirlockService.xpc/MessagesAirlockService /System/Library/PrivateFrameworks/MessagesBlastDoorSupport.framework/XPCServices/MessagesBlastDoorService.xpc/MessagesBlastDoorService /System/Library/PrivateFrameworks/TelephonyBlastDoorSupport.framework/TelephonyBlastDoorSupport (NEW) /System/Library/PrivateFrameworks/TelephonyBlastDoorSupport.framework/XPCServices/TelephonyBlastDoorService.xpc/TelephonyBlastDoorService (NEW)
На момент написания этой статьи документация по безопасности платформы Apple еще не была обновлена для iOS 18, но мне не терпится узнать больше об этих новых функциях безопасности.
Secure Enclave
Secure Enclave — это аппаратный компонент безопасности, изолированный от основного процессора и обеспечивающий дополнительный уровень защиты. Изначально он был представлен в iPhone 5S для обеспечения безопасности конфиденциальных пользовательских данных, играя важную роль в работе Touch ID, Face ID и Apple Pay.
В сессии «Что нового в Swift» (5:35) на WWDC22 Apple заявила, что Swift теперь подходит для ограниченных сред, таких как процессор Secure Enclave.
Secure Enclave в iOS 17 и iOS 18 содержит одинаковое количество файлов. К моему удивлению, двоичный файл dxio был переименован в dxio_swift. Однако краткий анализ этого двоичного файла не выявил типичных артефактов Swift. Это можно объяснить использованием специализированного компилятора Swift со специальными оптимизациями. Пока не будет проведен более детальный анализ, я буду считать, что этот двоичный файл использует Swift:
Необработанные данные
Ниже вы можете загрузить исходные данные, которые я сгенерировал для всех основных версий iOS, начиная с iPhone OS 1.0 и заканчивая iOS 18.0.
Version | Device | Raw Data |
---|---|---|
iOS 18.0 (22A3354) | iPhone 15 Pro | iOS18.txt |
iOS 17.0.2 (21A350) | iPhone 15 Pro | iOS17.txt |
iOS 16.0.2 (20A380) | iPhone 14 Pro | iOS16.txt |
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 |
Заключение
Несмотря на то что у нас нет доступа к исходному коду iOS, мы можем определить языки программирования, используемые для создания встроенных приложений в iOS, и проследить эволюцию этих языков с iPhone OS 1.0 до iOS 18.
Неудивительно, что в этом году количество приложений, использующих Swift и SwiftUI, продолжило расти. В iOS 18, похоже, Apple также начинает или планирует использовать Swift на низком уровне в Secure Enclave.
Как уже говорилось ранее, такой подход имеет очевидные ограничения, и хотя я считаю общую картину точной, я не могу гарантировать, что результаты будут идеально точными. Если вы считаете, что я что-то упустил, пожалуйста, свяжитесь со мной в Mastodon @timac@mastodon.social.