kmp-naver-map

Declarative Compose wrapper for Naver Map SDK with overlay DSL (markers, polylines, polygons), camera animations/fitBounds, location tracking, UI controls, night/indoor modes, and Gradle plugin.

Android JVMKotlin/Native
GitHub stars3
Open issues0
LicenseApache License 2.0
Creation date2 months ago

Last activityabout 1 month ago
Latest release1.0.12 (5 days ago)

Naver Map Compose for Kotlin Multiplatform

Maven Central Kotlin License Platform

네이버 지도 SDKCompose Multiplatform에서 선언적으로 사용할 수 있는 라이브러리입니다.

A declarative Naver Map SDK wrapper for Compose Multiplatform (Android & iOS).


Features / 주요 기능

  • Overlay DSLNaverMap { } 스코프 내에서 Marker, Polyline, Polygon, Circle, Path, ArrowheadPath, InfoWindow를 선언적으로 추가
  • Camera ControlMapEffect를 통한 카메라 애니메이션, fitBounds, 줌 제한 설정
  • Location TrackingLocationTrackingMode를 통한 사용자 위치 추적 통합
  • MapUiSettings — 줌 버튼, 나침반, 스케일 바, 레이어 그룹 등 UI 요소 제어
  • Night Mode & Indoor — 야간 모드, 실내 지도 지원
  • Gradle Plugin — 저장소 설정과 의존성을 자동 관리하는 Gradle 플러그인 제공

Installation / 설치

1. Gradle 플러그인 추가

**사용하려는 모듈(예: composeApp)**의 build.gradle.kts에 플러그인을 추가하세요. 플러그인을 적용하면 네이버 지도 저장소 설정과 라이브러리 의존성이 자동으로 추가됩니다.

// composeApp/build.gradle.kts 또는 shared/build.gradle.kts
plugins {
    id("io.github.kmp-naver-map") version "1.0.2"
}

// (선택 사항) 라이브러리 버전을 직접 지정하고 싶은 경우
naverMapCompose {
    version.set("1.0.2")
}

2. iOS 설정 (CocoaPods)

iOS에서 지도를 정상적으로 표시하려면 네이버 지도 SDK(NMapsMap) 의존성이 필요합니다. 자세한 내용은 Kotlin Multiplatform CocoaPods 공식 문서를 참조하세요.

옵션 A: build.gradle.kts에서 설정 (권장)

Kotlin Multiplatform의 cocoapods 플러그인을 사용 중이라면 아래와 같이 추가하세요.

kotlin {
    cocoapods {
        ios.deploymentTarget = "13.0"
        
        pod("NMapsMap") {
            version = "3.23.1"
        }
    }
}

옵션 B: Podfile에 직접 추가

기존 iOS 프로젝트 형식을 유지하고 싶다면 iosApp/Podfile에 다음을 추가하세요.

target 'iosApp' do
  use_frameworks!
  pod 'NMapsMap', '3.23.1'
end

Quick Start / 빠른 시작

NaverMapSdkProvider로 SDK를 초기화하고, NaverMap 컴포저블로 지도를 표시합니다.

import io.github.kmp.maps.naver.compose.NaverMapSdkProvider
import io.github.kmp.maps.naver.compose.ui.NaverMap
import io.github.kmp.maps.naver.compose.model.LatLng
import io.github.kmp.maps.naver.compose.state.rememberMarkerState

@Composable
fun App() {
    NaverMapSdkProvider(clientId = "YOUR_CLIENT_ID") {
        NaverMap(modifier = Modifier.fillMaxSize()) {
            Marker(
                state = rememberMarkerState(position = LatLng(37.566, 126.978)),
                caption = "서울시청"
            )
        }
    }
}

Usage / 사용법

Marker / 마커

NaverMap {
    // 방법 1: MarkerState 사용 (위치 변경 가능)
    val markerState = rememberMarkerState(position = LatLng(37.566, 126.978))
    Marker(state = markerState, caption = "서울시청")

    // 방법 2: 위치 직접 지정
    Marker(position = LatLng(37.551, 126.988), caption = "남산타워")
}

Camera Control / 카메라 제어

MapEffect를 사용하면 지도 준비 후 NaverMapState에 접근하여 카메라를 제어할 수 있습니다.

NaverMap {
    MapEffect(selectedPlace) {
        animateCamera(
            position = CameraPosition(target = selectedPlace.latLng, zoom = 14.0),
            durationMs = 1000
        )
    }
}

Troubleshooting / 문제 해결

증상 해결 방법
지도가 표시되지 않음 NaverMapSdkProviderNaverMap을 감싸고 있는지, Client ID가 올바른지 확인하세요.
iOS에서 빌드 오류 pod install 실행 후 .xcworkspace로 열어야 합니다. cocoapods 플러그인 사용 시 generateComposeResClass 태스크 관련 오류가 나면 Gradle 버전을 확인하세요.
Could not resolve 의존성 오류 Gradle 플러그인 사용 시 네이버 저장소가 자동 추가됩니다. 수동 설정 시 https://repository.map.naver.com/archive/maven을 추가하세요.

Contributing / 기여하기

기여는 언제나 환영합니다! 자세한 내용은 CONTRIBUTING.md를 참조하세요.


License / 라이선스

프로젝트 라이선스

본 라이브러리는 Apache License 2.0을 따릅니다.


Copyright 2026 Jun Cho

Android JVMKotlin/Native
GitHub stars3
Open issues0
LicenseApache License 2.0
Creation date2 months ago

Last activityabout 1 month ago
Latest release1.0.12 (5 days ago)

Naver Map Compose for Kotlin Multiplatform

Maven Central Kotlin License Platform

네이버 지도 SDKCompose Multiplatform에서 선언적으로 사용할 수 있는 라이브러리입니다.

A declarative Naver Map SDK wrapper for Compose Multiplatform (Android & iOS).


Features / 주요 기능

  • Overlay DSLNaverMap { } 스코프 내에서 Marker, Polyline, Polygon, Circle, Path, ArrowheadPath, InfoWindow를 선언적으로 추가
  • Camera ControlMapEffect를 통한 카메라 애니메이션, fitBounds, 줌 제한 설정
  • Location TrackingLocationTrackingMode를 통한 사용자 위치 추적 통합
  • MapUiSettings — 줌 버튼, 나침반, 스케일 바, 레이어 그룹 등 UI 요소 제어
  • Night Mode & Indoor — 야간 모드, 실내 지도 지원
  • Gradle Plugin — 저장소 설정과 의존성을 자동 관리하는 Gradle 플러그인 제공

Installation / 설치

1. Gradle 플러그인 추가

**사용하려는 모듈(예: composeApp)**의 build.gradle.kts에 플러그인을 추가하세요. 플러그인을 적용하면 네이버 지도 저장소 설정과 라이브러리 의존성이 자동으로 추가됩니다.

// composeApp/build.gradle.kts 또는 shared/build.gradle.kts
plugins {
    id("io.github.kmp-naver-map") version "1.0.2"
}

// (선택 사항) 라이브러리 버전을 직접 지정하고 싶은 경우
naverMapCompose {
    version.set("1.0.2")
}

2. iOS 설정 (CocoaPods)

iOS에서 지도를 정상적으로 표시하려면 네이버 지도 SDK(NMapsMap) 의존성이 필요합니다. 자세한 내용은 Kotlin Multiplatform CocoaPods 공식 문서를 참조하세요.

옵션 A: build.gradle.kts에서 설정 (권장)

Kotlin Multiplatform의 cocoapods 플러그인을 사용 중이라면 아래와 같이 추가하세요.

kotlin {
    cocoapods {
        ios.deploymentTarget = "13.0"
        
        pod("NMapsMap") {
            version = "3.23.1"
        }
    }
}

옵션 B: Podfile에 직접 추가

기존 iOS 프로젝트 형식을 유지하고 싶다면 iosApp/Podfile에 다음을 추가하세요.

target 'iosApp' do
  use_frameworks!
  pod 'NMapsMap', '3.23.1'
end

Quick Start / 빠른 시작

NaverMapSdkProvider로 SDK를 초기화하고, NaverMap 컴포저블로 지도를 표시합니다.

import io.github.kmp.maps.naver.compose.NaverMapSdkProvider
import io.github.kmp.maps.naver.compose.ui.NaverMap
import io.github.kmp.maps.naver.compose.model.LatLng
import io.github.kmp.maps.naver.compose.state.rememberMarkerState

@Composable
fun App() {
    NaverMapSdkProvider(clientId = "YOUR_CLIENT_ID") {
        NaverMap(modifier = Modifier.fillMaxSize()) {
            Marker(
                state = rememberMarkerState(position = LatLng(37.566, 126.978)),
                caption = "서울시청"
            )
        }
    }
}

Usage / 사용법

Marker / 마커

NaverMap {
    // 방법 1: MarkerState 사용 (위치 변경 가능)
    val markerState = rememberMarkerState(position = LatLng(37.566, 126.978))
    Marker(state = markerState, caption = "서울시청")

    // 방법 2: 위치 직접 지정
    Marker(position = LatLng(37.551, 126.988), caption = "남산타워")
}

Camera Control / 카메라 제어

MapEffect를 사용하면 지도 준비 후 NaverMapState에 접근하여 카메라를 제어할 수 있습니다.

NaverMap {
    MapEffect(selectedPlace) {
        animateCamera(
            position = CameraPosition(target = selectedPlace.latLng, zoom = 14.0),
            durationMs = 1000
        )
    }
}

Troubleshooting / 문제 해결

증상 해결 방법
지도가 표시되지 않음 NaverMapSdkProviderNaverMap을 감싸고 있는지, Client ID가 올바른지 확인하세요.
iOS에서 빌드 오류 pod install 실행 후 .xcworkspace로 열어야 합니다. cocoapods 플러그인 사용 시 generateComposeResClass 태스크 관련 오류가 나면 Gradle 버전을 확인하세요.
Could not resolve 의존성 오류 Gradle 플러그인 사용 시 네이버 저장소가 자동 추가됩니다. 수동 설정 시 https://repository.map.naver.com/archive/maven을 추가하세요.

Contributing / 기여하기

기여는 언제나 환영합니다! 자세한 내용은 CONTRIBUTING.md를 참조하세요.


License / 라이선스

프로젝트 라이선스

본 라이브러리는 Apache License 2.0을 따릅니다.


Copyright 2026 Jun Cho