003. (KMM Mobile) 3. 프로젝트 톺아보기

3. 프로젝트 톺아보기

KMM 애플리케이션 프로젝트를 생성하고 구조를 살펴보자.

3.1. Kotlin Multiplatform App 프로젝트 생성

제일 처음엔 당연히 Android Studio 실행!

이전 포스팅과 동일하게 Kotlin Multiplatform App 프로젝트를 선택한다.

이번엔 iOS framework distribution 항목을 Regular framework가 아닌 CocoaPods dependency manager로 선택한다.

이후 프로젝트가 생성되면 아래와 같은 오류 메시지가 출력될 것이다.

이를 해소하려면 project 내 iosApp 모듈 내에서 pod을 설치해주어야 한다.

1
pod install

pod의 설치를 완료하면 프로젝트 오류는 사라진다.

3.2. Kotlin Multiplatform App 프로젝트 톺아보기

앞선 포스팅과 동일하게 각 플랫폼에 맞는 프로젝트 파일이 생성되었다.

먼저 androidApp 모듈에는 MainActivityMyApplicationTheme가 생성되었음을 확인할 수 있다.

모듈의 build.gradle.kts에는 기본적인 설정과 compose가 반영되어있다.

이제 우리의 관심사인 shared 모듈을 살펴보자.

android 설정은 물론 cocoapad에 대한 의존성으로 ios 관련된 설정들도 눈에 들어온다.

공용 모듈에서 공통적으로 요구하는 코드인 Platform 관련 코드도 볼 수 있는데, 이 중 iOS 관련 코드를 살펴보자.

iOS모듈에서 주입받아야하는 부분이 공통 패키지인 platform.*을 통해 구현되어있음을 확인할 수 있다.

특히 getPlatform() 함수에 붙어있는 actual 키워드를 보자.

KMM에서 actual 키워드는 각 플랫폼에 종속적인 코드를 작성해야할 때 추가하는 키워드이다.

여기서는 iOS 모듈에 의존하는 코드임을 명시하는 것이다.

반대로 공통적인 코드는 위와 같이 expect 키워드를 사용하여 공통부분임을 명시한다.

당연하겠지만 간단한 모듈간 구조는 아래의 코드로 연결된다.

1
2
3
4
5
6
7
8
9
// androidApp build.gradle.kts
dependencies {
implementation(projects.shared)
implementation(libs.compose.ui)
implementation(libs.compose.ui.tooling.preview)
implementation(libs.compose.material3)
implementation(libs.androidx.activity.compose)
debugImplementation(libs.compose.ui.tooling)
}
1
2
3
4
5
6
# iosApp podfile
target 'iosApp' do
use_frameworks!
platform :ios, '14.1'
pod 'shared', :path => '../shared'
end

대략 이런 구조를 기본값으로 확장이 되는 구조이다.

graph TD;
  shared
  androidApp
  iosApp

  androidApp --> shared;
  iosApp --> shared;