Ekspertyza · Aplikacje desktopowe
Aplikacje, które instaluje się na komputerze. Na macOS zbudowaliśmy dwie; dla Windows i Linux ta strona jest ofertą, nie historią.
Budujemy natywne aplikacje dla macOS, z rdzeniem logiki oddzielonym od ekranu, tak aby ta sama logika działała też na telefonie. Dla Windows i Linux/Ubuntu nie mamy jeszcze nic dostarczonego i zapisujemy to wprost, wraz z warunkami, w których przyjęlibyśmy pracę. Pierwsze pytanie pozostaje takie, czy rzeczywiście potrzebna jest zainstalowana aplikacja.
Oferta, z warunkamiReguła jest mechaniczna i stosuję ją mechanicznie. Na macOS mamy dwie własne, zbudowane i uruchamialne implementacje: aplikację paska menu z 25 plikami Swift, która ponownie wykorzystuje 15 plików z rdzenia projektu iPhone, oraz drugą, prostszą aplikację, która jest osłoną WebKit nad aplikacją webową. Obie mają skompilowany binarny plik na tym komputerze. Ale usługa, jak ją nazywamy, obejmuje trzy rodziny systemów, a dla dwóch z nich — Windows i Linux/Ubuntu — szukałem poważnie i znalazłem zero: żadnego własnego projektu .NET ani Qt, żadnego `tauri.conf.json`, żadnego napisanego przez nas Electrona, żadnego `.desktop`, żadnego pakietu deb, rpm ani AppImage. Ponadto żadna z dwóch aplikacji na macOS nigdy nie została spakowana w instalator do dystrybucji. Przy pokryciu tylko jednej z trzech platform i zerze dystrybucji strona jest pisana jako oferta z warunkami. Gdy dostarczymy pierwszą aplikację na Windows lub Linux, zmieni się wartość, nie tekst.
Pierwsze pytanie, które zadajemy, nie brzmi: na jaki system, lecz czy naprawdę potrzebujesz zainstalowanej aplikacji. Warto ją instalować, gdy potrzebuje czegoś, czego przeglądarka nie daje: bezpośredniego dostępu do czujników lub peryferiów, stałej obecności na pasku systemowym, pracy bez internetu, dostępu do plików na dysku bez konieczności wgrywania ich za każdym razem albo działania w tle, gdy okno jest zamknięte. Jeśli żadna z tych rzeczy nie jest wymagana, strona otwierana z linku jest tańsza do zbudowania, aktualizacji i utrzymania — i mówimy to, nawet jeśli zlecenie wyjdzie mniejsze.
Na macOS mamy dwie zbudowane aplikacje. Pierwsza to aplikacja paska menu: 25 własnych plików Swift plus 15 plików rdzenia wziętych bezpośrednio z projektu iPhone tego samego produktu — te same pliki, nie kopia. Buduje się ją skryptem, który wywołuje bezpośrednio kompilator Swift, cel `arm64-apple-macosx14`, łącząc jedenaście frameworków systemowych, w tym SwiftUI, AppKit, CoreMotion, Vision i UserNotifications. Wynikowy binar ma 6.516.128 bajtów. Druga jest dużo prostsza i uczciwie powiedzieć, że składa się z trzech plików Swift, jest opakowaniem WebKit nad aplikacją webową, z włączonym sandboxem i utwardzonym runtime, skompilowana uniwersalnie dla procesorów Intel i Apple. To są dwa różne rzeczy i nazywamy je różnie.
Czego nie mamy, jasno powiedziane. Windows: zero. Szukałam/szukałem projektów .NET, WPF, WinForms, WinUI, plików `.xaml`, `.appxmanifest`, `.msi`, `.wxs` — wszystko, co znaleziono na dysku, należy do biblioteki C strony trzeciej, vendoryzowanej w innym projekcie, której nie napisaliśmy. Linux desktop: zero — żadnego pliku `.desktop`, żadnego pakietu deb ani AppImage zbudowanego tutaj. Electron ani Tauri napisane przez nas: zero. I, co równie ważne: żadna z dwóch aplikacji na macOS nigdy nie została spakowana w instalator. Istnieją jako pakiety `.app` zbudowane lokalnie, podpisane ad hoc, bez identyfikatora zespołu.
Co mimo wszystko przenosi doświadczenie dotychczasowe, i to jest część, która liczy się przy nowym projekcie: dyscyplina trzymania rdzenia logiki oddzielnie od interfejsu. W projekcie macOS pliki obliczeń i polityk nie importują interfejsu, więc kompilują się i uruchamiają na Macu jako zwykły program, bez symulatora; ich zestaw logiki działa w kilka sekund. To samo rozdzielenie sprawia, że portowanie na inny system jest kwestią opakowania, a nie przepisania. Na tym opieramy się, gdy mówimy, że moglibyśmy zrobić Windows albo Linux — nie na doświadczeniu, którego nie mamy.