Connect with us

GitHub

Engine — быстрые идиоматические API и представления SwiftUI

Опубликовано

/

     
     

Engine — высокопроизводительный фреймворк для разработки фреймворков и приложений на SwiftUI. Engine упрощает создание идиоматических API и представлений, которые органично вписываются в SwiftUI без ущерба для производительности.

Главная идея Engine не в том, чтобы добавить еще десятки случайных helper-функций, а в том, чтобы закрыть реальные архитектурные пробелы SwiftUI. Пакет помогает строить собственные стилизуемые компоненты, работать с variadic view, организовывать совместимость между версиями SwiftUI и избегать некоторых дорогих по производительности решений вроде бездумного использования AnyView. Engine — фундамент для авторов UI-компонентов, дизайн-систем и внутренних фреймворков.

Что умеет Engine

Одна из самых сильных сторон пакета — поддержка собственных стилей представлений. В документации показаны два подхода: через макрос @StyledView и через ручную реализацию протоколов ViewStyle и ViewStyledView. По сути, Engine позволяет создавать компоненты, которые стилизуются почти так же естественно, как нативные элементы SwiftUI. Это особенно полезно, если вы делаете UI-kit, библиотеку компонентов или сложный продукт с несколькими темами оформления. При этом автор отдельно подчеркивает, что такой подход работает без опоры на AnyView, что и подается как одно из важных преимуществ по части производительности.

Вторая важная возможность — ViewAlias. Это механизм статического type erasure для View, который позволяет подменять или передавать содержимое без типичных издержек, связанных с AnyView. В документации прямо сказано, что ViewAlias можно использовать для стирания типа без ударов по производительности, если сравнивать с более привычными, но менее эффективными решениями. Для разработчика это означает больше свободы в проектировании API компонентов без немедленного перехода к тяжелым абстракциям.

Еще один сильный блок — VariadicViewAdapter и работа с коллекциями дочерних view. Engine позволяет преобразовывать одно SwiftUI-представление в набор под-представлений и дальше обрабатывать их, например через ForEachSubview. В документации это показано на примере кастомного picker-компонента. Практически это открывает двери к более сложным контейнерам и к кастомным UI-паттернам, которые в “чистом” SwiftUI реализуются заметно сложнее.

Отдельно стоит отметить VersionedView и VersionedViewModifier. Это инструменты для поддержки разных версий SwiftUI и платформенных API без избыточного if #available(...) в обычном body. Автор документации прямо пишет, что стандартный путь через if #available(...) может ухудшать производительность, потому что @ViewBuilder в таких местах способен приводить к AnyView, а код становится менее читаемым. Engine предлагает более аккуратную модель: разные реализации body для разных поколений платформ. Для библиотек и приложений с широкой поддержкой iOS/macOS это очень практичная вещь.

Почему пакет выглядит интересно

Сильнее всего Engine раскрывается там, где SwiftUI уже начинает упираться в ограничения архитектуры. Когда приложение простое, этот пакет может показаться избыточным. Но как только появляются кастомные компоненты, внутренний UI-фреймворк, дизайн-система, несколько платформ или необходимость аккуратно переиспользовать сложные view, его идеи становятся куда более ценными.

Пакет производит впечатление зрелого проекта. На Swift Package Index указано, что он находится в разработке около трех лет, содержит 105 коммитов, 88 релизов, не имеет открытых issue и pull request, а последняя версия была обновлена совсем недавно. Также индекс показывает совместимость со Swift 5.10, 6.0, 6.1 и 6.2, а среди платформ перечислены iOS, macOS, visionOS, watchOS, tvOS, Linux, Wasm и Android в матрице совместимости.

Плюс у проекта довольно понятные системные требования: минимальные deployment target — iOS 13, macOS 10.15, tvOS 13, watchOS 6, visionOS 1.0, а для разработки нужен Xcode 16.4+. Это делает пакет актуальным для современных SwiftUI-проектов, хотя и не для совсем старых toolchain-конфигураций.

Engine на GitHub: https://github.com/nathantannar4/Engine
Платформа: iOS
⭐️: 507
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

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

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