| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- bottomscaffold
- 2022 KAKAO BLIND RECRUITMENT
- 선언형 ui
- 자바
- compose
- clean coder
- gradle jdk
- rememberupdatedstate
- mutablestate
- 2989번
- 2022 kakao blind
- 안드로이드
- NavHost
- Java
- 무선 페어링
- android
- ktor-auth
- genarics
- remembercoroutinescope
- mutableStateOf
- apollo3
- 명령형ui
- 양과 늑대
- 선언형ui
- snapshotflow
- JCF
- State
- 명령형 ui
- derivedstateof
- producestate
- Today
- Total
버미
[KMP] KMP에서 iOS 라이브러리는 어떻게 연결될까? 본문
Kotlin Multi Platform(KMP) 사용하다가 플랫폼 별로 라이브러리를 연결해야하는 상황에서 추가적인 작업이 필요하다.
Android 에서는 Gradle dependency로 간단하게 연결할 수 있지만, iOS에서는 어떻게 연결할지 알아보자.
KMP에서 플랫폼별 구현이 필요한 이유
KMP는 공통 Kotlin 코드를 작성하고,
각 플랫폼(Android / iOS)에서 실제 구현(actual)을 제공한다.
문제는 iOS SDK가 Swift 와 Objective-C 으로 구성되어있다는 점이다.
코틀린에서는 이를 직접 사용할 수 없기 때문에, 연결 과정이 필요하다.
iOS SDK가 KMP에 연결되는 흐름을 보면 아래와 같다.

CocoaPods
CoCoaPods는 iOS에서 사용하는 의존성 관리자다.
마치, 안드로이드의 Gradle과 같이 라이브러리를 설치 & 관리해준다고 생각하면 될 것 같다.
KMP에서 CocoaPods는 아래와 같은 역할을 한다.
- iOS 네이티브 라이브러리 다운로드
- Objective-C 헤더 노출
- Kotlin Native가 접근할 수 있는 구조 제공
Gradle 에서는 아래와 같이 선언한다.
cocoapods {
pod("NMapsMap")
}
cinterop
cinterop은 Kotlin Native 도구다.
KMP에서 cinterop은 아래와 같은 역할을 한다.
- Objective-C 헤더 분석
- Kotlin 타입으로 변환
- 네이티브 함수 연결
예를 들어 iOS SDK에 아래와 같은 코드가 있다고 하자.
@interface MapView
- (void)setZoom:(double)zoom;
@end
여기서 cinterop은 아래와 같이 바인딩 한다.
val map = MapView()
map.setZoom(10.0)
Swift SDK 역시 대부분 아래와 같은 과정을 거쳐서 연결된다.
Swift → Objective-C 인터페이스 노출 → cinterop 처리
🔎 처음에 cinterop이 바인딩 역할을 해준다고해서 RN의 브릿지와 어떤 차이가 있을까 궁금해졌다.
간략하게 정리하면,
RN(Reat Native)의 브릿지는 JS ↔ Native 런타임 연결 역할을한다.
반면, KMP의 cinterop은 컴파일 타임 네이티브 바인딩 역할을 한다.
두 방식 모두 네이티브 API를 호출한다는 공통점이 있지만,
React Native의 브릿지는 런타임에 JS와 네이티브 사이를 중계하는 통신 계층이고,
KMP의 cinterop은 컴파일 단계에서 네이티브 API에 대한 Kotlin 바인딩을 생성한다는 차이가 있다.
위의 구조 덕분에 KMP에서는 Cocoapods를 사용하여 Kotlin 코드 베이스로 iOS의 라이브러리를 호출하여 확장할 수 있게 된다.
'안드로이드 > KMP' 카테고리의 다른 글
| [KMP] Ktor Auth Plugin은 401을 어떻게 처리할까? Bearer 토큰 자동 갱신 흐름 분석 (0) | 2026.02.14 |
|---|