2025년 5월 21일 기준
Kotlin Multiplatform quickstart
- IntelliJ IDEA 2025.1.1.1
or
- Android Studio Narwhal 2025.1.1 Canary 10.
and
- Xcode 15+ (최신 버전)
참고: Gradle 8.7-8.10도 지원하지만 withJava() 함수에서 deprecation 경고 발생
- 최소 요구사항: JDK 11 이상
- 네이티브 배포용: JDK 17 이상
- 권장: JDK 17 또는 21
그냥 이거 쓰셈
수동 작업 방법 : Kotlin Multiplatform quickstart
This is a Kotlin Multiplatform project targeting Android, iOS.
Android와 iOS를 대상으로 하는 Kotlin Multiplatform 프로젝트입니다.
* `/composeApp` is for code that will be shared across your Compose Multiplatform applications.
* `/composeApp`은 Compose Multiplatform 애플리케이션 간에 공유될 코드를 위한 폴더입니다.
It contains several subfolders:
여러 하위 폴더를 포함합니다:
- `commonMain` is for code that's common for all targets.
- `commonMain`은 모든 대상에 공통적인 코드를 위한 폴더입니다.
- Other folders are for Kotlin code that will be compiled for only the platform indicated in the folder name.
- 다른 폴더들은 폴더 이름에 표시된 플랫폼에서만 컴파일될 Kotlin 코드를 위한 것입니다.
For example, if you want to use Apple's CoreCrypto for the iOS part of your Kotlin app,
예를 들어, Kotlin 앱의 iOS 부분에서 Apple의 CoreCrypto를 사용하고 싶다면,
`iosMain` would be the right folder for such calls.
`iosMain`이 그러한 호출을 위한 적절한 폴더입니다.
* `/iosApp` contains iOS applications. Even if you're sharing your UI with Compose Multiplatform,
* `/iosApp`은 iOS 애플리케이션을 포함합니다. Compose Multiplatform으로 UI를 공유하더라도,
you need this entry point for your iOS app. This is also where you should add SwiftUI code for your project.
iOS 앱을 위한 이 진입점이 필요합니다. 프로젝트에 SwiftUI 코드를 추가해야 하는 곳이기도 합니다.
* `/shared` is for the code that will be shared between all targets in the project.
* `/shared`는 프로젝트의 모든 대상 간에 공유될 코드를 위한 폴더입니다.
The most important subfolder is `commonMain`. If preferred, you can add code to the platform-specific folders here too.
가장 중요한 하위 폴더는 `commonMain`입니다. 원한다면 여기에 플랫폼별 폴더에도 코드를 추가할 수 있습니다.
Learn more about [Kotlin Multiplatform](https://www.jetbrains.com/help/kotlin-multiplatform-dev/get-started.html)…
[Kotlin Multiplatform](https://www.jetbrains.com/help/kotlin-multiplatform-dev/get-started.html)에 대해 더 알아보세요…
KotlinProject/
├── README.md # 프로젝트 설명 파일
├── build.gradle.kts # 루트 빌드 스크립트 (Kotlin DSL)
├── settings.gradle.kts # 프로젝트 설정 파일
├── gradle.properties # Gradle 설정 프로퍼티
├── local.properties # 로컬 환경 설정 (Android SDK 경로 등)
├── gradlew # Gradle Wrapper 실행 파일 (Unix/Linux/Mac)
└── gradlew.bat # Gradle Wrapper 실행 파일 (Windows)
gradle/
├── libs.versions.toml # 의존성 버전 카탈로그 (Version Catalog)
└── wrapper/
├── gradle-wrapper.jar # Gradle Wrapper JAR 파일
└── gradle-wrapper.properties # Gradle Wrapper 설정
composeApp/
├── build.gradle.kts # composeApp 모듈 빌드 스크립트
├── build/ # 빌드 결과물 디렉토리
│ └── generated/ # 자동 생성된 파일들
│ └── compose/
│ └── resourceGenerator/
│ ├── kotlin/ # 리소스 접근용 자동 생성 Kotlin 파일들
│ │ ├── androidMainResourceAccessors/ # Android 리소스 접근자
│ │ ├── androidMainResourceCollectors/ # Android 리소스 수집기
│ │ ├── commonMainResourceCollectors/ # 공통 리소스 수집기
│ │ └── commonResClass/ # 공통 리소스 클래스 (Res.kt)
│ └── preparedResources/ # 준비된 리소스 파일들
└── src/ # 소스 코드 디렉토리
├── androidMain/ # Android 플랫폼 전용 코드
│ ├── AndroidManifest.xml # Android 앱 매니페스트
│ ├── composeResources/ # Compose 리소스
│ │ └── drawable/ # Drawable 리소스
│ ├── kotlin/ # Android Kotlin 소스 코드
│ │ └── org/example/project/
│ │ ├── App.kt # Android 앱 컴포넌트
│ │ └── MainActivity.kt # Android 메인 액티비티
│ └── res/ # Android 네이티브 리소스
│ ├── drawable/ # 일반 Drawable 리소스
│ ├── drawable-v24/ # API 24+ Drawable 리소스
│ ├── mipmap-*/ # 앱 아이콘 (다양한 해상도)
│ └── values/ # 문자열, 색상 등 값 리소스
└── androidUnitTest/ # Android 단위 테스트
└── kotlin/
└── org/example/project/
└── ComposeAppAndroidUnitTest.kt
iosApp/
├── Configuration/
│ └── Config.xcconfig # Xcode 빌드 설정
├── iosApp/ # iOS 앱 소스 코드
│ ├── Assets.xcassets/ # iOS 앱 에셋 (아이콘, 색상 등)
│ │ ├── AccentColor.colorset/
│ │ ├── AppIcon.appiconset/
│ │ └── Contents.json
│ ├── ContentView.swift # SwiftUI 메인 뷰
│ ├── Info.plist # iOS 앱 정보 설정
│ ├── Preview Content/ # SwiftUI 프리뷰용 에셋
│ │ └── Preview Assets.xcassets/
│ └── iOSApp.swift # iOS 앱 진입점
└── iosApp.xcodeproj/ # Xcode 프로젝트 파일
├── project.pbxproj # Xcode 프로젝트 설정
└── project.xcworkspace/ # Xcode 워크스페이스
├── contents.xcworkspacedata
└── xcshareddata/
└── swiftpm/
└── configuration/
shared/
├── build.gradle.kts # shared 모듈 빌드 스크립트
├── build/ # 빌드 결과물
│ ├── internal/kmp/ # KMP 내부 빌드 파일
│ ├── kotlin/ # Kotlin 컴파일 결과
│ ├── kotlinProjectStructureMetadata/ # 프로젝트 구조 메타데이터
│ └── tmp/ # 임시 파일
└── src/ # 소스 코드
├── androidMain/ # Android 플랫폼별 구현
│ └── kotlin/
│ └── org/example/project/
│ └── Platform.android.kt # Android 플랫폼 구현
├── commonMain/ # 모든 플랫폼 공통 코드
│ └── kotlin/
│ └── org/example/project/
│ ├── Greeting.kt # 공통 비즈니스 로직
│ └── Platform.kt # 플랫폼 추상화 인터페이스
├── commonTest/ # 공통 테스트 코드
│ └── kotlin/
│ └── org/example/project/
│ └── SharedCommonTest.kt
└── iosMain/ # iOS 플랫폼별 구현
└── kotlin/
└── org/example/project/
└── Platform.ios.kt # iOS 플랫폼 구현
Platform.kt
(commonMain): 플랫폼별 기능을 추상화한 expect 선언Platform.android.kt
, Platform.ios.kt
: 각 플랫폼의 actual 구현libs.versions.toml
)로 의존성 버전 관리build.gradle.kts
파일안드로이드는 원래 하던듯이 빌드하면 된다.
IOS 에서는 안됌.따로 해줘야하ㅣㅁ
Xcode에서 Project navigator의 프로젝트 이름을 더블클릭하여 iOS 프로젝트 설정을 열기
왼쪽 Targets 섹션에서 프로젝트를 선택한 후 Build Phases 탭을 클릭.
( 아이콘을 클릭하고 New Run Script Phase를 선택합니다. )
생성된 Run Script 항목을 확장하고 텍스트 필드에 다음 스크립트 넣기.
( 오른쪽 Full Path 경로보고 따라 치면됨 )
cd "$SRCROOT/.."
./gradlew :shared:embedAndSignAppleFrameworkForXcode
만약 안돼면
cd "$SRCROOT/.."
./gradlew clean
./gradlew :shared:embedAndSignAppleFrameworkForXcode
1) 메인 메뉴에서 File | Sync Project with Gradle Files를 선택합니다. Android Studio가 자동으로 simpleLoginIOS라는 실행 구성을 생성합니다.
2) 실행 구성 목록에서 simpleLoginIOS를 선택합니다. iOS 시뮬레이터를 선택하고 Run을 클릭합니다.
06/03 정정 : 버젼이슈. 2025.1.1 이상 안드로이드로 설치.
Failed waiting too long for the connection to be established
버젼을 다르게해도 똑같아서 그냥 포기.
2) Xcode 상에서 UI 작업하고 돌리기
어차피 안드로이드 스튜디오에서 UI 볼수가 없어서 Xcode 키는게 낫긴 할듯.