Dit artikel beschrijft de coördinatie en technische aanpak voor het ontwikkelen van een iOS-versie van de app StreetComplete.
Technische aanpak Om onderhoudbaarheid te garanderen, wordt er gekozen voor Kotlin Multiplatform. De UI wordt incrementeel herbouwd met Compose Multiplatform (een extensie van Jetpack Compose). Dit voorkomt dat de app volledig opnieuw geschreven moet worden in een andere taal zoals Dart (Flutter), waardoor de bestaande Kotlin-codebase grotendeels behouden blijft.
Het migratieproces De ontwikkeling volgt drie hoofdfasen:
- Het scheiden van platformspecifieke code van de applicatielogica.
- De migratie van Android XML-layouts naar Jetpack Compose.
- De overstap van Jetpack Compose naar Compose Multiplatform.
Huidige status en hulp De migratie is momenteel voor ongeveer 50% voltooid. Gezien de omvang van het project (geschat op één manjaar werk) is er een beroep gedaan op de community voor:
- Technische bijdragen via het project board.
- Financiële sponsoring.
- Hulp bij het onderhoud en de triage van issues.
iOS - Testing! :-D
Korte samenvatting: Raadpleeg het Project Board voor een lijst met taken. Bijdragen zijn welkom! Kijk ook naar de slides van de SotM Europe 2024-presentatie (er zijn sprekersnotities toegevoegd om dit begrijpelijk te maken bij het doorbladeren).
Aanpak
De codebase van deze app is volledig geschreven in Kotlin, een moderne programmeertaal die sterk lijkt op Swift. Kotlin-code kan, net als Swift, worden getranspileerd naar JavaScript en naar machinecode. Bovendien zijn veel dependencies van deze app inmiddels pure Kotlin-libraries.
Een iOS-versie van deze app kan daarom worden gerealiseerd met Kotlin Multiplatform.
De UI-code kan worden gedeeld middels Compose Multiplatform, dat momenteel in alpha-beta is voor iOS. Dit is een fork/extensie van Jetpack Compose met grotendeels dezelfde API. Jetpack Compose is een reactief UI-framework waarin ontwikkelaars de UI volledig in code definiëren (een vergelijkbaar idee als SwiftUI, Flutter, etc.). De gehele UI zal echter (incrementeel) opnieuw moeten worden opgebouwd in Compose.
Dit zorgt ervoor dat de hoeveelheid code die platformafhankelijk moet zijn (Android / iOS) tot een minimum wordt beperkt.
Deze aanpak heeft ten opzichte van andere methoden het grote voordeel dat het toekomstige onderhoud van dit project niet significant zal toenemen, aangezien er slechts één codebase blijft bestaan. In vergelijking met het gebruik van het framework Flutter voor multiplatform (zoals gebruikt door Every Door), stelt dit ons in staat om de Kotlin-codebase grotendeels ongemoeid te laten. Bij het gebruik van Flutter zouden we alles opnieuw moeten schrijven in Dart.
Stappen in het kort
- Scheid alle platformspecifieke code van de applicatielogica. Vervang Android/Java-dependencies voor applicatielogica door Kotlin Multiplatform-dependencies.
- Migreer de UI-code incrementeel naar Compose Multiplatform:
- Scheid data-access en UI-state code van de pure UI-code (gebruik view models: zie #5070).
- Migreer de UI-code die momenteel Android XML-layouts gebruikt naar Android Jetpack Compose. Dit kan incrementeel gebeuren via een bottom-up aanpak (zie de migratie-strategiegids).
- Migreer vervolgens van Jetpack Compose naar Compose Multiplatform. Dit is een kleine stap in vergelijking met de eerste stap.
Huidige status
Deze sectie wordt continu bijgewerkt.
De benodigde stappen zijn in detail beschreven in een Kanban-stijl Project Board. Sommige taken zijn nog niet aangemaakt omdat deze 100% afhankelijk zijn van het voltooien van andere taken en aanvullend onderzoek. Tenzij anders vermeld, staan deze taken open voor iedereen die dit leest en wil bijdragen aan de ontwikkeling van de iOS-port. Als je een van de beschreven taken wilt implementeren, laat dit dan weten in het betreffende ticket.
Enige tijd geleden is ruwweg geschat dat de ontwikkeling van een volledige port naar iOS ongeveer één manjaar aan werk zou kosten. De omvang blijft dus zeer groot. We kunnen dit realistisch gezien alleen bereiken met veel bijdragen vanuit de community. Gelukkig is dat precies wat de afgelopen jaren is gebeurd.
In de eerste helft van 2024 heb ik hier fulltime aan kunnen werken. De migratie is nu voor ongeveer 50% voltooid.
Hoe je kunt helpen
- Neem een taak over van het project board! Je kunt je ook verdiepen in de genoemde technologieën/frameworks om later betekenisvolle bijdragen te leveren. In het bijzonder: Jetpack Compose / Compose Multiplatform. Dit is voor mij ook erg nieuw, dus ik moet hierin ook mijn weg nog vinden.
- Sponsoring van de ontwikkeling! Zie de titel "Sponsor this project" in de zijbalk op de hoofdpagina. Meer budget maakt het mogelijk om meer tijd te besteden aan de ontwikkeling van deze app in het algemeen. Als je bekende bronnen hebt voor grootschaliger financiering, neem dan contact op.
- Hulp bij onderhoud en issue triage. Tijd die hierop bespaard wordt, kan ik besteden aan het verder uitbouwen van de ontwikkeling!
iOS - Testing! :-D
Korte samenvatting: Raadpleeg het Project Board voor een lijst met taken. Bijdragen zijn welkom! Kijk ook naar de slides van de SotM Europe 2024-presentatie (er zijn sprekersnotities toegevoegd om dit begrijpelijk te maken bij het doorbladeren).
Aanpak
De codebase van deze app is volledig geschreven in Kotlin, een moderne programmeertaal die sterk lijkt op Swift. Kotlin-code kan, net als Swift, worden getranspileerd naar JavaScript en naar machinecode. Bovendien zijn veel dependencies van deze app inmiddels pure Kotlin-libraries.
Een iOS-versie van deze app kan daarom worden gerealiseerd met Kotlin Multiplatform.
De UI-code kan worden gedeeld middels Compose Multiplatform, dat momenteel in alpha-beta is voor iOS. Dit is een fork/extensie van Jetpack Compose met grotendeels dezelfde API. Jetpack Compose is een reactief UI-framework waarin ontwikkelaars de UI volledig in code definiëren (een vergelijkbaar idee als SwiftUI, Flutter, etc.). De gehele UI zal echter (incrementeel) opnieuw moeten worden opgebouwd in Compose.
Dit zorgt ervoor dat de hoeveelheid code die platformafhankelijk moet zijn (Android / iOS) tot een minimum wordt beperkt.
Deze aanpak heeft ten opzichte van andere methoden het grote voordeel dat het toekomstige onderhoud van dit project niet significant zal toenemen, aangezien er slechts één codebase blijft bestaan. In vergelijking met het gebruik van het framework Flutter voor multiplatform (zoals gebruikt door Every Door), stelt dit ons in staat om de Kotlin-codebase grotendeels ongemoeid te laten. Bij het gebruik van Flutter zouden we alles opnieuw moeten schrijven in Dart.
Stappen in het kort
- Scheid alle platformspecifieke code van de applicatielogica. Vervang Android/Java-dependencies voor applicatielogica door Kotlin Multiplatform-dependencies.
- Migreer de UI-code incrementeel naar Compose Multiplatform:
- Scheid data-access en UI-state code van de pure UI-code (gebruik view models: zie #5070).
- Migreer de UI-code die momenteel Android XML-layouts gebruikt naar Android Jetpack Compose. Dit kan incrementeel gebeuren via een bottom-up aanpak (zie de migratie-strategiegids).
- Migreer vervolgens van Jetpack Compose naar Compose Multiplatform. Dit is een kleine stap in vergelijking met de eerste stap.
Huidige status
Deze sectie wordt continu bijgewerkt.
De benodigde stappen zijn in detail beschreven in een Kanban-stijl Project Board. Sommige taken zijn nog niet aangemaakt omdat deze 100% afhankelijk zijn van het voltooien van andere taken en aanvullend onderzoek. Tenzij anders vermeld, staan deze taken open voor iedereen die dit leest en wil bijdragen aan de ontwikkeling van de iOS-port. Als je een van de beschreven taken wilt implementeren, laat dit dan weten in het betreffende ticket.
Enige tijd geleden is ruwweg geschat dat de ontwikkeling van een volledige port naar iOS ongeveer één manjaar aan werk zou kosten. De omvang blijft dus zeer groot. We kunnen dit realistisch gezien alleen bereiken met veel bijdragen vanuit de community. Gelukkig is dat precies wat de afgelopen jaren is gebeurd.
In de eerste helft van 2024 heb ik hier fulltime aan kunnen werken. De migratie is nu voor ongeveer 50% voltooid.
Hoe je kunt helpen
- Neem een taak over van het project board! Je kunt je ook verdiepen in de genoemde technologieën/frameworks om later betekenisvolle bijdragen te leveren. In het bijzonder: Jetpack Compose / Compose Multiplatform. Dit is voor mij ook erg nieuw, dus ik moet hierin ook mijn weg nog vinden.
- Sponsoring van de ontwikkeling! Zie de titel "Sponsor this project" in de zijbalk op de hoofdpagina. Meer budget maakt het mogelijk om meer tijd te besteden aan de ontwikkeling van deze app in het algemeen. Als je bekende bronnen hebt voor grootschaliger financiering, neem dan contact op.
- Hulp bij onderhoud en issue triage. Tijd die hierop bespaard wordt, kan ik besteden aan het verder uitbouwen van de ontwikkeling!