# Побудувала нативний клієнт для macOS на Swift 6

Побудувала нативний клієнт обміну повідомленнями для macOS на Swift 6 і SwiftUI — 11 141 рядок у 53 файлах — поверх C‑інтерфейсу ядра на Rust, злінкованого як статичний архів із зафіксованої ревізії.

серпень 2026

**Ситуація.** Протокол обміну повідомленнями мав добре протестоване ядро на Rust і клієнти для кількох платформ, але настільна версія для macOS була кросплатформною оболонкою: вона не мала вигляду застосунку для Mac, не поводилася як такий застосунок і тягнула за собою середовище виконання, яке нативному застосунку не потрібне. Ядро надає свої можливості через C‑інтерфейс, тобто будувати на ньому може будь‑яка мова, здатна викликати C, — а Swift здатна.

**Завдання.** Нативний клієнт треба було створити безпосередньо на цьому C‑інтерфейсі, актуальною мовою платформи та на її актуальному фреймворку для інтерфейсу користувача, причому ядро мало бути скомпоноване із застосунком, а не постачатися поруч.

**Дія.** Застосунок — це 11 141 рядок Swift у п'ятдесяти трьох файлах цілі застосунку; він побудований на SwiftUI, а ядро скомпоновано з ним як статичний архів, зібраний із закріпленої ревізії основного репозиторію. Саме закріплення ревізії замість стеження за гілкою робить збірку відтворюваною: C‑інтерфейс — це контракт, а ядро, яке постійно змінюється, змінює контракт, не змінюючи жодного рядка Swift. Шари побудовано так, щоб небезпечна поверхня лишалася малою: тонка обгортка володіє кожним вказівником і кожним рядком, що перетинає межу, моделі над нею — звичайні значення Swift, а шар інтерфейсу користувача ніколи не бачить сирого вказівника. Для всього, що повертає C‑інтерфейс, діє правило володіння, і помилка в будь‑якому з них призводить або до витоку пам'яті, або до аварійного завершення, причому компілятор ні про що не попереджає, тож саме в обгортці зосереджена вся дисципліна роботи з пам'яттю в проєкті. Збіркою керує інструмент запуску завдань із п'ятдесятьма шістьма цілями, які охоплюють компіляцію ядра, збірку Swift, набори тестів, лінтери та пакування.

**Результат.** Нативний клієнт, який запускається як застосунок для Mac, використовує власні матеріали й елементи керування платформи та не містить вбудованого браузера. Варто прямо сказати, чого не зроблено: це не випущений реліз. Немає ні розповсюдження нотаризованих збірок, ні каналу оновлень, а інтерфейс доступний лише однією мовою, тож це робочий застосунок, а не продукт, яким користується хтось іще.

---

- Роль: Інженер застосунків macOS
- Категорії: [Архітектура рішень](https://engineer.company/uk/categories/solution-architecture/), [Frontend‑розробка](https://engineer.company/uk/categories/frontend/), [Full‑Stack‑розробка](https://engineer.company/uk/categories/full-stack/), [API та інтеграції](https://engineer.company/uk/categories/api/), [Дизайн‑системи та UI](https://engineer.company/uk/categories/design-systems/), [UX / UI‑дизайн](https://engineer.company/uk/categories/ux-ui/)
- Послуги: [Архітектура платформи та рішень](https://engineer.company/uk/services/platform-architecture/), [Frontend‑розробка](https://engineer.company/uk/services/frontend-development/), [Full‑Stack‑розробка продуктів](https://engineer.company/uk/services/full-stack-development/), [UI/UX‑дизайн та дизайн‑системи](https://engineer.company/uk/services/ui-ux-design/)

<https://engineer.company/uk/portfolio/built-a-native-macos-client-in-swift-6/>
