A szokásos megoldás: négy külön alkalmazás

Egy alkalmazást négy platformra általában négyszer írnak meg: Swiftben iOS-re és macOS-re, Kotlinban Androidra, Windowsra pedig C#-ban vagy webes technológiával. Ez négy kódbázis, gyakran négy csapat, és minden új funkciót négyszer kell elkészíteni, tesztelni és karbantartani. A változatok közben szinte biztosan eltérnek egymástól.

A mi megoldásunk: egy Rust-kódbázis

A ChatLord natív kliensében a felület és a logika is Rustban készül. A felületet az egui könyvtár rajzolja ki, amely minden platformon ugyanúgy működik, így ugyanaz a kód fordul le mind a négy rendszerre. Egy új funkciót egyszer kell megírni, és egyszerre jelenik meg mindenhol.

A böngészős változat külön webes kliens, de ugyanahhoz a Rust-szerverhez kapcsolódik, ugyanazzal a protokollal. Amit a szerver tud, azt minden kliens ugyanúgy látja.

Ami platformonként eltér

Az egy kódbázis nem azt jelenti, hogy a platformok közötti különbségekkel nem kell foglalkozni. Ezeket a részeket külön kezeljük, hogy az alkalmazás mindenhol természetesen működjön:

  • Az értesítések iOS-en az Apple, Androidon a Firebase, böngészőben a Web Push szolgáltatásán keresztül érkeznek
  • Windowson a rendszer saját értesítései és telepítője, macOS-en lemezkép
  • Telefonon a képernyő-billentyűzet, tableten az egér és a fizikai billentyűzet
  • A telefonnal készült fotók tájolása feltöltéskor
  • A hanghívás WebRTC-n megy, és minden eszközön kicseng

Mit nyer ezzel a megrendelő?

Ha egy cégnek mobilapp és asztali program is kell, így nem két-három külön projektet fizet, hanem egyet. A fejlesztés gyorsabb, a karbantartás olcsóbb, és nem fordul elő, hogy egy funkció már működik iPhone-on, Androidon viszont még hónapokig nem.

  • Egy kódbázis, egy csapat, egy hibalista
  • Az új funkciók minden platformon egyszerre jelennek meg
  • Megmarad a natív sebesség, nincs böngészőbe csomagolt felület

Mikor kell mégis külön natív kód?

Ha egy alkalmazás egy platform nagyon speciális lehetőségeire épül, például mély rendszerintegrációra vagy egyedi grafikai effektekre, ott a platform saját eszközei jobbak lehetnek. Az üzleti alkalmazások többségénél azonban ez nem kérdés, és a közös kódbázis előnyei jóval nagyobbak.