Site icon AppTractor

Использование Apple Swift и SwiftUI в iOS 18

Как и в случае с предыдущими версиями iOS, давайте проанализируем встроенные приложения iOS 18, чтобы ответить на несколько вопросов. Сколько бинарных файлов содержит iOS 18? Какие языки программирования использовались для разработки приложений? Сколько приложений написано на Swift? Какой процент приложений использует SwiftUI по сравнению с UIKit?

Методология

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

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

Количество бинарных файлов

Давайте сначала ответим на простой вопрос — сколько бинарных файлов содержится в iOS 18? Количество файлов, составляющих iOS, продолжает расти: iOS 18 содержит 6800 бинарных файлов, по сравнению с 6030 в iOS 17. Это 770 новых файлов.

Swift и SwiftUI в iOS 18

Неудивительно, что в этом году количество приложений, использующих SwiftUI, продолжает расти. Среди них можно отметить следующие:

Новые технологии также опираются на Swift, например:

Кроме того, несколько других приложений и фреймворков теперь используют 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:

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

Проанализировав все основные релизы 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.

Дополнительно

Источник

Exit mobile version