Compose Multiplatform 1.10.0-beta01의 새로운 기능
이번 EAP 기능 릴리스의 주요 내용은 다음과 같습니다:
이번 릴리스의 전체 변경 사항 목록은 GitHub에서 확인할 수 있습니다.
의존성
Gradle 플러그인
org.jetbrains.compose, 버전1.10.0-beta01. Jetpack Compose 라이브러리 기반:Compose Material3 라이브러리
org.jetbrains.compose.material3:material3*:1.10.0-alpha04. Jetpack Compose Material3 1.5.0-alpha07 기반Compose Material3 Adaptive 라이브러리
org.jetbrains.compose.material3.adaptive:adaptive*:1.3.0-alpha01. Jetpack Compose Material3 Adaptive 1.3.0-alpha02 기반Lifecycle 라이브러리
org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0-alpha04. Jetpack Lifecycle 2.10.0-beta01 기반Navigation 라이브러리
org.jetbrains.androidx.navigation:navigation-*:2.9.1. Jetpack Navigation 2.9.4 기반Navigation 3 라이브러리
org.jetbrains.androidx.navigation:navigation3-*:1.0.0-alpha04. Jetpack Navigation 3 기반Navigation Event 라이브러리
org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.0-beta01. Jetpack Navigation Event 1.0.0-beta01 기반Savedstate 라이브러리
org.jetbrains.androidx.savedstate:savedstate*:1.4.0-beta01. Jetpack Savedstate 1.4.0-rc01 기반WindowManager Core 라이브러리
org.jetbrains.androidx.window:window-core:1.5.0-rc01. Jetpack WindowManager 1.5.0 기반
크로스 플랫폼
통합된 @Preview 어노테이션
여러 플랫폼에 걸쳐 미리 보기에 대한 접근 방식을 통합했습니다. 이제 commonMain 소스 세트의 모든 대상 플랫폼에서 androidx.compose.ui.tooling.preview.Preview 어노테이션을 사용할 수 있습니다.
org.jetbrains.compose.ui.tooling.preview.Preview와 같은 다른 모든 어노테이션 및 데스크톱 전용 androidx.compose.desktop.ui.tooling.preview.Preview는 더 이상 사용되지 않습니다.
Navigation 3 지원
Navigation 3는 Compose와 함께 작동하도록 설계된 새로운 내비게이션 라이브러리입니다. Navigation 3를 사용하면 백 스택을 완벽하게 제어할 수 있으며, 목적지로 이동하고 돌아오는 것은 목록에서 항목을 추가하고 제거하는 것만큼 간단합니다. 새로운 기본 원칙과 결정 사항에 대해서는 Navigation 3 문서와 안내 블로그 게시물에서 확인할 수 있습니다.
Compose Multiplatform 1.10.0-beta01은 비 Android 대상에서 새로운 내비게이션 API를 사용하는 것에 대한 알파 지원을 제공합니다. 릴리스된 멀티플랫폼 아티팩트는 다음과 같습니다:
- Navigation 3 UI 라이브러리,
org.jetbrains.androidx.navigation3:navigation3-ui - Navigation 3용 ViewModel,
org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3 - Navigation 3용 Material 3 적응형 레이아웃,
org.jetbrains.compose.material3.adaptive:adaptive-navigation3
원본 Android 저장소에서 미러링된 nav3-recipes 샘플에서 멀티플랫폼 Navigation 3 구현 예제를 찾을 수 있습니다.
일부 플랫폼별 구현 세부 정보:
- iOS에서는 EndEdgePanGestureBehavior 옵션(기본적으로
Disabled)을 사용하여 끝 가장자리 패닝 제스처에 대한 내비게이션을 관리할 수 있습니다. 여기서 "끝 가장자리"는 LTR 인터페이스에서 화면의 오른쪽 가장자리를, RTL 인터페이스에서는 왼쪽 가장자리를 의미합니다. 시작 가장자리는 끝 가장자리와 반대이며 항상 뒤로 가기 제스처에 바인딩됩니다. - 웹 앱에서 데스크톱 브라우저에서 Esc 키를 누르면 사용자가 이전 화면으로 돌아가고 (대화 상자, 팝업 및 Material 3의
SearchBar와 같은 일부 위젯을 닫습니다), 이는 데스크톱 앱에서 이미 그러하듯이 작동합니다. - 브라우저 기록 내비게이션 지원 및 주소 표시줄에서 목적지를 사용하는 것은 Compose Multiplatform 1.10에서 Navigation 3으로 확장되지 않을 것입니다. 이는 멀티플랫폼 라이브러리의 이후 버전으로 연기되었습니다.
Skia Milestone 138로 업데이트
Skiko를 통해 Compose Multiplatform에서 사용하는 Skia 버전이 Milestone 138로 업데이트되었습니다.
이전 Skia 버전은 Milestone 132였습니다. 이 버전들 사이의 변경 사항은 릴리스 노트에서 확인할 수 있습니다.
iOS
창 인셋
Compose Multiplatform은 이제 WindowInsetsRulers를 지원합니다. 이는 상태 표시줄, 내비게이션 바 또는 화면 키보드와 같은 창 인셋을 기반으로 UI 요소를 배치하고 크기를 조정하는 기능을 제공합니다.
창 인셋을 관리하는 이 새로운 접근 방식은 플랫폼별 창 인셋 데이터를 검색하기 위한 단일 구현을 사용합니다. 이는 WindowInsets와 WindowInsetsRulers 모두 공통 메커니즘을 사용하여 인셋을 일관되게 관리한다는 것을 의미합니다. 이에 따라 LocalLayoutMargins, LocalSafeArea, LocalKeyboardOverlapHeight 및 LocalInterfaceOrientation을 포함한 플랫폼별 로컬은 새로운 통합 API를 선호하여 제거되었습니다.
이전에는
WindowInsets.Companion.captionBar가@Composable로 표시되지 않았습니다. 여러 플랫폼에서 해당 동작을 일치시키기 위해@Composable속성을 추가했습니다.
개선된 IME 구성
1.9.0에서 도입된 iOS 전용 IME 사용자 정의에 이어서, 이번 릴리스에서는 PlatformImeOptions로 텍스트 입력 뷰를 구성하기 위한 새로운 API를 추가합니다.
이 새로운 API를 통해 필드가 포커스를 얻고 IME를 트리거할 때 입력 인터페이스를 사용자 정의할 수 있습니다:
UIResponder.inputView는 기본 시스템 키보드를 대체하기 위한 사용자 정의 입력 뷰를 지정합니다.UIResponder.inputAccessoryView는 IME 활성화 시 시스템 키보드 또는 사용자 정의inputView에 연결되는 사용자 정의 액세서리 뷰를 정의합니다.
데스크톱
Compose Hot Reload 통합
Compose Hot Reload 플러그인은 이제 Compose Multiplatform Gradle 플러그인에 번들로 제공됩니다. Hot Reload 플러그인을 별도로 구성할 필요가 없으며, 데스크톱을 대상으로 하는 Compose Multiplatform 프로젝트에서는 기본적으로 활성화되어 있습니다.
Compose Hot Reload 플러그인을 명시적으로 선언하는 프로젝트의 경우 다음과 같습니다:
- Compose Multiplatform Gradle 플러그인에서 제공하는 버전을 사용하기 위해 선언을 안전하게 제거할 수 있습니다.
- 특정 버전 선언을 유지하기로 선택하면 번들로 제공되는 버전 대신 해당 버전이 사용됩니다.
번들로 제공되는 Compose Hot Reload Gradle 플러그인은 Compose Multiplatform 프로젝트에 필요한 Kotlin 버전을 2.1.20으로 올립니다.
SwingPanel 자동 크기 조정
SwingPanel은 이제 콘텐츠의 최소, 권장 및 최대 크기를 기반으로 크기를 자동으로 조정합니다. 이를 통해 정확한 크기를 계산하고 고정된 치수를 미리 지정할 필요가 없어집니다.
val label = JLabel("Hello Swing!")
singleWindowApplication {
SwingPanel(factory = { label })
LaunchedEffect(Unit) {
delay(500)
// Grows the text
repeat(2) {
label.text = "#${label.text}#"
delay(200)
}
// Shrinks the text
repeat(2) {
label.text = label.text.substring(1, label.text.length - 1)
delay(200)
}
}
}Gradle
지원 중단된 의존성 별칭
Compose Multiplatform Gradle 플러그인(compose.ui 및 기타)에서 지원하는 의존성 별칭은 1.10.0-beta01 릴리스와 함께 지원 중단됩니다. 버전 카탈로그에 직접 라이브러리 참조를 추가하는 것을 권장합니다. 해당 지원 중단 알림에서 특정 참조가 제안됩니다.
이 변경 사항으로 인해 Compose Multiplatform 라이브러리에 대한 의존성 관리가 조금 더 투명해질 것입니다. 앞으로 Compose Multiplatform용 BOM을 제공하여 호환 가능한 버전 설정을 간소화할 수 있기를 바랍니다.
AGP 9.0.0 지원
Compose Multiplatform은 Android Gradle 플러그인(AGP) 버전 9.0.0에 대한 지원을 도입합니다. 새로운 AGP 버전과의 호환성을 위해 Compose Multiplatform 1.9.3 또는 1.10.0으로 업그레이드해야 합니다.
장기적으로 업데이트 프로세스를 더 원활하게 만들기 위해, 프로젝트 구조를 변경하여 AGP 사용을 전용 Android 모듈로 분리하는 것을 권장합니다.
