⏱️ Lectura: 10 min
La app que millones de voluntarios usan para corregir OpenStreetMap desde Android lleva casi tres años intentando llegar al iPhone, y el ticket que coordina ese esfuerzo de StreetComplete para iOS acaba de confirmar que la migración va a la mitad.
📑 En este artículo
- TL;DR
- Qué es StreetComplete para iOS
- Qué pasó
- Contexto e historia
- Detalles técnicos
- Impacto y análisis
- Qué sigue
- Preguntas frecuentes
- ¿Qué es Kotlin Multiplatform y por qué lo eligió StreetComplete para iOS?
- ¿Por qué el port a iPhone de la app no usa Flutter como Every Door?
- ¿Cuándo va a lanzarse la versión iOS de StreetComplete?
- ¿Qué es Compose Multiplatform?
- ¿Cómo puedo contribuir al proyecto de Kotlin Multiplatform de StreetComplete?
- Referencias
El issue #5421 en GitHub, abierto el 20 de diciembre de 2023 por el mantenedor del proyecto (identificado como westnordost), reemplaza a un hilo anterior y describe el plan: reescribir la interfaz con Compose Multiplatform mientras el núcleo de la app sigue compartido en Kotlin entre Android e iOS.
TL;DR
- El port de StreetComplete para iOS iba por el 50% a mediados de 2024, según el issue #5421 de GitHub.
- La migración reemplaza la interfaz Android por Compose Multiplatform para compartir código con iOS.
- Westnordost estima un año-persona de trabajo total para terminar el port.
- Un Project Board en GitHub lista las tareas abiertas para contribuir.
- Compose Multiplatform evita reescribir la app en Dart, a diferencia de Every Door con Flutter.
Qué es StreetComplete para iOS
StreetComplete para iOS es el proyecto que lleva la popular app de ediciones rápidas de OpenStreetMap, nativa de Android, al iPhone mediante Kotlin Multiplatform y Compose Multiplatform, compartiendo la misma base de código Kotlin en vez de reescribirla por completo en Swift.
La app original deja que cualquier persona responda preguntas cortas sobre el entorno (si una calle tiene aceras, qué superficie tiene un sendero, cuántos pisos tiene un edificio) y esas respuestas se suben directo a OpenStreetMap, el mapa colaborativo que usan aplicaciones como OsmAnd u Organic Maps. Hasta ahora no existe una versión oficial para iPhone, y ese vacío es justamente lo que el issue #5421 intenta cerrar.
Qué pasó
El 20 de diciembre de 2023, el mantenedor del proyecto, identificado en GitHub como westnordost, abrió el issue #5421 como ticket maestro para coordinar el desarrollo del port. El hilo reemplaza a uno anterior, el #1892, que ya acumulaba discusión y trabajo de investigación sobre cómo encarar el salto a iOS.
El plan que describe el issue es concreto: en vez de mantener dos bases de código separadas, reescribir la capa de interfaz con Compose Multiplatform mientras el núcleo de la aplicación (lógica de red, modelos de datos, persistencia) sigue compartido en Kotlin entre Android e iOS. El propio ticket aclara que esto mantiene el esfuerzo de mantenimiento futuro acotado, porque seguirá existiendo una sola base de código en vez de dos.
Según la actualización más reciente del hilo, durante el primer semestre de 2024 el autor pudo dedicarse de tiempo completo al port y la migración llegó a cerca del 50%. El issue funciona como bitácora viva: se actualiza a medida que avanza el trabajo y enlaza un Project Board de estilo kanban con las tareas pendientes, muchas de ellas abiertas para que cualquier persona de la comunidad las tome.
Contexto e historia
StreetComplete acumula 4.9 mil estrellas y 456 forks en GitHub al 1 de octubre de 2026, una base de usuarios y colaboradores considerable para una app de mapeo ciudadano. Hasta ahora esa base solo corría en Android: cualquier persona con iPhone que quisiera contribuir a OpenStreetMap con la misma experiencia debía recurrir a otra app.
La alternativa más conocida es Every Door, una app de edición rápida para OpenStreetMap construida con Flutter que sí corre en Android e iOS desde el inicio. El propio issue #5421 la menciona como punto de comparación: Flutter habría resuelto el problema multiplataforma, pero a costa de reescribir toda la lógica de StreetComplete en Dart, un lenguaje distinto al que ya usa el proyecto.
Esa comparación empuja la decisión hacia Kotlin Multiplatform. Para 2023, varias de las dependencias que ya usaba StreetComplete habían migrado a bibliotecas Kotlin puras, lo que hizo viable compartir código sin depender de APIs exclusivas de Android. Esa maduración del ecosistema, según el propio autor, no existía cuando se discutió por primera vez el port en el issue #1892.
Detalles técnicos
Kotlin Multiplatform no traduce el código Kotlin a otro lenguaje: lo compila directamente. Para Android, el compilador genera bytecode JVM como siempre; para iOS, usa Kotlin/Native para producir binarios nativos que corren sin máquina virtual. El resultado es que la lógica de negocio (cómo se valida una respuesta, cómo se sincroniza con el servidor de OpenStreetMap, cómo se guarda en caché) vive en un solo lugar y se compila dos veces, una por plataforma.
La parte visible para el usuario corre por otro camino: Compose Multiplatform. Es un fork y extensión de Jetpack Compose, el framework de UI declarativa de Android, que reutiliza casi toda su API. En iOS, en vez de depender de UIKit o SwiftUI, Compose Multiplatform dibuja la interfaz con Skia, el mismo motor de renderizado 2D que usa Chrome y Android. Por eso el issue describe el trabajo como recrear toda la interfaz incrementalmente en Compose: no hay forma de reutilizar las pantallas que ya existían en XML, hay que reconstruirlas.
flowchart TD
A["Código Kotlin compartido"] --> B["Target Android (JVM)"]
A --> C["Target iOS (Kotlin/Native)"]
B --> D["UI con Compose Multiplatform"]
C --> D
D --> E["Render via Skia"]
El issue detalla los pasos del plan en orden: primero separar el código específico de plataforma de la lógica de aplicación, reemplazando dependencias de Android/Java por equivalentes multiplataforma. Después, migrar la UI en dos etapas: separar el acceso a datos y el estado de la interfaz pura usando ViewModels, y migrar las pantallas que todavía usan layouts XML de Android a Jetpack Compose, algo que se puede hacer de forma incremental trabajando de abajo hacia arriba. Solo al final, con la UI ya en Jetpack Compose, el salto a Compose Multiplatform queda como un paso pequeño en comparación con el primero, según la descripción del propio ticket.
| Enfoque | Base de código | Qué hay que reescribir | Ejemplo |
|---|---|---|---|
| Kotlin Multiplatform + Compose Multiplatform | Una sola, en Kotlin | Solo la capa de UI, de forma incremental | StreetComplete para iOS |
| Reescritura completa en Flutter | Dos bases: Kotlin (Android) y Dart | Toda la lógica de la app, no solo la interfaz | Every Door |
📌 Nota: Compose Multiplatform para iOS estaba en fase alfa/beta cuando se abrió el issue, según la propia documentación de JetBrains: el proyecto depende de que ese soporte siga madurando para llegar a producción.
Impacto y análisis
El caso de StreetComplete para iOS importa más allá de una sola app. Es uno de los intentos más visibles de un proyecto grande, 100% Kotlin y mantenido mayormente por voluntarios, de llegar a iOS sin duplicar su base de código. Si funciona, sirve como referencia para otras apps de Android con comunidades activas que hoy descartan iOS por el costo de mantener dos códigos en paralelo.
El propio issue es honesto sobre la escala del problema: la estimación de un año-persona de trabajo total, hecha hace tiempo según el texto del ticket, sigue vigente como orden de magnitud.
También hay un límite real en el modelo de desarrollo: el ticket depende de que la comunidad tome tareas del Project Board y de que haya sponsors dispuestos a financiar más tiempo completo del mantenedor. Sin eso, el ritmo de avance queda atado a la disponibilidad de una sola persona trabajando part-time, el escenario más probable fuera de los períodos de dedicación exclusiva.
Qué sigue
El Project Board enlazado en el issue sigue siendo la fuente de verdad sobre qué falta: pantallas pendientes de migrar a Compose Multiplatform, dependencias de Android que todavía no tienen reemplazo multiplataforma y tareas de investigación que, según el propio ticket, dependen de que otras tareas se completen antes. El autor pide específicamente ayuda de quien tenga experiencia en Jetpack Compose o Compose Multiplatform, y aclara que para él también es tecnología nueva.
No hay fecha de lanzamiento anunciada para la versión iOS de StreetComplete, y el propio issue evita comprometerse a una: el ticket se actualiza continuamente a medida que el trabajo avanza, sin plazos fijos. La vía de financiamiento que menciona el autor es el botón de sponsor del repositorio, con el argumento de que más fondos se traducen directamente en más tiempo de desarrollo dedicado al port.
📖 Resumen en Telegram: Ver resumen
Probalo vos: seguí el Project Board del issue #5421 para ver en tiempo real qué tareas del port a iOS están libres para tomar.
Preguntas frecuentes
¿Qué es Kotlin Multiplatform y por qué lo eligió StreetComplete para iOS?
Es una tecnología de Kotlin que compila el mismo código fuente a distintos destinos: bytecode JVM para Android y binarios nativos vía Kotlin/Native para iOS. El proyecto la eligió porque evita mantener dos bases de código separadas, algo clave para una app sostenida mayormente por voluntarios.
¿Por qué el port a iPhone de la app no usa Flutter como Every Door?
Porque StreetComplete ya es 100% Kotlin. Pasar a Flutter habría significado reescribir toda la lógica de la app en Dart desde cero, mientras que Kotlin Multiplatform permite reutilizar ese código existente y migrar solo la capa de interfaz.
¿Cuándo va a lanzarse la versión iOS de StreetComplete?
No hay fecha confirmada. El issue #5421 reportaba cerca del 50% de avance a mediados de 2024, con una estimación total de un año-persona de trabajo, pero sin compromiso de fecha de lanzamiento.
¿Qué es Compose Multiplatform?
Es el framework de UI que usa el port: una extensión de Jetpack Compose que renderiza con Skia en vez de UIKit o SwiftUI, y que permite reutilizar casi toda la API de Compose que ya usan las apps de Android.
¿Cómo puedo contribuir al proyecto de Kotlin Multiplatform de StreetComplete?
Tomando una tarea del Project Board enlazado en el issue #5421, comentando en el ticket específico antes de empezar, o financiando el desarrollo a través del botón de sponsor del repositorio en GitHub.
Referencias
- GitHub: issue #5421: ticket maestro donde westnordost coordina el port a iOS de StreetComplete.
- GitHub: repositorio de StreetComplete: código fuente de la app y su documentación técnica.
- Kotlin: documentación oficial de Kotlin Multiplatform: cómo compartir código entre Android e iOS compilando a Kotlin/Native.
- JetBrains: Compose Multiplatform: framework de UI declarativa usado para compartir la interfaz entre plataformas.
📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.
Imagen destacada: Foto de Balázs Kétyi en Unsplash
¿Te sirvió? ¿Te dio otro error? Contalo abajo: las preguntas se responden y le sirven al siguiente que llegue.
Dejar un comentario
0 Comentarios