Исследования
Использование Apple AppKit, Mac Catalyst и SwiftUI в macOS
WWDC 2019 оказала большое влияние на инструменты разработки UI: в то время как почтенные API-интерфейсы AppKit оставались доступными, Apple удалила старые API-интерфейсы Carbon и представила 2 совершенно новых фреймворка — Mac Catalyst и SwiftUI.
Apple время от времени упоминает некоторые приложения, созданные с помощью этих новых инструментов. В этой статье я попытаюсь дать лучший обзор использования Apple AppKit, Mac Catalyst и SwiftUI в различных версиях macOS, от macOS Mojave до macOS Ventura.
AppKit, Mac Catalyst и SwiftUI
Начиная с macOS Catalina, разработчики могут создавать нативный пользовательский интерфейс для своих Mac приложений, используя 3 различные технологии пользовательского интерфейса: AppKit, Mac Catalyst и SwiftUI. Если вы не знакомы с этими технологиями, вот краткое описание.
AppKit
AppKit — это старый набор инструментов Cocoa, доступный разработчикам Mac, начиная с Mac OS X 10.0. Это мощное и зрелое решение, но совсем не будущее Mac разработки, как было ясно объяснено во время WWDC 2022 State of the Union.
Почему я использовал AppKit для разработки Dependencies, приложения для анализа файлов dSYM и создания интерактивного графа? Dependencies основан на большом количестве C++ кода, использование Objective-C и AppKit было самым простым решением.
![]()
Mac Catalyst
Нативные приложения для iOS используют UIKit, производный фреймворк от AppKit. Mac Catalyst — это технология для переноса приложения iOS с помощью UIKit на Mac.
Clatters, мое iOS-приложение для мониторинга ключевых слов в Twitter, Reddit и HackerNews, может стать отличным кандидатом на использование Mac Catalyst.
![]()
SwiftUI
На WWDC 2019 Apple не только представила Mac Catalyst, но также анонсировала SwiftUI, совершенно новый UI фреймворк для декларативного создания пользовательского интерфейса. SwiftUI все еще молод, но быстро развивается и является будущим разработки для iOS и Mac. SwiftUI — это технология, которую мы используем для создания новых приложений в Eimy.
![]()
Методология и инструменты
Методология и инструменты для этой статьи аналогичны тем, которые я использовал для iOS. Если вас интересует углубленный анализ iOS, вам лучше ознакомиться с моей статьей “Эволюция языков программирования: использование Swift, SwiftUI и Obj-C в iOS 15”.
Для этой статьи я создал скрипт, который:
- Обнаруживает приложение Mac Catalyst, проверяя, ссылается ли двоичный файл на UIKit /System/iOSSupport/System/Library/Frameworks/UIKit.framework/Versions/A/UIKit
- Определяет, использует ли приложение SwiftUI, проверяя, ссылается ли двоичный файл на /System/Library/Frameworks/SwiftUI.framework/Versions/A/SwiftUI
- Определяет, использует ли приложение AppKit, проверяя, ссылается ли двоичный файл на /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
- Определяет, является ли приложение приложением AppKit или приложением SwiftUI, проверяя символы NSApplicationMain и s7SwiftUI3AppPAAE4mainyyFZ.
- Я исключил все двоичные файлы, расположенные внутри /System/iOSSupport, поскольку эти двоичные файлы поддерживают только приложения Mac Catalyst и iOS.
Вы можете скачать скрипт detectUIFramework.sh здесь.
Прежде чем углубляться в детали, обратите внимание:
- В этой статье рассматриваются только двоичные файлы, использующие нативные UI фреймворки и непосредственно встроенные в macOS.
- В macOS Big Sur и более поздних версиях я также учитывал фреймворки, расположенные внутри общего кэша dyld.
- Наконец, вы должны принять этот анализ с долей сомнения. Хотя я считаю, что общая картина верна, мой подход имеет некоторые ограничения из-за того простого факта, что у меня нет доступа к исходному коду macOS и я полагался на неточные артефакты компиляции.
AppKit против Mac Catalyst против SwiftUI
Хороший обзор распределения AppKit, Mac Catalyst и SwiftUI можно увидеть, сгруппировав приложения в 3 категории:
- Приложения Mac Catalyst (они также могут использовать SwiftUI и AppKit)
- Приложения, использующие SwiftUI (они не используют Mac Catalyst, но могут использовать AppKit)
- Приложения, использующие только AppKit
Как вы можете видеть на графике:
- Приложения AppKit составляют огромный процент приложений
- После медленного старта количество приложений, использующих SwiftUI, быстро растет.
- Количество приложений Mac Catalyst достигло потолка
![]()
Детальный анализ
macOS Mojave: эксперимент с Marzipan
С macOS Mojave Apple перенесла 4 приложения с iOS на macOS, используя Marzipan, внутреннее название технологии Mac Catalyst:
- Home
- News
- Stocks
- Voice Memos
Marzipan был ограничен собственным использованием Apple и не был открыт для сторонних разработчиков. С помощью этой совершенно новой технологии было сделано всего 4 приложения, которые вряд ли чем-нибудь рисковали.
macOS Catalina: представлены Mac Catalyst и SwiftUI
С macOS Catalina Apple открыла Mac Catalyst для сторонних разработчиков, одновременно протестировав его в 3 новых приложениях:
- FindMy
- PhotoPicker from the Photos app
- Podcasts
SwiftUI также был представлен, но только одно приложение использовало эту технологию в macOS Catalina: приложение «Контакты», эксперимент с низким уровнем риска.
macOS Big Sur: больше не эксперимент
В macOS Big Sur несколько важных приложений перешли на Mac Catalyst:
- Maps
- Messages
- Screen Time
- Weather Widget
Несколько других приложений начали использовать SwiftUI, в том числе:
- Control Center
- Dock.prefpane
- Keychain Access
- Game Center
- NotificationCenter
- PhotosUIApps (закрытый фреймворк)
Также стоит отметить, что в macOS Big Sur представили переработанные виджеты для Центра уведомлений. Эти виджеты созданы с помощью WidgetKit, фреймворка SwiftUI:
- Calendar
- Clock
- Notes
- Photos
- Reminder
macOS Monterey: совершенно новые приложения SwiftUI
В macOS Monterey только несколько новых приложений были созданы с использованием Mac Catalyst:
- Books
- Center Stage (CinematicFramingOnboardingUI)
- Xcode Previews
Что более интересно, так это список новых приложений, использующих SwiftUI. Стоит отметить:
- Diagnostics Reporter
- Feedback Assistant
- HelpViewer
- Monterey Screensaver
- Shortcuts
- Translation
К Dock.prefpane также присоединились 2 новых префпана:
- Displays.prefPane
- Notifications.prefPane
И несколько приватных фреймворков начали использовать SwiftUI:
- ChartSerializationUI
- CoreChartSwift
- Feedback
- FocusSettingsUI
- MusicKitInternal
- NotesUI
- PreviewsInjection
- ScreenTimeUICore
- SleepHealthUI
- TipsUI
- VideosUI
macOS Ventura: будущее за SwiftUI
В macOS Ventura, кажется, Apple перенесла оставшиеся приложения iOS на Mac. Было добавлено всего 3 новых приложения:
- Clock
- Continuity Camera’s onboarding (ContinuityCaptureOnboardingUI)
- Weather
С другой стороны, пара приложений была переписана на SwiftUI:
- Font Book
- System Settings
- Tips
Также стоит отметить, что эти закрытые фреймворки теперь используют SwiftUI:
- CloudSharingUI
- PasswordManagerUI
- PaymentUI (Apple Pay)
- SharedWithYou
- ShazamKitUI
Более детальный анализ
На следующем графике я разделил приложения на 6 категорий:
- Приложения Catalyst, использующие SwiftUI
- Приложения Catalyst без SwiftUI
- Приложения SwiftUI, использующие AppKit
- Приложения SwiftUI без использования AppKit
- Приложения AppKit, использующие SwiftUI
- Приложения AppKit без SwiftUI
![]()
Вывод
Несмотря на то, что у нас нет доступа к исходному коду macOS, мы можем измерить использование Mac Catalyst и SwiftUI во встроенных приложениях.
Как мы видим, выпуск Mac Catalyst тщательно планировался в течение нескольких лет. Apple изначально использовала эту новую технологию для приложений с низким уровнем риска, а затем применила ее для более важных приложений, таких как Карты и Сообщения. Спустя 4 года после его появления количество приложений, использующих Mac Catalyst, похоже, не изменилось. Скорее всего, Apple уже перенесла все существующие приложения на Mac и теперь использует SwiftUI для своих новых приложений.
Apple применила аналогичный подход для SwiftUI. Первые годы были экспериментом с небольшим количеством приложений с низким уровнем риска. Использование SwiftUI начало быстро расти с macOS Monterey. В macOS Ventura 12% приложений теперь используют SwiftUI.
Как упоминалось ранее, этот подход имеет некоторые ограничения, и, хотя я считаю, что общая картина точна, я не могу гарантировать, что результаты будут абсолютно точными. Если вы считаете, что я что-то упустил, напишите мне в Twitter.
Дополнение
Стив Тротон-Смит указал, что /System/iOSSupport — это значительная часть macOS, и поэтому нельзя игнорировать двоичные файлы в этой папке (и связанные с ними фреймворки в общем кэше dyld). В первоначальном анализе я исключил все двоичные файлы, расположенные внутри /System/iOSSupport, поскольку они поддерживают только приложения Mac Catalyst и iOS.
Ниже приведен обновленный график, если вы включите /System/iOSSupport и сгруппируете приложения в 3 категории:
- Приложения Mac Catalyst (они также могут использовать SwiftUI и AppKit)
- Приложения, использующие SwiftUI (они не используют Mac Catalyst, но могут использовать AppKit)
- Приложения, использующие только AppKit
![]()
-
Разработка1 неделя назадДаем ИИ видеть SwiftUI: Xcode Preview MCP на практике — проблемы и надежды
-
Новости2 недели назадВидео и подкасты о мобильной разработке 2026.39
-
Новости3 недели назадВидео и подкасты о мобильной разработке 2026.38
-
Новости1 неделя назадВидео и подкасты о мобильной разработке 2026.40
