StreetComplete arriva in beta pubblica su iOS con una sola codebase Kotlin

StreetComplete, l'app che ti fa contribuire a OpenStreetMap rispondendo a semplici quesiti sul posto, è disponibile in beta pubblica per iOS. Lo dice il titolo della discussione su Hacker News, con 485 punti; il progetto dietro la notizia è documentato da anni nell'issue #5421, che resta il testo tecnico di riferimento per capire come è stato condotto il porting.

Che cosa è

StreetComplete è l'app di westnordost per completare la mappa di OpenStreetMap dal telefono. La codebase è Kotlin al 100%, con circa 4.9k stelle e 458 fork su GitHub. Il porting iOS è coordinato da una master ticket aperta il 20 dicembre 2023, subentrata alla discussione storica #1892 e collegata a un project board kanban con i task della migrazione. L'issue linka anche le slide del talk alla SotM Europe 2024, con note del relatore incluse.

Cosa cambia

La scelta tecnica è il punto più interessante: non una riscrittura, ma una sola codebase. L'app punta su Kotlin Multiplatform, che compila Kotlin in codice macchina come Swift fa con il proprio linguaggio. Molte dipendenze sono ormai librerie Kotlin pure, quindi spostabili senza cambiare ecosistema.

La UI passa a Compose Multiplatform, fork ed estensione di Jetpack Compose con API in gran parte identica. Stessa idea di SwiftUI e Flutter: la UI si definisce per intero in codice, in modo reattivo. L'issue descrive il framework per iOS come passato da alpha a beta durante il progetto, giudizio ricavabile dalla formulazione stessa del testo ("alpha beta"): la migrazione è partita su un terreno che si muoveva.

Il vantaggio dichiarato è la manutenzione: una sola codebase significa che il porting non gonfia il lavoro futuro. Il confronto esplicito è con Every Door, che sceglie Flutter: in quel caso sarebbe servito riscrivere tutto in Dart, qui il codice Kotlin esistente non si tocca.

Il percorso, in sintesi:

  1. Separare il codice specifico di piattaforma dalla logica applicativa.
  2. Sostituire le dipendenze Android/Java con equivalenti Kotlin Multiplatform.
  3. Introdurre i ViewModel (issue #5070) per separare lo stato dalla UI.
  4. Migrare i layout XML a Jetpack Compose, incrementalmente e partendo dal basso.
  5. Da Jetpack Compose a Compose Multiplatform: un passo piccolo rispetto al primo.

Sui tempi, l'issue cita una stima a un anno-uomo per il porting completo:

We very roughly estimated some time ago that developing a full port to iOS would take one man-year of work. So, the scope of this remains very large.

westnordost ha lavorato al progetto a tempo pieno nella prima metà del 2024, portando la migrazione al 50% secondo il testo dell'issue. Quello che leggi è però uno snapshot: la sezione sullo stato viene aggiornata nel tempo, i task sul board sono dichiaratamente aperti ai contributi esterni, e la beta pubblica annunciata ora indica un progetto andato oltre quella fase.

Come si prova

L'estratto della fonte non include il link alla beta né le istruzioni di installazione. Il riferimento è la pagina dell'issue su GitHub, dove sono raccolti gli aggiornamenti sullo stato e i collegamenti al project board.

A chi serve davvero

Se contribuisci a OpenStreetMap da iPhone, è la notizia principale: l'app era finora una prerogativa Android, e la beta ti permette di fare rilevamento sul campo senza cambiare dispositivo, con i limiti che una beta comporta.

Se sviluppi, il valore è altrove: è un caso di studio concreto di Kotlin Multiplatform e Compose Multiplatform applicati a un'app reale e matura, con la strategia di migrazione documentata in pubblico.

Se usi già l'app su Android, il porting ti tocca lo stesso: la UI viene riscritta in modo incrementale anche sul lato Android, quindi qualcosa nell'esperienza cambierà senza che tu abbia cambiato piattaforma.

Chi può ignorarlo: chi non mappa per OpenStreetMap, e chi cerca oggi un'app iOS stabile per lavorare sul campo. Una beta va trattata come tale.

Resta aperto ciò che la fonte non dice: canale e numero dei tester, roadmap verso la versione stabile, carico di manutenzione extra una volta che le due piattaforme saranno in produzione.

Alternative

  • Every Door: editor OpenStreetMap multipiattaforma scritto in Flutter, citato nell'issue come termine di confronto tecnico.
  • Go Map!!: editor OpenStreetMap presente da tempo su iOS, per chi non vuole aspettare la stabilizzazione della beta.

lillodipiazza

Scritto da

Sviluppo backend e strumenti interni. Scrivo qui le note che vorrei aver trovato io mentre risolvevo il problema.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *