Connect with us

Исследования

Использование 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 было самым простым решением.

Использование Apple AppKit, Mac Catalyst и SwiftUI в macOS

Mac Catalyst

Нативные приложения для iOS используют UIKit, производный фреймворк от AppKit. Mac Catalyst — это технология для переноса приложения iOS с помощью UIKit на Mac.

Clatters, мое iOS-приложение для мониторинга ключевых слов в Twitter, Reddit и HackerNews, может стать отличным кандидатом на использование Mac Catalyst.

Использование Apple AppKit, Mac Catalyst и SwiftUI в macOS

SwiftUI

На WWDC 2019 Apple не только представила Mac Catalyst, но также анонсировала SwiftUI, совершенно новый UI фреймворк для декларативного создания  пользовательского интерфейса. SwiftUI все еще молод, но быстро развивается и является будущим разработки для iOS и Mac. SwiftUI — это технология, которую мы используем для создания новых приложений в Eimy.

Использование Apple AppKit, Mac Catalyst и SwiftUI в macOS

Методология и инструменты

Методология и инструменты для этой статьи аналогичны тем, которые я использовал для 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 достигло потолка

Использование Apple AppKit, Mac Catalyst и SwiftUI в macOS

Детальный анализ

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

Использование Apple AppKit, Mac Catalyst и SwiftUI в macOS

Вывод

Несмотря на то, что у нас нет доступа к исходному коду 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

Использование Apple AppKit, Mac Catalyst и SwiftUI в macOS

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: