Экспертиза · Десктопные приложения
Приложения, которые устанавливаются на компьютер. На 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 — не на опыте, которого у нас нет.