Один код — три интерфейса: опыт сборки приложения под macOS, Windows и Linux

Один код — три интерфейса: опыт сборки приложения под macOS, Windows и Linux

Разработчик поделился опытом создания одного и того же приложения PullYard сразу в трёх нативных версиях — на SwiftUI, WinUI 3 и GTK 4. Это редкий случай, когда автор отказался от кросс-платформенных фреймворков вроде Electron или Tauri и объяснил, почему.

PullYard начинался как «GitHub Lite» — быстрый способ проверять комментарии к pull request’ам, потому что браузер слишком нагружал компьютер. Затем появилась функция «Fix with agent»: она читает комментарии ревью, формирует из них промпт и запускает агентную сессию для исправлений. Постепенно весь цикл — открыть PR, отревьюить, исправить, запросить повторное ревью — переехал внутрь приложения.

Три версии и их цифры

Сегодня приложение существует трижды: Swift/SwiftUI для macOS, C#/WinUI 3 для Windows и Rust/GTK 4 для Linux. Общего кода между ними нет. Запустить версии для Windows и Linux удалось за один день, но это касалось только запуска и минимальной функциональности — дальше пришлось серьёзно работать над безопасностью, утечками памяти и множеством исправлений.

Масштаб сопоставим: около 35 тысяч строк Swift (123 файла), примерно 38 тысяч строк C# плюс XAML и веб-ассеты (142 файла), и порядка 54 тысяч строк Rust, включая встроенные тесты (124 файла). Размеры дистрибутивов тоже различаются: DMG для macOS — около 10 МБ, .deb для Linux — около 5 МБ, а установщик для Windows — примерно 63 МБ, потому что он самодостаточен и включает рантайм .NET 8 и Windows App SDK.

Автор честно признаёт: «нативность» местами означает веб-вью. На macOS diff — это AppKit NSTableView, а беседы и отрендеренный Markdown — WKWebView. На Windows diff и чат с агентом — HTML в WebView2, а список файлов — WinUI ListView. На Linux diff — gtk::ListView с кастомной отрисовкой строк, а HTML беседы — WebKitGTK. Выбор WebView2 для diff на Windows объясняется необходимостью подсветки синтаксиса для многих языков и скорости на больших файлах.

Почему не кросс-платформенный фреймворк

Автор не считает кросс-платформенные фреймворки ошибочными, но для этого приложения причины были конкретными: главный экран — гигантский прокручиваемый diff, и плавность зависит от родного списка и рендеринга текста. Кроме того, у каждой платформы свои представления о том, где что живёт: бейдж в меню-баре на macOS, иконка в трее на Windows, заголовочные панели libadwaita в GNOME, а также Keychain, Credential Manager и Secret Service. Имитировать это из общего слоя можно, но платформенный код всё равно придётся писать. Цена решения очевидна: втрое больше кода для написания и поддержки.

Полный разбор с цифрами и деталями доступен в материале автора — подробности на DEV Community.

Что это значит

Для команд, выбирающих между «одним кодом на всех» и нативными версиями, этот опыт — полезный ориентир. Кросс-платформенный подход экономит ресурсы, но нативные интерфейсы дают контроль над производительностью и системной интеграцией. Решение зависит от того, насколько критичны для продукта плавность работы со сложными списками и глубокое погружение в каждую ОС.

Изучение разных подходов к построению интерфейсов помогает принимать более осознанные архитектурные решения — узнайте больше.

📌 Чтобы не пропустить новые публикации, подписывайтесь там, где вам удобнее: Дзен или MAX.

💛 Если статья оказалась полезной, поддержите автора донатом.

Материал подготовлен на основе информации из открытых источников. Все права на исходные материалы принадлежат их авторам. Если вы являетесь правообладателем и возражаете против использования, свяжитесь с нами по адресу info@11st.press.

Related Posts

ИИ научился управлять ИИ: программисты переживают второй кризис за год

ИИ научился управлять ИИ: программисты переживают второй кризис за годПомните, как в начале года мы все учились разговаривать с кодовыми агентами? Осваивали промпты, гордились, что умеем заставить Claude Code или Codex писать код за нас. А теперь появился инструмент, который умеет управлять этими агентами сам — и это меняет правила игры.Речь о GrokBot — системе,…

Kubernetes снова обновился: что важно знать, если вы деплоите в облако

Kubernetes снова обновился: что важно знать, если вы деплоите в облакоЕсли ваши сервисы живут в Kubernetes, вы наверняка привыкли, что «стабильных» релизов не бывает слишком много. Очередная версия платформы приносит не только свежие фичи, но и напоминание: инфраструктурный код требует такого же ухода, как и приложение. Давайте спокойно разберёмся, что там внутри и почему это…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Возможно, вы пропустили

Что посмотреть на этих выходных: детектив с Кириллом Кяро, криминальная драма с Янковским и не только

  • От sbrayn
  • 13 ноября, 2026
  • 2 views
Что посмотреть на этих выходных: детектив с Кириллом Кяро, криминальная драма с Янковским и не только

Цифровой рубль вошёл в нашу жизнь: что это значит для кошелька и повседневных платежей

  • От sbrayn
  • 13 ноября, 2026
  • 6 views
Цифровой рубль вошёл в нашу жизнь: что это значит для кошелька и повседневных платежей

IPO снова в моде: почему бизнес спешит на биржу

  • От sbrayn
  • 13 ноября, 2026
  • 11 views
IPO снова в моде: почему бизнес спешит на биржу

Без уколов: умные часы смогут следить за сахаром в крови

  • От sbrayn
  • 13 ноября, 2026
  • 11 views
Без уколов: умные часы смогут следить за сахаром в крови

Boston Dynamics поставила Atlas на колёса — и он сразу выдал пируэт

  • От sbrayn
  • 13 ноября, 2026
  • 7 views
Boston Dynamics поставила Atlas на колёса — и он сразу выдал пируэт

Убыток в 8 миллионов, но есть и хорошая новость: разбираем отчёт Economatica

  • От sbrayn
  • 13 ноября, 2026
  • 6 views
Убыток в 8 миллионов, но есть и хорошая новость: разбираем отчёт Economatica