Експертиза · Десктопні застосунки
Застосунки, які встановлюються на комп’ютер. На macOS ми побудували два; для Windows і Linux ця сторінка є пропозицією, а не історією.
Ми будуємо нативні додатки для macOS, із ядром логіки, відокремленим від екрана, щоб та сама логіка працювала і на телефоні. Для Windows і Linux/Ubuntu ми ще нічого не здали, і пишемо це саме так, з умовами, за яких ми б узялися за роботу. Перше питання залишається таким: чи справді вам потрібен встановлюваний додаток.
Пропозиція, з умовамиПравило механічне, і я застосовую його механічно. На macOS у нас є дві власні реалізації, зібрані й придатні до запуску: застосунок для панелі меню з 25 файлами Swift, який повторно використовує 15 файлів із ядра проєкту для iPhone, і другий, простіший застосунок, який є WebKit-обгорткою над вебзастосунком. Обидва мають скомпільований бінарник на цій машині. Але сервіс, як його названо, охоплює три сімейства систем, а для двох із них — Windows і Linux/Ubuntu — ми серйозно шукали і знайшли нуль: жодного власного проєкту .NET або Qt, жодного `tauri.conf.json`, жодного нашого Electron, жодного `.desktop`, жодного пакета deb, rpm або AppImage. Крім того, жоден із двох macOS-застосунків ніколи не був упакований у дистрибутивний інсталятор. Лише з однією з трьох платформ покриття і з нульовими дистрибуціями сторінка пишеться як пропозиція з умовами. Коли ми поставимо перший застосунок для Windows або для Linux, зміниться значення, а не текст.
Перше запитання, яке ми вам ставимо, не про систему, а про те, чи справді вам потрібен встановлений застосунок. Його варто встановлювати, коли йому потрібне щось, чого браузер не дає: прямий доступ до сенсорів або периферії, постійна присутність у системному лотку, робота без інтернету, доступ до файлів на диску без того, щоб людина завантажувала їх щоразу, або робота у фоновому режимі, коли вікно закрите. Якщо нічого з цього не потрібно, сайт, що відкривається з посилання, дешевший у побудові, оновленні та підтримці — і ми вам це скажемо, навіть якщо робота вийде меншою.
На macOS ми маємо дві зібрані програми. Перша — це програма для панелі меню: 25 власних файлів Swift, плюс 15 файлів ядра, взятих безпосередньо з iPhone-проєкту того самого продукту — ті самі файли, не копія. Вона збирається скриптом, який прямо викликає компілятор Swift, ціль `arm64-apple-macosx14`, з лінкуванням одинадцяти системних фреймворків, серед яких SwiftUI, AppKit, CoreMotion, Vision і UserNotifications. Отриманий бінарний файл має 6.516.128 байтів. Друга — значно простіша, і чесно сказати наскільки: три файли Swift, WebKit-обгортка поверх вебзастосунку, з увімкненими sandbox і hardened runtime, зібрана універсально для процесорів Intel і Apple. Це два різні речі, і ми називаємо їх по-різному.
Чого в нас немає, прямо сказано. Windows: нуль. Ми шукали .NET, WPF, WinForms, WinUI-проєкти, файли `.xaml`, `.appxmanifest`, `.msi`, `.wxs` — усе, що знайшли на диску, належить сторонній C-бібліотеці, завендореній в іншому проєкті, яку ми не писали. Linux desktop: нуль — жодного файлу `.desktop`, жодного deb-пакета чи AppImage, зібраного тут. Власноруч написані Electron або Tauri: нуль. І, що не менш важливо: жодна з двох macOS-програм ніколи не була упакована в інсталятор. Вони існують як локально зібрані пакети `.app`, підписані ad-hoc, без ідентифікатора команди.
Що все ж передає досвід, який є на цей момент, і це та частина, що має значення для нового проєкту: дисципліну тримати ядро логіки окремо від інтерфейсу. У macOS-проєкті файли обчислень і політик не імпортують інтерфейс, тож вони компілюються і запускаються на Mac як звичайна програма, без симулятора; їхній набір логіки працює за кілька секунд. Така сама роздільність робить портування на іншу систему питанням обгортки, а не переписування. На це ми спираємося, коли говоримо, що могли б зробити Windows або Linux — не на досвід, якого в нас немає.