이 라이브러리의 주요 목표는 디버그 패널을 구축하는 방법을 지정하는 공통 코드에서 클래스 정의를 갖는 것입니다. 이 정의를 사용하여 라이브러리는 다음을 생성합니다.
사용 사례에서 생성 된보기 데이터 목록은 사용자 상호 작용을 처리하는 내장형보기 모델로 전달할 수 있습니다. 라이브러리와 함께 제공되는 기본 UI를 사용하거나 직접 구축 할 수 있습니다.
라이브러리는 Mirego의 공개 Maven 저장소에 게시되므로 Settings.gradle.kts dependencyResolutionManagement 블록에 포함되어 있는지 확인하십시오.
dependencyResolutionManagement {
repositories {
// ...
maven( " https://s3.amazonaws.com/mirego-maven/public " )
}
}최상위 build.gradle.kts 파일에서 KSP 플러그인에 대한 참조를 추가하십시오.
plugins {
// ...
id( " com.google.devtools.ksp " ) version " 1.9.21-1.0.15 " apply false
}공통 모듈의 build.gradle.kts 파일에서 KSP 플러그인에 대한 참조를 추가하십시오.
plugins {
// ...
id( " com.google.devtools.ksp " )
} 또한 KSP 생성 소스 디렉토리와 함께 core 및 annotations 종속성을 추가하십시오.
val commonMain by getting {
dependencies {
// ...
api( " com.mirego.trikot:viewmodels-declarative-flow:x.y.z " )
api( " com.mirego.debugpanel:core:x.y.z " )
implementation( " com.mirego.debugpanel:annotations:x.y.z " )
}
kotlin.srcDir( " build/generated/ksp/metadata/commonMain/kotlin " )
}핵심 종속성을 iOS 프레임 워크로 내보내는 것을 잊지 마십시오.
kotlin {
cocoapods {
framework {
// ...
export( " com.mirego.trikot:viewmodels-declarative-flow:x.y.z " )
export( " com.mirego.debugpanel:core:x.y.z " )
}
}
}또한 종속성 블록에 컴파일러의 참조를 추가해야합니다.
dependencies {
add( " kspCommonMainMetadata " , " com.mirego.debugpanel:compiler:x.y.z " )
} api() 함수와 함께 라이브러리를 포함하므로 샘플 UI는 공통 모듈에서 자동으로 분해됩니다.
컴파일 중에 복제 된 META-INF/versions/9/previous-compilation-data.bin
android {
packaging {
resources {
excludes + = listOf (
" META-INF/versions/9/previous-compilation-data.bin "
)
}
}
}iOS에서 샘플 UI를 사용하려면 응용 프로그램의 podfile에 포드를 포함시킵니다.
pod 'Trikot/viewmodels.declarative.SwiftUI.flow', :git => '[email protected]:mirego/trikot.git', :tag => 'x.y.z', :inhibit_warnings => true
pod 'DebugPanel', :git => '[email protected]:mirego/debug-panel.git', :tag => 'x.y.z', :inhibit_warnings => true
Common의 모듈에서 @debugpanel 주석으로 클래스를 만듭니다. 아래 표에서 사용 가능한 다양한 구성 요소를 찾을 수 있습니다.
@DebugPanel(prefix = " MyProject " , packageName = " com.myproject.app.generated " )
data class DebugPanelConfig (
val toggle : DebugPanelToggle ,
val label : DebugPanelLabel ,
val textField : DebugPanelTextField ,
val button : DebugPanelButton ,
val picker : DebugPanelPicker ,
val datePicker : DebugPanelDatePicker ,
val enumPicker : SomeEnum
) 구성이 완료되면 kspCommonMainMetadata Gradle 작업을 실행하여 프로젝트의 특정 파일을 생성 할 수 있습니다.
이제 MyProjectDebugPanelUseCase.kt , MyProjectDebugPanelUseCaseImpl.kt , MyProjectDebugPanelRepository.kt 및 MyProjectDebugPanelRepositoryImpl.kt 클래스 경로에서 사용할 수 있어야합니다.
지금해야 할 일은 구현을 인스턴스화하기 만하면됩니다.
private val repository : MyProjectDebugPanelRepository = MyProjectDebugPanelRepositoryImpl ()
private val useCase : MyProjectDebugPanelUseCase = MyProjectDebugPanelUseCaseImpl (repository)
/* ... */
class ParentViewModelImpl (
coroutineScope : CoroutineScope ,
useCase : MyProjectDebugPanelUseCase
) : ParentViewModel, VMDViewModelImpl(coroutineScope) {
override val debugPanel = DebugPanelViewModelImpl (
coroutineScope,
useCase,
useCase.createViewData( /* Configure the components here */ )
)
} createViewData() 함수의 componentsVisibility 매개 변수에서 각 구성 요소의 가시성을 제어 할 수 있습니다.
예:
useCase.createViewData(
/* ... */
componentsVisibility = flowOf(
MyProjectDebugPanelComponentsVisibility (
button1 = false ,
button2 = true ,
)
)
) 이 경우 button1 숨겨지고 button2 가 보입니다.
| 이름 | 지속 된 데이터 유형 | 구성 |
|---|---|---|
| Debugpaneltoggle | Boolean | 초기 Boolean 가치 |
| 디버그 파넬 라벨 | - | Flow<String> |
| DebugpanelTextfield | String | 초기 String 값 |
| Debugpanelbutton | - | 초기 () -> Unit 값 |
| DebugpanelPicker | String | 선택한 항목 식별자를 나타내는 초기 String 값 |
| DebugpanelDatePicker | Long | 밀리 초의 에포크를 나타내는 초기 Long 값 |
| 열거적 | String | 초기 열거 값 |
디버그 패널은 @DebugPanel(val prefix: String, val packageName: String) 주석을 사용하여 구성됩니다.
prefix 생성 된 사용 사례 및 저장소 클래스에 포함됩니다.packageName 은 파일이 generated 폴더 내부에서 출력되는 곳입니다. 기본적으로 필드 이름을 식별자로 사용하여 설정에 값이 저장됩니다. 그러나이 동작은 @Identifier(val value: String) 주석을 사용하여 무시할 수 있습니다.
예를 들어, 이것은 오래된 디버그 패널을 이것으로 교체하고 원래 키를 유지하려는 경우에 유용합니다.
예:
@Identifier( " PREVIEW_MODE " )
val preview : DebugPanelToggle 기본적으로 구성 요소는 필드 이름을 값으로 한 레이블 옆에 표시됩니다. @DisplayName(val value: String) 주석을 사용하여 구성 요소에보다 의미있는 레이블을 제공 할 수 있습니다.
예:
@DisplayName( " Preview Mode " )
val preview : DebugPanelToggle @DebugProperty(val name: String) 주석을 사용하여 클래스 속성에 바인딩되는 구성 요소를 생성 할 수 있습니다.
예를 들어, String 또는 Flow<String> 속성이있는 저장소를 가질 수 있으며, 필드에 주석을두면 라이브러리는 대의원을 생성합니다.
그런 다음 인터페이스 에이 대의원 필드를 노출 할 수 있으며 발신자는 내부 값 또는 디버그 패널 (재정의 된 경우)에서 내부 값을 수신합니다.
이 주석은 String , Boolean , Enum , Flow<String> , Flow<Boolean> 및 Flow<Enum> 유형과 함께 사용할 수 있습니다.
예:
Repository.kt
interface Repository {
val value : Flow < String >
} RepositoryImpl.kt
class RepositoryImpl : Repository {
@Identifier( " custom_value_identifier " )
@DebugProperty( " value " )
val internalValue = flowOf( " String value " )
override val value by RepositoryImplValueDelegate
}방문객:
val repository : Repository = RepositoryImpl ()
repository.value.map {
println ( " Repository value: $it " )
} 이것은 인쇄됩니다
Repository value: String value 또는 Repository value: Overridden value 생성 된 텍스트 필드 내에서 Overridden value 입력되었는지에 따라 재정의 값.
생성 된 저장소에는 지속 된 구성 요소 값을 지우기 위해 호출 할 수있는 resetSettings() 메소드가 함께 제공됩니다. 디버그 패널보기 모델은 이러한 값에 바인딩되지 않으므로 디버그 패널 화면을 종료하거나 값이 올바르게 재설정되도록 응용 프로그램을 죽여야합니다 (샘플 응용 프로그램 폴더의 RootViewModelImpl.kt 참조).
생성 된 유스 케이스 및 저장소 구현에는 open Modifier가 있으므로 필요한 경우 더 많은 기능을 추가하도록 확장 할 수 있습니다.
프로젝트에 Koin과 같은 종속성 주입 라이브러리가 있고 자신만의 확장 클래스가있는 경우 @Factory 또는 @Single 로 주석을 달 수 있습니다.
이 클래스를 무시할 필요가 없으면 종속성 주입 모듈에 수동으로 넣을 수 있습니다.
디버그 패널은 © 2013-2023 Mirego이며 새로운 BSD 라이센스에 따라 자유롭게 배포 될 수 있습니다. LICENSE.md 파일을 참조하십시오.
Mirego는 일이 당신이 혁신하고 즐길 수있는 곳이라고 믿는 열정적 인 사람들로 구성된 팀입니다. 우리는 아름다운 웹 및 모바일 애플리케이션을 상상하고 구축하는 재능있는 사람들로 구성된 팀입니다. 우리는 아이디어를 공유하고 세상을 변화시키기 위해 함께 모입니다.
우리는 또한 오픈 소스 소프트웨어를 좋아하며 가능한 한 커뮤니티에 환원하려고 노력합니다.