# Byggde en native meddelandeklient för macOS i Swift 6 och SwiftUI — 11 141 rader i 53 filer — ovanpå C‑gränssnittet till en Rust‑kärna som länkas som ett statiskt arkiv från en låst revision.

augusti 2026

**Situation.** Meddelandeprotokollet hade en vältestad kärna skriven i Rust och klienter på flera plattformar, men skrivbordsupplevelsen på macOS var ett plattformsoberoende skal — den såg inte ut som en Mac‑app, betedde sig inte som en och bar på en körmiljö som en nativ app inte behöver. Kärnan exponerar sin funktionalitet via ett C‑gränssnitt, vilket innebär att varje språk som kan anropa C kan bygga på den, och det kan Swift.

**Uppgift.** En nativ klient måste byggas direkt på det C‑gränssnittet, i plattformens nuvarande språk och nuvarande gränssnittsramverk, med kärnan inlänkad i stället för levererad vid sidan av.

**Handling.** Appen består av 11 141 rader Swift i femtiotre filer i appens target, byggd på SwiftUI med kärnan länkad som ett statiskt arkiv kompilerat från en fastlåst uppströmsrevision. Att låsa revisionen i stället för att följa en gren är det beslut som gör bygget reproducerbart: C‑gränssnittet är kontraktet, och en kärna i rörelse ändrar kontraktet utan att en enda rad Swift ändras. Skiktningen håller den osäkra ytan liten — en tunn wrapper äger varje pekare och varje sträng som korsar gränsen, modellerna ovanför är vanliga Swift‑värden och gränssnittsskiktet ser aldrig en rå pekare. Allt som C‑gränssnittet returnerar har en ägarskapsregel, och ett misstag i någon av dem ger antingen en läcka eller en krasch utan en enda kompilatorvarning på vägen, så det är i wrappern som hela projektets minnesdisciplin finns. Bygget drivs av en task runner med femtiosex mål som täcker kompileringen av kärnan, Swift‑bygget, testsviterna, lintverktygen och paketeringen.

**Resultat.** En nativ klient som startar som en Mac‑app, använder plattformens egna material och kontroller och inte bär på någon inbäddad webbläsare. Det som inte är gjort bör sägas rakt ut: detta är ingen levererad release. Det finns ingen notariserad distribution, ingen uppdateringskanal och bara ett språk i gränssnittet, så det är en fungerande app snarare än en produkt som någon annan kör.

---

- Roll: Applikationsingenjör för macOS
- Kategorier: [Lösningsarkitektur](https://software.engineer.company/sv/categories/solution-architecture/), [Frontendutveckling](https://software.engineer.company/sv/categories/frontend/), [Fullstackutveckling](https://software.engineer.company/sv/categories/full-stack/), [API:er och integration](https://software.engineer.company/sv/categories/api/), [Designsystem och UI](https://software.engineer.company/sv/categories/design-systems/), [UX/UI‑design](https://software.engineer.company/sv/categories/ux-ui/)
- Tjänster: [Plattforms- och lösningsarkitektur](https://software.engineer.company/sv/services/platform-architecture/), [Frontendutveckling](https://software.engineer.company/sv/services/frontend-development/), [Fullstackutveckling av produkter](https://software.engineer.company/sv/services/full-stack-development/), [UI/UX‑design och designsystem](https://software.engineer.company/sv/services/ui-ux-design/)

<https://software.engineer.company/sv/portfolio/built-a-native-macos-messaging-client-in-swift-6-154/>
