TL;DR

  • StreetComplete의 iOS 포트 개발이 공개 베타 단계에 들어섰으며, Kotlin 기반 단일 코드베이스를 유지하는 Kotlin Multiplatform과 Compose Multiplatform을 활용하는 접근임.
  • 앱 전체가 Kotlin으로 작성돼 있고, 일부 의존성도 순수 Kotlin 라이브러리로 구성돼 있어 플랫폼별 코드와 유지보수 부담을 줄일 수 있음.
  • 기존 Android XML UI를 Jetpack Compose로 점진적으로 이전한 뒤 Compose Multiplatform으로 옮기며, UI는 새로 구성해야 함.
  • 2024년 상반기 전일제 개발을 거쳐 마이그레이션이 약 50% 완료됐으며, 전체 iOS 포트에는 대략 1인년의 작업이 필요한 것으로 추산됨.
  • 프로젝트 보드의 작업 수행, 관련 프레임워크 학습, 개발 후원, 유지보수와 이슈 분류가 기여 방법임.

접근 방식

  • StreetComplete 앱 코드베이스는 Kotlin 100%로 작성됐으며, Kotlin은 Swift와 상당히 유사하고 자바스크립트와 기계어로도 변환할 수 있음. 앱 의존성 중 다수도 순수 Kotlin 라이브러리임.
  • 이에 따라 iOS 버전은 Kotlin Multiplatform으로 개발할 수 있음.
  • UI 코드는 현재 iOS용 알파·베타 단계인 Compose Multiplatform으로 공유할 수 있음. 이는 API가 대체로 같은 Jetpack Compose의 포크·확장판임.
  • Jetpack Compose는 개발자가 코드로 UI 전체를 정의하는 반응형 UI 프레임워크이며, SwiftUI와 Flutter도 유사한 구상을 따름. 다만 UI 전체를 Compose로 점진적으로 다시 만들어야 함.
  • 이 접근 방식은 Android와 iOS에 종속되는 코드의 양을 최소화하고, 단일 코드베이스를 유지해 이후 유지보수 부담이 크게 늘지 않는다는 장점이 있음.
  • 멀티플랫폼 프레임워크로 Flutter를 쓰는 Every Door 방식과 비교하면 Kotlin 코드베이스를 대부분 그대로 유지할 수 있음. Flutter를 사용하면 코드를 모두 Dart로 다시 작성해야 함.

진행 단계

  • 애플리케이션 로직과 플랫폼별 코드를 분리하고, 애플리케이션 로직의 Android·Java 의존성을 Kotlin Multiplatform 의존성으로 교체함.
  • UI 코드를 Compose Multiplatform으로 점진적으로 이전함.
  • 데이터 접근 및 UI 상태 코드를 순수 UI 코드에서 분리하고 뷰 모델을 사용함(ViewModels 사용 #5070).
  • 현재 Android XML 레이아웃을 사용하는 UI 코드를 Android Jetpack Compose로 이전함. 아래쪽부터 진행하는 마이그레이션 전략을 따르면 점진적으로 수행할 수 있음.
  • 이후 Jetpack Compose에서 Compose Multiplatform으로 이전함. 첫 단계에 비하면 작은 변경임.

현재 상태

  • 필요한 단계는 칸반 방식의 [프로젝트 보드](Project Board)에 자세히 정리돼 있음. 일부 작업은 다른 작업의 완료나 조사가 선행돼야 하므로 아직 생성되지 않았음.
  • 별도 표시가 없는 작업은 이 글을 읽고 iOS 포트 개발에 기여하려는 사람이 맡을 수 있음. 작업을 구현하려면 해당 이슈에 의견을 남기면 됨.
  • iOS 전체 포트 개발에는 대략 1인년의 작업이 필요할 것으로 추산됨. 범위가 매우 크기 때문에 많은 커뮤니티 기여가 있어야 현실적으로 달성할 수 있으며, 실제로 지난 몇 년간 커뮤니티 기여가 이어져 왔음.
  • 2024년 상반기 전일제 개발을 진행했고, 마이그레이션은 현재 약 50% 완료됨.

기여 방법

  • 프로젝트 보드의 작업을 맡거나, 향후 기여를 위해 언급된 기술과 프레임워크, 특히 Jetpack Compose와 Compose Multiplatform을 익힐 수 있음.
  • 개발을 후원할 수 있음. 메인 페이지 사이드바의 ‘Sponsor this project’ 항목에서 후원 정보를 확인할 수 있으며, 더 많은 후원금은 앱 개발에 더 많은 시간을 투입할 수 있게 함. 대규모 자금 지원이 가능한 곳을 알고 있다면 연락을 요청함.
  • 일반적인 유지보수와 이슈 분류를 도울 수 있음. 이를 통해 절약한 시간을 추가 개발에 투입할 수 있음.