# Har bygget en native macOS‑beskedklient i Swift 6 og SwiftUI — 11.141 linjer fordelt på 53 filer — oven på C‑grænsefladen til en Rust‑kerne linket som et statisk arkiv fra en fastlåst revision.

2025

**Situation.** Beskedprotokollen havde en velafprøvet kerne skrevet i Rust og klienter på flere platforme, men skrivebordsoplevelsen på macOS var en skal på tværs af platforme — den så ikke ud som et Mac‑program, opførte sig ikke som et, og bar en køretid, et hjemmehørende program ikke har brug for. Kernen blotlægger sin formåen gennem en C‑grænseflade, hvilket betyder, at ethvert sprog, der kan kalde C, kan bygge på den, og det kan Swift.

**Opgave.** En hjemmehørende klient skulle bygges direkte på den C‑grænseflade, i platformens nuværende sprog og nuværende grænsefladeramme, med kernen sammenkædet frem for udsendt ved siden af.

**Handling.** Programmet er 11.141 linjer Swift fordelt på treoghalvtreds filer i app‑målet, bygget på SwiftUI med kernen sammenkædet som et statisk arkiv oversat fra en fastlåst opstrømsrevision. At fastlåse revisionen frem for at følge en gren er den beslutning, der gør bygningen gentagelig: C‑grænsefladen er kontrakten, og en kerne i bevægelse ændrer kontrakten uden at ændre en linje Swift. Lagdelingen holder den usikre overflade lille — en tynd indpakning ejer hver pegepind og hver streng, der krydser grænsen, modeller over den er almindelige Swift‑værdier, og grænsefladelaget ser aldrig en rå pegepind. Alt, hvad C‑grænsefladen returnerer, har en ejerskabsregel, og at få en af dem forkert frembringer enten en lækage eller et nedbrud uden nogen oversætteradvarsel imellem, så indpakningen er der, hvor hele projektets hukommelsesdisciplin bor. Bygningen drives af en opgavekører med seksoghalvtreds mål, der dækker kerneoversættelsen, Swift‑bygningen, testsuiterne, linterne og pakningen.

**Resultat.** En hjemmehørende klient, der starter som et Mac‑program, bruger platformens egne materialer og kontroller og bærer ingen indlejret browser. Det, der ikke er gjort, bør siges: dette er ikke en udsendt udgivelse. Der er ingen notariseret distribution, ingen opdateringskanal og ét sprog i grænsefladen, så det er et fungerende program frem for et produkt, nogen anden kører.

---

- Rolle: macOS‑applikationsudvikler
- Kategorier: [Løsningsarkitektur](https://engineer.company/da/categories/solution-architecture/), [Frontend‑udvikling](https://engineer.company/da/categories/frontend/), [Full stack‑udvikling](https://engineer.company/da/categories/full-stack/), [API'er & integration](https://engineer.company/da/categories/api/), [Designsystemer & UI](https://engineer.company/da/categories/design-systems/), [UX/UI‑design](https://engineer.company/da/categories/ux-ui/)
- Ydelser: [Platform- & løsningsarkitektur](https://engineer.company/da/services/platform-architecture/), [Frontend‑udvikling](https://engineer.company/da/services/frontend-development/), [Full stack‑produktudvikling](https://engineer.company/da/services/full-stack-development/), [UI/UX‑design & designsystemer](https://engineer.company/da/services/ui-ux-design/)

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