>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Kotlin

Hoe één Kotlin-project Android, iOS, Web, Wear OS en AI-agents bestrijkt

Wanneer je de mogelijkheden van Kotlin Multiplatform wilt demonstreren in echte code, is het gemakkelijk om vast te lopen in complexe architectuur en tientallen abstractielagen. John O'Reilly koos een andere aanpak. Hij koos een eenvoudige taak: het weergeven van een lijst met mensen in een baan om de aarde en ISS-coördinaten. Het resultaat is een duidelijk voorbeeld van hoe één bedrijfslogica-module werkt op een dozijn verschillende platforms.

Het project is opgenomen in de officiële Kotlin-documentatie en Google Dev Library. Laten we opsplitsen hoe alles is gestructureerd en waarom deze codebase een handige sandbox is.

Waar dit project over gaat

De app haalt gegevens op uit twee open bronnen. De lijst met astronauten met biografieën komt van The Space Devs API, terwijl ISS-coördinaten worden opgehaald via de Open Notify API. Om clients te beschermen tegen directe aanroepen naar externe services, bevat de repository een kleine Ktor-backend.

Het hoofdidee hier is codeduplicatie. Bedrijfslogica, netwerkaanvragen, caching en datamodellen worden één keer geschreven in een gedeelde module common. Deze code maakt vervolgens verbinding met clients die gericht zijn op allerlei verschillende besturingssystemen en schermen.

De lijst met ondersteunde doelen omvat:

  • Android-smartphones en thuisschermwidgets met Glance API
  • iOS-app gebouwd met SwiftUI
  • Smartwatches met Wear OS
  • Desktopversie via Compose for Desktop
  • Webclient met Kotlin/Wasm
  • Server-side component met Ktor
  • MCP-server voor verbinding met AI-clients

Wat er onder de motorkap zit van de gedeelde module

De module common verwerkt alle boilerplate. Hij gebruikt bibliotheken die bekend zijn bij Kotlin-ontwikkelaars:

  • Ktor Client verwerkt netwerkaanvragen
  • SQLDelight verzorgt lokale databasetoegang
  • Koin handelt dependency injection af
  • Kotlinx Serialization parseert JSON

Compose Multiplatform en de SKIE-bibliotheek verzorgen de communicatie met de UI. De laatste vereenvoudigt significant het werken met Swift door coroutines en Flow te vertalen naar async-concepten die iOS-ontwikkelaars begrijpen.

class PeopleInSpaceViewModel(
    private val peopleInSpaceRepository: PeopleInSpaceRepositoryInterface
) : KMMViewModel() {

    val peopleInSpace: StateFlow<List<Assignment>> = 
        peopleInSpaceRepository.fetchPeopleAsFlow()
            .stateIn(viewModelScope, SharingStarted.Eagerly, emptyList())
}

Dankzij deze scheiding blijven platformclients dun. Ze verwerken alleen UI-rendering en gebruikersaanrakingen.

Van smartwatches naar webbrowser

Elke client in de repository is gestructureerd als een aparte module. Dit maakt het gemakkelijk om snel te begrijpen hoe een specifieke technologie integreert met de gedeelde KMP-code.

De Android-app is gebouwd met Jetpack Compose. Naast deze staat de wearApp module, waar de interface is aangepast voor ronde watchschermen met Compose for Wear OS. Je vindt er ook een werkende thuisschermwidget voor Android geschreven met de Glance API.

Wear OS person list Wear OS edge button Wear OS ISS map

Voor iOS biedt de auteur twee paden: een klassieke SwiftUI-interface of gedeelde Compose-code. De keuze is aan de ontwikkelaar.

iOS UI

De browserversie is gebouwd met Kotlin/Wasm. De build draait via een standaard Gradle-task en produceert een werkende frontend zonder dat je JavaScript hoeft te schrijven.

Compose for Web Wasm

Verbinding maken met Claude Desktop via MCP

Een van de nieuwste toevoegingen aan de repository is de mcp-server module. De auteur implementeerde een server met het Model Context Protocol en de officiële Kotlin MCP SDK.

Het idee is dat dezelfde common module met bedrijfslogica en de netwerklaag wordt opgenomen in een console-applicatie. Deze applicatie stelt tools beschikbaar voor kunstmatige intelligentie. Door de lokale server te draaien, kun je deze verbinden met Claude Desktop of een andere assistent.

De configuratie voor Claude Desktop ziet er zo uit:

{
  "mcpServers": {
    "kotlin-peopleinspace": {
      "command": "java",
      "args": [
        "-jar",
        "/path/to/repo/mcp-server/build/libs/serverAll.jar",
        "--stdio"
      ]
    }
  }
}

Daarna krijgt het neurale netwerk directe toegang tot de functie voor gegevensophaling en kan het vragen over kosmonauten beantwoorden door actuele informatie op te halen uit je KMP-code.

MCP integration

Waarom deze repository bekijken

De PeopleInSpace-repository is waardevol niet vanwege de schaal van zijn code, maar vanwege het actuele tech stack. De auteur werkt constant de versies bij van Kotlin, Gradle, Compose en gerelateerde bibliotheken.

Het project is een goede referentie als je van plan bent om:

  1. Te evalueren hoeveel code je daadwerkelijk kunt hergebruiken tussen Android en iOS.
  2. Kotlin/Wasm in de praktijk te zien draaien in een browser.
  3. Uit te zoeken hoe SKIE werkt bij het doorgeven van datastromen naar Swift.
  4. Te leren hoe MCP-servers worden gebouwd met Kotlin.

Om te beginnen, kloon je gewoon de repository, open je deze in een recente versie van Android Studio en voer je de gewenste Gradle-task uit.

Gerelateerde projecten