From d705b4547c783b6119f9dfaa35ca213c62a1bc09 Mon Sep 17 00:00:00 2001 From: Denis Gaponov Date: Wed, 16 Jun 2021 23:45:18 +0300 Subject: [PATCH 1/8] added mediatorOf() to simplify mediator use --- .../moko/mvvm/livedata/LiveDataTransforms.kt | 7 + .../moko/mvvm/livedata/MediatorCompose.kt | 239 ++++++++++++++++++ .../moko/mvvm/livedata/MediatorLiveDataExt.kt | 7 + 3 files changed, 253 insertions(+) create mode 100644 mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/MediatorCompose.kt diff --git a/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/LiveDataTransforms.kt b/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/LiveDataTransforms.kt index b838caa3..dd44e9c3 100644 --- a/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/LiveDataTransforms.kt +++ b/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/LiveDataTransforms.kt @@ -34,6 +34,13 @@ fun LiveData.flatMap(function: (T) -> LiveData): LiveData { return mutableLiveData!! } +@Deprecated( + message = "Use mediatorOf() instead", + replaceWith = ReplaceWith( + expression = "mediatorOf()", + imports = arrayOf("dev.icerock.moko.mvvm.livedata.mediatorOf") + ) +) fun LiveData.mergeWith( secondLiveData: LiveData, function: (I1T, I2T) -> OT diff --git a/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/MediatorCompose.kt b/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/MediatorCompose.kt new file mode 100644 index 00000000..38040929 --- /dev/null +++ b/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/MediatorCompose.kt @@ -0,0 +1,239 @@ +/* + * Copyright 2021 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. + */ + +package dev.icerock.moko.mvvm.livedata + +@Suppress("UNCHECKED_CAST") +fun mediatorOf( + source1: LiveData, + source2: LiveData, + function: (T1, T2) -> R +): LiveData = + listOf(source1, source2).mediator { values -> + function( + values[0] as T1, + values[1] as T2, + ) + } + +@Suppress("UNCHECKED_CAST") +fun mediatorOf( + source1: LiveData, + source2: LiveData, + source3: LiveData, + function: (T1, T2, T3) -> R +): LiveData = + listOf(source1, source2, source3).mediator { values -> + function( + values[0] as T1, + values[1] as T2, + values[2] as T3, + ) + } + +@Suppress("UNCHECKED_CAST") +fun mediatorOf( + source1: LiveData, + source2: LiveData, + source3: LiveData, + source4: LiveData, + function: (T1, T2, T3, T4) -> R +): LiveData = + listOf(source1, source2, source3, source4).mediator { values -> + function( + values[0] as T1, + values[1] as T2, + values[2] as T3, + values[3] as T4, + ) + } + +@Suppress("UNCHECKED_CAST") +fun mediatorOf( + source1: LiveData, + source2: LiveData, + source3: LiveData, + source4: LiveData, + source5: LiveData, + function: (T1, T2, T3, T4, T5) -> R +): LiveData = + listOf(source1, source2, source3, source4, source5).mediator { values -> + function( + values[0] as T1, + values[1] as T2, + values[2] as T3, + values[3] as T4, + values[4] as T5, + ) + } + +@Suppress("UNCHECKED_CAST") +fun mediatorOf( + source1: LiveData, + source2: LiveData, + source3: LiveData, + source4: LiveData, + source5: LiveData, + source6: LiveData, + function: (T1, T2, T3, T4, T5, T6) -> R +): LiveData = + listOf( + source1, + source2, + source3, + source4, + source5, + source6, + ).mediator { values -> + function( + values[0] as T1, + values[1] as T2, + values[2] as T3, + values[3] as T4, + values[4] as T5, + values[5] as T6, + ) + } + +@Suppress("UNCHECKED_CAST") +fun mediatorOf( + source1: LiveData, + source2: LiveData, + source3: LiveData, + source4: LiveData, + source5: LiveData, + source6: LiveData, + source7: LiveData, + function: (T1, T2, T3, T4, T5, T6, T7) -> R +): LiveData = + listOf( + source1, + source2, + source3, + source4, + source5, + source6, + source7, + ).mediator { values -> + function( + values[0] as T1, + values[1] as T2, + values[2] as T3, + values[3] as T4, + values[4] as T5, + values[5] as T6, + values[6] as T7, + ) + } + +@Suppress("UNCHECKED_CAST") +fun mediatorOf( + source1: LiveData, + source2: LiveData, + source3: LiveData, + source4: LiveData, + source5: LiveData, + source6: LiveData, + source7: LiveData, + source8: LiveData, + function: (T1, T2, T3, T4, T5, T6, T7, T8) -> R +): LiveData = + listOf( + source1, + source2, + source3, + source4, + source5, + source6, + source7, + source8, + ).mediator { values -> + function( + values[0] as T1, + values[1] as T2, + values[2] as T3, + values[3] as T4, + values[4] as T5, + values[5] as T6, + values[6] as T7, + values[7] as T8, + ) + } + +@Suppress("UNCHECKED_CAST") +fun mediatorOf( + source1: LiveData, + source2: LiveData, + source3: LiveData, + source4: LiveData, + source5: LiveData, + source6: LiveData, + source7: LiveData, + source8: LiveData, + source9: LiveData, + function: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R +): LiveData = + listOf( + source1, + source2, + source3, + source4, + source5, + source6, + source7, + source8, + source9, + ).mediator { values -> + function( + values[0] as T1, + values[1] as T2, + values[2] as T3, + values[3] as T4, + values[4] as T5, + values[5] as T6, + values[6] as T7, + values[7] as T8, + values[8] as T9, + ) + } + +@Suppress("UNCHECKED_CAST") +fun mediatorOf( + source1: LiveData, + source2: LiveData, + source3: LiveData, + source4: LiveData, + source5: LiveData, + source6: LiveData, + source7: LiveData, + source8: LiveData, + source9: LiveData, + source10: LiveData, + function: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R +): LiveData = + listOf( + source1, + source2, + source3, + source4, + source5, + source6, + source7, + source8, + source9, + source10 + ).mediator { values -> + function( + values[0] as T1, + values[1] as T2, + values[2] as T3, + values[3] as T4, + values[4] as T5, + values[5] as T6, + values[6] as T7, + values[7] as T8, + values[8] as T9, + values[9] as T10, + ) + } diff --git a/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/MediatorLiveDataExt.kt b/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/MediatorLiveDataExt.kt index d6365aad..a1816844 100644 --- a/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/MediatorLiveDataExt.kt +++ b/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/MediatorLiveDataExt.kt @@ -4,6 +4,13 @@ package dev.icerock.moko.mvvm.livedata +@Deprecated( + message = "Use mediatorOf() instead", + replaceWith = ReplaceWith( + expression = "mediatorOf()", + imports = arrayOf("dev.icerock.moko.mvvm.livedata.mediatorOf") + ) +) fun MediatorLiveData.compose( firstInput: LiveData, secondInput: LiveData, From 78a6f6ce5ff9f0ec587a74b32d08bedbac1d3d54 Mon Sep 17 00:00:00 2001 From: Aleksey Mikhailov Date: Sat, 19 Jun 2021 11:57:31 +0700 Subject: [PATCH 2/8] apiDump --- mvvm-livedata/api/mvvm-livedata.api | 12 +++++++++++ .../moko/mvvm/livedata/MediatorCompose.kt | 21 +++++++++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/mvvm-livedata/api/mvvm-livedata.api b/mvvm-livedata/api/mvvm-livedata.api index 16d5fdf7..c54a6ee2 100644 --- a/mvvm-livedata/api/mvvm-livedata.api +++ b/mvvm-livedata/api/mvvm-livedata.api @@ -75,6 +75,18 @@ public final class dev/icerock/moko/mvvm/livedata/LiveDataTransformsKt { public static final fun mergeWith (Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Lkotlin/jvm/functions/Function2;)Ldev/icerock/moko/mvvm/livedata/MediatorLiveData; } +public final class dev/icerock/moko/mvvm/livedata/MediatorComposeKt { + public static final fun mediatorOf (Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Lkotlin/jvm/functions/Function10;)Ldev/icerock/moko/mvvm/livedata/LiveData; + public static final fun mediatorOf (Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Lkotlin/jvm/functions/Function9;)Ldev/icerock/moko/mvvm/livedata/LiveData; + public static final fun mediatorOf (Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Lkotlin/jvm/functions/Function8;)Ldev/icerock/moko/mvvm/livedata/LiveData; + public static final fun mediatorOf (Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Lkotlin/jvm/functions/Function7;)Ldev/icerock/moko/mvvm/livedata/LiveData; + public static final fun mediatorOf (Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Lkotlin/jvm/functions/Function6;)Ldev/icerock/moko/mvvm/livedata/LiveData; + public static final fun mediatorOf (Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Lkotlin/jvm/functions/Function5;)Ldev/icerock/moko/mvvm/livedata/LiveData; + public static final fun mediatorOf (Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Lkotlin/jvm/functions/Function4;)Ldev/icerock/moko/mvvm/livedata/LiveData; + public static final fun mediatorOf (Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Lkotlin/jvm/functions/Function3;)Ldev/icerock/moko/mvvm/livedata/LiveData; + public static final fun mediatorOf (Ldev/icerock/moko/mvvm/livedata/LiveData;Ldev/icerock/moko/mvvm/livedata/LiveData;Lkotlin/jvm/functions/Function2;)Ldev/icerock/moko/mvvm/livedata/LiveData; +} + public class dev/icerock/moko/mvvm/livedata/MediatorLiveData : dev/icerock/moko/mvvm/livedata/MutableLiveData { public fun (Ljava/lang/Object;)V public final fun addSource (Ldev/icerock/moko/mvvm/livedata/LiveData;Lkotlin/jvm/functions/Function1;)V diff --git a/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/MediatorCompose.kt b/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/MediatorCompose.kt index 38040929..75f5e686 100644 --- a/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/MediatorCompose.kt +++ b/mvvm-livedata/src/commonMain/kotlin/dev/icerock/moko/mvvm/livedata/MediatorCompose.kt @@ -11,6 +11,7 @@ fun mediatorOf( function: (T1, T2) -> R ): LiveData = listOf(source1, source2).mediator { values -> + @Suppress("MagicNumber") function( values[0] as T1, values[1] as T2, @@ -25,6 +26,7 @@ fun mediatorOf( function: (T1, T2, T3) -> R ): LiveData = listOf(source1, source2, source3).mediator { values -> + @Suppress("MagicNumber") function( values[0] as T1, values[1] as T2, @@ -41,6 +43,7 @@ fun mediatorOf( function: (T1, T2, T3, T4) -> R ): LiveData = listOf(source1, source2, source3, source4).mediator { values -> + @Suppress("MagicNumber") function( values[0] as T1, values[1] as T2, @@ -49,7 +52,7 @@ fun mediatorOf( ) } -@Suppress("UNCHECKED_CAST") +@Suppress("UNCHECKED_CAST", "LongParameterList") fun mediatorOf( source1: LiveData, source2: LiveData, @@ -59,6 +62,7 @@ fun mediatorOf( function: (T1, T2, T3, T4, T5) -> R ): LiveData = listOf(source1, source2, source3, source4, source5).mediator { values -> + @Suppress("MagicNumber") function( values[0] as T1, values[1] as T2, @@ -68,7 +72,7 @@ fun mediatorOf( ) } -@Suppress("UNCHECKED_CAST") +@Suppress("UNCHECKED_CAST", "LongParameterList") fun mediatorOf( source1: LiveData, source2: LiveData, @@ -86,6 +90,7 @@ fun mediatorOf( source5, source6, ).mediator { values -> + @Suppress("MagicNumber") function( values[0] as T1, values[1] as T2, @@ -96,7 +101,7 @@ fun mediatorOf( ) } -@Suppress("UNCHECKED_CAST") +@Suppress("UNCHECKED_CAST", "LongParameterList") fun mediatorOf( source1: LiveData, source2: LiveData, @@ -116,6 +121,7 @@ fun mediatorOf( source6, source7, ).mediator { values -> + @Suppress("MagicNumber") function( values[0] as T1, values[1] as T2, @@ -127,7 +133,7 @@ fun mediatorOf( ) } -@Suppress("UNCHECKED_CAST") +@Suppress("UNCHECKED_CAST", "LongParameterList") fun mediatorOf( source1: LiveData, source2: LiveData, @@ -149,6 +155,7 @@ fun mediatorOf( source7, source8, ).mediator { values -> + @Suppress("MagicNumber") function( values[0] as T1, values[1] as T2, @@ -161,7 +168,7 @@ fun mediatorOf( ) } -@Suppress("UNCHECKED_CAST") +@Suppress("UNCHECKED_CAST", "LongParameterList") fun mediatorOf( source1: LiveData, source2: LiveData, @@ -185,6 +192,7 @@ fun mediatorOf( source8, source9, ).mediator { values -> + @Suppress("MagicNumber") function( values[0] as T1, values[1] as T2, @@ -198,7 +206,7 @@ fun mediatorOf( ) } -@Suppress("UNCHECKED_CAST") +@Suppress("UNCHECKED_CAST", "LongParameterList") fun mediatorOf( source1: LiveData, source2: LiveData, @@ -224,6 +232,7 @@ fun mediatorOf( source9, source10 ).mediator { values -> + @Suppress("MagicNumber") function( values[0] as T1, values[1] as T2, From f90f7c9534450d617bd662df8b786b21ce34d5ff Mon Sep 17 00:00:00 2001 From: Aleksey Mikhailov Date: Sat, 19 Jun 2021 14:31:55 +0700 Subject: [PATCH 3/8] improvements ci --- .github/workflows/compilation-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/compilation-check.yml b/.github/workflows/compilation-check.yml index b220396d..5b16f9d7 100644 --- a/.github/workflows/compilation-check.yml +++ b/.github/workflows/compilation-check.yml @@ -23,7 +23,7 @@ jobs: - name: Install pods run: cd sample/ios-app && pod install - name: build ios sample - run: cd sample/ios-app && xcodebuild -scheme TestProj -workspace TestProj.xcworkspace -configuration Debug build CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO + run: cd sample/ios-app && xcodebuild -scheme TestProj -workspace TestProj.xcworkspace -configuration Debug -sdk iphonesimulator -arch x86_64 build CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcpretty - name: Publish Test Report uses: mikepenz/action-junit-report@v2 if: ${{ always() }} From 19fff71eaed968501ed82ef87808ac4c5de0d5ae Mon Sep 17 00:00:00 2001 From: Anton Shestak Date: Sat, 26 Jun 2021 14:07:34 +0700 Subject: [PATCH 4/8] #144 temp commit, use version catalog --- build.gradle.kts | 46 ++++----- buildSrc/build.gradle.kts | 24 ----- buildSrc/src/main/kotlin/Deps.kt | 108 -------------------- gradle/libs.versions.toml | 45 ++++++++ gradle/wrapper/gradle-wrapper.properties | 2 +- mvvm-core/build.gradle.kts | 18 ++-- mvvm-databinding/build.gradle.kts | 22 ++-- mvvm-internal/build.gradle.kts | 12 +-- mvvm-livedata-glide/build.gradle.kts | 20 ++-- mvvm-livedata-material/build.gradle.kts | 20 ++-- mvvm-livedata-swiperefresh/build.gradle.kts | 20 ++-- mvvm-livedata/build.gradle.kts | 20 ++-- mvvm-state-deprecated/build.gradle.kts | 20 ++-- mvvm-state/build.gradle.kts | 22 ++-- mvvm-test/build.gradle.kts | 20 ++-- mvvm-viewbinding/build.gradle.kts | 18 ++-- mvvm/build.gradle.kts | 8 +- sample/android-app/build.gradle.kts | 14 +-- sample/build.gradle.kts | 21 ++-- sample/mpp-library/build.gradle.kts | 26 ++--- settings.gradle.kts | 12 ++- 21 files changed, 218 insertions(+), 300 deletions(-) delete mode 100644 buildSrc/build.gradle.kts delete mode 100755 buildSrc/src/main/kotlin/Deps.kt create mode 100644 gradle/libs.versions.toml diff --git a/build.gradle.kts b/build.gradle.kts index 277245d5..986ab4f2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,33 +5,31 @@ import java.util.Base64 plugins { - plugin(Deps.Plugins.detekt) apply false - plugin(Deps.Plugins.dokka) apply false id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.5.0" } buildscript { repositories { + mavenCentral() + google() + gradlePluginPortal() } -} -allprojects { - repositories { - mavenCentral() - google() - mavenCentral() + dependencies { + classpath("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.15.0") + classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.4.20") - jcenter { - content { - includeGroup("org.jetbrains.trove4j") - includeModule("org.jetbrains.kotlinx", "kotlinx-html-jvm") - } - } + classpath("dev.icerock:mobile-multiplatform:0.11.0") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20") + classpath("com.android.tools.build:gradle:4.2.1") } +} + +allprojects { - apply(plugin = Deps.Plugins.detekt.id) - apply(plugin = Deps.Plugins.dokka.id) + apply(plugin = "io.gitlab.arturbosch.detekt") + apply(plugin = "org.jetbrains.dokka") configure { input.setFrom( @@ -43,23 +41,23 @@ allprojects { } dependencies { - "detektPlugins"(Deps.Libs.Jvm.detektFormatting) + "detektPlugins"(rootProject.libs.detektFormatting) } - plugins.withId(Deps.Plugins.androidLibrary.id) { + plugins.withId("com.android.library") { configure { - compileSdkVersion(Deps.Android.compileSdk) + compileSdkVersion(libs.versions.compileSdk.get().toInt()) defaultConfig { - minSdkVersion(Deps.Android.minSdk) - targetSdkVersion(Deps.Android.targetSdk) + minSdkVersion(libs.versions.minSdk.get().toInt()) + targetSdkVersion(libs.versions.targetSdk.get().toInt()) } } } - plugins.withId(Deps.Plugins.mavenPublish.id) { + plugins.withId("org.gradle.maven-publish") { group = "dev.icerock.moko" - version = Deps.mokoMvvmVersion + version = libs.versions.mokoMvvmVersion.get() val javadocJar by tasks.registering(Jar::class) { archiveClassifier.set("javadoc") @@ -106,7 +104,7 @@ allprojects { } } - apply(plugin = Deps.Plugins.signing.id) + apply(plugin = "signing") configure { val signingKeyId: String? = System.getenv("SIGNING_KEY_ID") diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts deleted file mode 100644 index e856d258..00000000 --- a/buildSrc/build.gradle.kts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2019 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. - */ - -plugins { - id("org.jetbrains.kotlin.jvm") version("1.4.31") -} - -repositories { - mavenCentral() - google() - - jcenter { - content { - includeGroup("org.jetbrains.trove4j") - } - } -} - -dependencies { - implementation("dev.icerock:mobile-multiplatform:0.9.1") - implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.31") - implementation("com.android.tools.build:gradle:4.1.1") -} diff --git a/buildSrc/src/main/kotlin/Deps.kt b/buildSrc/src/main/kotlin/Deps.kt deleted file mode 100755 index 1e0b415a..00000000 --- a/buildSrc/src/main/kotlin/Deps.kt +++ /dev/null @@ -1,108 +0,0 @@ -object Deps { - private const val kotlinVersion = "1.4.31" - - private const val androidAppCompatVersion = "1.2.0" - private const val materialDesignVersion = "1.2.1" - private const val androidLifecycleVersion = "2.2.0" - private const val androidCoreTestingVersion = "2.1.0" - private const val glideVersion = "4.11.0" - private const val swipeRefreshVersion = "1.1.0" - - private const val detektVersion = "1.15.0" - private const val dokkaVersion = "1.4.20" - - private const val coroutinesVersion = "1.4.2" - private const val mokoResourcesVersion = "0.15.1" - private const val mokoTestVersion = "0.2.1" - const val mokoMvvmVersion = "0.10.1" - - object Android { - const val compileSdk = 29 - const val targetSdk = 29 - const val minSdk = 16 - } - - object Plugins { - val androidApplication = GradlePlugin(id = "com.android.application") - val androidLibrary = GradlePlugin(id = "com.android.library") - val kotlinMultiplatform = GradlePlugin(id = "org.jetbrains.kotlin.multiplatform") - val kotlinKapt = GradlePlugin(id = "kotlin-kapt") - val kotlinAndroid = GradlePlugin(id = "kotlin-android") - val mavenPublish = GradlePlugin(id = "org.gradle.maven-publish") - - val mobileMultiplatform = GradlePlugin(id = "dev.icerock.mobile.multiplatform") - val iosFramework = GradlePlugin(id = "dev.icerock.mobile.multiplatform.ios-framework") - - val mokoResources = GradlePlugin( - id = "dev.icerock.mobile.multiplatform-resources", - module = "dev.icerock.moko:resources-generator:$mokoResourcesVersion" - ) - - val detekt = GradlePlugin( - id = "io.gitlab.arturbosch.detekt", - version = detektVersion - ) - - val dokka = GradlePlugin( - id = "org.jetbrains.dokka", - version = dokkaVersion - ) - - val signing = GradlePlugin(id = "signing") - } - - object Libs { - object Android { - const val appCompat = "androidx.appcompat:appcompat:$androidAppCompatVersion" - const val material = "com.google.android.material:material:$materialDesignVersion" - const val lifecycle = "androidx.lifecycle:lifecycle-extensions:$androidLifecycleVersion" - const val androidViewModel = - "androidx.lifecycle:lifecycle-viewmodel-ktx:$androidLifecycleVersion" - const val androidLiveData = - "androidx.lifecycle:lifecycle-livedata-ktx:$androidLifecycleVersion" - const val coroutines = - "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" - const val glide = - "com.github.bumptech.glide:glide:$glideVersion" - const val swipeRefresh = - "androidx.swiperefreshlayout:swiperefreshlayout:$swipeRefreshVersion" - } - - object MultiPlatform { - const val coroutines = - "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion" - val mokoResources = "dev.icerock.moko:resources:$mokoResourcesVersion" - .defaultMPL(ios = true) - const val mokoTest = "dev.icerock.moko:test:$mokoTestVersion" - const val mokoMvvm = "dev.icerock.moko:mvvm:$mokoMvvmVersion" - const val mokoMvvmCore = "dev.icerock.moko:mvvm-core:$mokoMvvmVersion" - const val mokoMvvmLiveData = "dev.icerock.moko:mvvm-livedata:$mokoMvvmVersion" - const val mokoMvvmLiveDataMaterial = - "dev.icerock.moko:mvvm-livedata-material:$mokoMvvmVersion" - const val mokoMvvmLiveDataGlide = - "dev.icerock.moko:mvvm-livedata-glide:$mokoMvvmVersion" - const val mokoMvvmLiveDataSwipeRefresh = - "dev.icerock.moko:mvvm-livedata-swiperefresh:$mokoMvvmVersion" - const val mokoMvvmDataBinding = "dev.icerock.moko:mvvm-databinding:$mokoMvvmVersion" - const val mokoMvvmViewBinding = "dev.icerock.moko:mvvm-viewbinding:$mokoMvvmVersion" - const val mokoMvvmState = "dev.icerock.moko:mvvm-state:$mokoMvvmVersion" - const val mokoMvvmStateDeprecated = - "dev.icerock.moko:mvvm-state-deprecated:$mokoMvvmVersion" - const val mokoMvvmTest = "dev.icerock.moko:mvvm-test:$mokoMvvmVersion" - } - - object Tests { - const val kotlinTestJUnit = - "org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion" - const val androidCoreTesting = - "androidx.arch.core:core-testing:$androidCoreTestingVersion" - const val coroutinesTest = - "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutinesVersion" - } - - object Jvm { - const val detektFormatting = - "io.gitlab.arturbosch.detekt:detekt-formatting:$detektVersion" - } - } -} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..b4721ba2 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,45 @@ +[versions] +kotlinVersion = "1.5.10" +androidAppCompatVersion = "1.2.0" +materialDesignVersion = "1.2.1" +androidLifecycleVersion = "2.2.0" +androidCoreTestingVersion = "2.1.0" +glideVersion = "4.11.0" +swipeRefreshVersion = "1.1.0" +detektVersion = "1.15.0" +dokkaVersion = "1.4.20" +coroutinesVersion = "1.4.2" +mokoResourcesVersion = "0.15.1" +mokoTestVersion = "0.2.1" +mokoMvvmVersion = "0.10.1" +compileSdk = "29" +targetSdk = "29" +minSdk = "16" + +[libraries] +appCompat = { module = "androidx.appcompat:appcompat", version.ref = "androidAppCompatVersion" } +material = { module = "com.google.android.material:material", version.ref = "materialDesignVersion" } +lifecycle = { module = "androidx.lifecycle:lifecycle-extensions", version.ref = "androidLifecycleVersion" } +androidViewModel = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androidLifecycleVersion" } +androidLiveData = { module = "androidx.lifecycle:lifecycle-livedata-ktx", version.ref = "androidLifecycleVersion" } +glide = { module = "com.github.bumptech.glide:glide", version.ref = "glideVersion" } +swipeRefresh = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "swipeRefreshVersion" } +coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutinesVersion" } +mokoResources = { module = "dev.icerock.moko:resources", version.ref = "mokoResourcesVersion" } +mokoTest = { module = "dev.icerock.moko:test", version.ref = "mokoTestVersion" } +mokoMvvm = { module = "dev.icerock.moko:mvvm", version.ref = "mokoMvvmVersion" } +mokoMvvmCore = { module = "dev.icerock.moko:mvvm-core", version.ref = "mokoMvvmVersion" } +mokoMvvmLiveData = { module = "dev.icerock.moko:mvvm-livedata", version.ref = "mokoMvvmVersion" } +mokoMvvmLiveDataMaterial = { module = "dev.icerock.moko:mvvm-livedata-material", version.ref = "mokoMvvmVersion" } +mokoMvvmLiveDataGlide = { module = "dev.icerock.moko:mvvm-livedata-glide", version.ref = "mokoMvvmVersion" } +mokoMvvmLiveDataSwipeRefresh = { module = "dev.icerock.moko:mvvm-livedata-swiperefresh", version.ref = "mokoMvvmVersion" } +mokoMvvmDataBinding = { module = "dev.icerock.moko:mvvm-databinding", version.ref = "mokoMvvmVersion" } +mokoMvvmViewBinding = { module = "dev.icerock.moko:mvvm-viewbinding", version.ref = "mokoMvvmVersion" } +mokoMvvmState = { module = "dev.icerock.moko:mvvm-state", version.ref = "mokoMvvmVersion" } +mokoMvvmStateDeprecated = { module ="dev.icerock.moko:mvvm-state-deprecated", version.ref = "mokoMvvmVersion" } +mokoMvvmTest = { module = "dev.icerock.moko:mvvm-test", version.ref = "mokoMvvmVersion" } +kotlinTestJUnit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlinVersion" } +androidCoreTesting = { module = "androidx.arch.core:core-testing", version.ref = "androidCoreTestingVersion" } +coroutinesTest = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutinesVersion" } +detektFormatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detektVersion" } + diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 442d9132..0f80bbf5 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/mvvm-core/build.gradle.kts b/mvvm-core/build.gradle.kts index 4265bcf1..5c1b4401 100644 --- a/mvvm-core/build.gradle.kts +++ b/mvvm-core/build.gradle.kts @@ -3,19 +3,19 @@ */ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinMultiplatform) - plugin(Deps.Plugins.mobileMultiplatform) - plugin(Deps.Plugins.mavenPublish) + id("com.android.library") + id("org.jetbrains.kotlin.multiplatform") + id("dev.icerock.mobile.multiplatform") + id("org.gradle.maven-publish") } dependencies { - commonMainImplementation(Deps.Libs.MultiPlatform.coroutines) + commonMainImplementation(libs.coroutines) - commonMainImplementation(project(":mvvm-internal")) + commonMainImplementation(projects.mvvmInternal) - androidMainApi(Deps.Libs.Android.appCompat) - androidMainApi(Deps.Libs.Android.androidViewModel) + androidMainApi(libs.appCompat) + androidMainApi(libs.androidViewModel) - androidMainImplementation(Deps.Libs.Android.coroutines) + androidMainImplementation(libs.coroutines) } diff --git a/mvvm-databinding/build.gradle.kts b/mvvm-databinding/build.gradle.kts index 4af3fc48..b569c8eb 100644 --- a/mvvm-databinding/build.gradle.kts +++ b/mvvm-databinding/build.gradle.kts @@ -3,10 +3,10 @@ */ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinAndroid) - plugin(Deps.Plugins.kotlinKapt) - plugin(Deps.Plugins.mavenPublish) + id("com.android.library") + id("kotlin-android") + id("kotlin-kapt") + id("org.gradle.maven-publish") } android { @@ -16,16 +16,16 @@ android { } dependencies { - implementation(Deps.Libs.MultiPlatform.coroutines) + implementation(libs.coroutines) - api(project(":mvvm-livedata")) + api(projects.mvvmLivedata) - api(Deps.Libs.MultiPlatform.mokoResources.common) + api(libs.mokoResources) - api(Deps.Libs.Android.appCompat) - api(Deps.Libs.Android.lifecycle) - api(Deps.Libs.Android.material) - api(Deps.Libs.Android.coroutines) + api(libs.appCompat) + api(libs.lifecycle) + api(libs.material) + api(libs.coroutines) // fix of package javax.annotation does not exist import javax.annotation.Generated in DataBinding code compileOnly("javax.annotation:jsr250-api:1.0") diff --git a/mvvm-internal/build.gradle.kts b/mvvm-internal/build.gradle.kts index 6ff05b66..9cc99396 100644 --- a/mvvm-internal/build.gradle.kts +++ b/mvvm-internal/build.gradle.kts @@ -3,15 +3,15 @@ */ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinMultiplatform) - plugin(Deps.Plugins.mobileMultiplatform) - plugin(Deps.Plugins.mavenPublish) + id("com.android.library") + id("org.jetbrains.kotlin.multiplatform") + id("dev.icerock.mobile.multiplatform") + id("org.gradle.maven-publish") } group = "dev.icerock.moko" -version = Deps.mokoMvvmVersion +version = libs.versions.mokoMvvmVersion.get() dependencies { - commonMainApi(Deps.Libs.MultiPlatform.coroutines) + commonMainApi(libs.coroutines) } diff --git a/mvvm-livedata-glide/build.gradle.kts b/mvvm-livedata-glide/build.gradle.kts index 68f61e1c..27566bd9 100644 --- a/mvvm-livedata-glide/build.gradle.kts +++ b/mvvm-livedata-glide/build.gradle.kts @@ -3,9 +3,9 @@ */ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinAndroid) - plugin(Deps.Plugins.mavenPublish) + id("com.android.library") + id("kotlin-android") + id("org.gradle.maven-publish") } android { @@ -13,16 +13,16 @@ android { } dependencies { - implementation(Deps.Libs.MultiPlatform.coroutines) + implementation(libs.coroutines) - api(project(":mvvm-livedata")) + api(projects.mvvmLivedata) - api(Deps.Libs.MultiPlatform.mokoResources.common) + api(libs.mokoResources) - api(Deps.Libs.Android.appCompat) - api(Deps.Libs.Android.lifecycle) - api(Deps.Libs.Android.glide) - api(Deps.Libs.Android.coroutines) + api(libs.appCompat) + api(libs.lifecycle) + api(libs.glide) + api(libs.coroutines) } afterEvaluate { diff --git a/mvvm-livedata-material/build.gradle.kts b/mvvm-livedata-material/build.gradle.kts index 53263218..731c6fc4 100644 --- a/mvvm-livedata-material/build.gradle.kts +++ b/mvvm-livedata-material/build.gradle.kts @@ -3,9 +3,9 @@ */ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinAndroid) - plugin(Deps.Plugins.mavenPublish) + id("com.android.library") + id("kotlin-android") + id("org.gradle.maven-publish") } android { @@ -13,16 +13,16 @@ android { } dependencies { - implementation(Deps.Libs.MultiPlatform.coroutines) + implementation(libs.coroutines) - api(project(":mvvm-livedata")) + api(projects.mvvmLivedata) - api(Deps.Libs.MultiPlatform.mokoResources.common) + api(libs.mokoResources) - api(Deps.Libs.Android.appCompat) - api(Deps.Libs.Android.lifecycle) - api(Deps.Libs.Android.material) - api(Deps.Libs.Android.coroutines) + api(libs.appCompat) + api(libs.lifecycle) + api(libs.material) + api(libs.coroutines) } afterEvaluate { diff --git a/mvvm-livedata-swiperefresh/build.gradle.kts b/mvvm-livedata-swiperefresh/build.gradle.kts index 08aaebe0..2f682e21 100644 --- a/mvvm-livedata-swiperefresh/build.gradle.kts +++ b/mvvm-livedata-swiperefresh/build.gradle.kts @@ -3,9 +3,9 @@ */ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinAndroid) - plugin(Deps.Plugins.mavenPublish) + id("com.android.library") + id("kotlin-android") + id("org.gradle.maven-publish") } android { @@ -13,16 +13,16 @@ android { } dependencies { - implementation(Deps.Libs.MultiPlatform.coroutines) + implementation(libs.coroutines) - api(project(":mvvm-livedata")) + api(projects.mvvmLivedata) - api(Deps.Libs.MultiPlatform.mokoResources.common) + api(libs.mokoResources) - api(Deps.Libs.Android.appCompat) - api(Deps.Libs.Android.lifecycle) - api(Deps.Libs.Android.swipeRefresh) - api(Deps.Libs.Android.coroutines) + api(libs.appCompat) + api(libs.lifecycle) + api(libs.swipeRefresh) + api(libs.coroutines) } afterEvaluate { diff --git a/mvvm-livedata/build.gradle.kts b/mvvm-livedata/build.gradle.kts index 219ac326..91cf69ea 100644 --- a/mvvm-livedata/build.gradle.kts +++ b/mvvm-livedata/build.gradle.kts @@ -3,22 +3,22 @@ */ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinMultiplatform) - plugin(Deps.Plugins.mobileMultiplatform) - plugin(Deps.Plugins.mavenPublish) + id("com.android.library") + id("org.jetbrains.kotlin.multiplatform") + id("dev.icerock.mobile.multiplatform") + id("org.gradle.maven-publish") } dependencies { - commonMainImplementation(Deps.Libs.MultiPlatform.coroutines) + commonMainImplementation(libs.coroutines) - commonMainApi(Deps.Libs.MultiPlatform.mokoResources.common) + commonMainApi(libs.mokoResources) commonMainApi(project(":mvvm-core")) - androidMainApi(Deps.Libs.Android.appCompat) - androidMainApi(Deps.Libs.Android.androidLiveData) - androidMainImplementation(Deps.Libs.Android.coroutines) + androidMainApi(libs.appCompat) + androidMainApi(libs.androidLiveData) + androidMainImplementation(libs.coroutines) - commonTestApi(Deps.Libs.MultiPlatform.mokoTest) + commonTestApi(libs.mokoTest) commonTestApi(project(":mvvm-test")) } diff --git a/mvvm-state-deprecated/build.gradle.kts b/mvvm-state-deprecated/build.gradle.kts index 3922d0c6..2f6aa6a7 100644 --- a/mvvm-state-deprecated/build.gradle.kts +++ b/mvvm-state-deprecated/build.gradle.kts @@ -3,22 +3,22 @@ */ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinMultiplatform) - plugin(Deps.Plugins.mobileMultiplatform) - plugin(Deps.Plugins.mavenPublish) + id("com.android.library") + id("org.jetbrains.kotlin.multiplatform") + id("dev.icerock.mobile.multiplatform") + id("org.gradle.maven-publish") } dependencies { - commonMainImplementation(Deps.Libs.MultiPlatform.coroutines) + commonMainImplementation(libs.coroutines) - commonMainApi(project(":mvvm-livedata")) + commonMainApi(projects.mvvmLivedata) - androidMainApi(Deps.Libs.Android.appCompat) - androidMainApi(Deps.Libs.Android.androidViewModel) + androidMainApi(libs.appCompat) + androidMainApi(libs.androidViewModel) - androidMainImplementation(Deps.Libs.Android.coroutines) + androidMainImplementation(libs.coroutines) - commonTestApi(Deps.Libs.MultiPlatform.mokoTest) + commonTestApi(libs.mokoTest) commonTestApi(project(":mvvm-test")) } diff --git a/mvvm-state/build.gradle.kts b/mvvm-state/build.gradle.kts index 3922d0c6..653e0f0f 100644 --- a/mvvm-state/build.gradle.kts +++ b/mvvm-state/build.gradle.kts @@ -3,22 +3,22 @@ */ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinMultiplatform) - plugin(Deps.Plugins.mobileMultiplatform) - plugin(Deps.Plugins.mavenPublish) + id("com.android.library") + id("org.jetbrains.kotlin.multiplatform") + id("dev.icerock.mobile.multiplatform") + id("org.gradle.maven-publish") } dependencies { - commonMainImplementation(Deps.Libs.MultiPlatform.coroutines) + commonMainImplementation(libs.coroutines) - commonMainApi(project(":mvvm-livedata")) + commonMainApi(projects.mvvmLivedata) - androidMainApi(Deps.Libs.Android.appCompat) - androidMainApi(Deps.Libs.Android.androidViewModel) + androidMainApi(libs.appCompat) + androidMainApi(libs.androidViewModel) - androidMainImplementation(Deps.Libs.Android.coroutines) + androidMainImplementation(libs.coroutines) - commonTestApi(Deps.Libs.MultiPlatform.mokoTest) - commonTestApi(project(":mvvm-test")) + commonTestApi(libs.mokoTest) + commonTestApi(projects.mvvmTest) } diff --git a/mvvm-test/build.gradle.kts b/mvvm-test/build.gradle.kts index 7b72a983..ff05cefe 100644 --- a/mvvm-test/build.gradle.kts +++ b/mvvm-test/build.gradle.kts @@ -3,19 +3,19 @@ */ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinMultiplatform) - plugin(Deps.Plugins.mobileMultiplatform) - plugin(Deps.Plugins.mavenPublish) + id("com.android.library") + id("org.jetbrains.kotlin.multiplatform") + id("dev.icerock.mobile.multiplatform") + id("org.gradle.maven-publish") } dependencies { - commonMainApi(Deps.Libs.MultiPlatform.coroutines) + commonMainApi(libs.coroutines) - commonMainApi(project(":mvvm-core")) - commonMainImplementation(project(":mvvm-internal")) + commonMainApi(projects.mvvmCore) + commonMainImplementation(projects.mvvmInternal) - commonMainApi(Deps.Libs.Tests.kotlinTestJUnit) - androidMainApi(Deps.Libs.Tests.coroutinesTest) - androidMainApi(Deps.Libs.Tests.androidCoreTesting) + commonMainApi(libs.kotlinTestJUnit) + androidMainApi(libs.coroutinesTest) + androidMainApi(libs.androidCoreTesting) } diff --git a/mvvm-viewbinding/build.gradle.kts b/mvvm-viewbinding/build.gradle.kts index 0cf98506..7f725fb0 100644 --- a/mvvm-viewbinding/build.gradle.kts +++ b/mvvm-viewbinding/build.gradle.kts @@ -3,10 +3,10 @@ */ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinAndroid) - plugin(Deps.Plugins.kotlinKapt) - plugin(Deps.Plugins.mavenPublish) + id("com.android.library") + id("kotlin-android") + id("kotlin-kapt") + id("org.gradle.maven-publish") } android { @@ -16,15 +16,15 @@ android { } dependencies { - implementation(Deps.Libs.MultiPlatform.coroutines) + implementation(libs.coroutines) api(project(":mvvm-core")) - api(Deps.Libs.MultiPlatform.mokoResources.common) + api(libs.mokoResources) - api(Deps.Libs.Android.appCompat) - api(Deps.Libs.Android.lifecycle) - api(Deps.Libs.Android.coroutines) + api(libs.appCompat) + api(libs.lifecycle) + api(libs.coroutines) } afterEvaluate { diff --git a/mvvm/build.gradle.kts b/mvvm/build.gradle.kts index 61152183..b968fad3 100644 --- a/mvvm/build.gradle.kts +++ b/mvvm/build.gradle.kts @@ -3,10 +3,10 @@ */ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinMultiplatform) - plugin(Deps.Plugins.mobileMultiplatform) - plugin(Deps.Plugins.mavenPublish) + id("com.android.library") + id("org.jetbrains.kotlin.multiplatform") + id("dev.icerock.mobile.multiplatform") + id("org.gradle.maven-publish") } dependencies { diff --git a/sample/android-app/build.gradle.kts b/sample/android-app/build.gradle.kts index e1662162..f2de90ed 100644 --- a/sample/android-app/build.gradle.kts +++ b/sample/android-app/build.gradle.kts @@ -1,11 +1,11 @@ plugins { - plugin(Deps.Plugins.androidApplication) - plugin(Deps.Plugins.kotlinAndroid) - plugin(Deps.Plugins.kotlinKapt) + id("com.android.application") + id("kotlin-android") + id("kotlin-kapt") } android { - compileSdkVersion(Deps.Android.compileSdk) + compileSdkVersion(libs.versions.compileSdk.get().toInt()) buildFeatures.dataBinding = true @@ -14,8 +14,8 @@ android { } defaultConfig { - minSdkVersion(Deps.Android.minSdk) - targetSdkVersion(Deps.Android.targetSdk) + minSdkVersion(libs.versions.minSdk.get().toInt()) + targetSdkVersion(libs.versions.targetSdk.get().toInt()) applicationId = "dev.icerock.moko.samples.mvvm" @@ -46,7 +46,7 @@ android { } dependencies { - implementation(Deps.Libs.Android.appCompat) + implementation(libs.appCompat) implementation(project(":sample:mpp-library")) } diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index 52a4339d..2da21d5c 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -6,17 +6,16 @@ subprojects { configurations.all { resolutionStrategy.dependencySubstitution { listOf( - Deps.Libs.MultiPlatform.mokoMvvm to ":mvvm", - Deps.Libs.MultiPlatform.mokoMvvmCore to ":mvvm-core", - Deps.Libs.MultiPlatform.mokoMvvmLiveData to ":mvvm-livedata", - Deps.Libs.MultiPlatform.mokoMvvmLiveDataMaterial to ":mvvm-livedata-material", - Deps.Libs.MultiPlatform.mokoMvvmLiveDataGlide to ":mvvm-livedata-glide", - Deps.Libs.MultiPlatform.mokoMvvmLiveDataSwipeRefresh to ":mvvm-livedata-swiperefresh", - Deps.Libs.MultiPlatform.mokoMvvmDataBinding to ":mvvm-databinding", - Deps.Libs.MultiPlatform.mokoMvvmViewBinding to ":mvvm-viewbinding", - Deps.Libs.MultiPlatform.mokoMvvmState to ":mvvm-state", - Deps.Libs.MultiPlatform.mokoMvvmStateDeprecated to ":mvvm-state-deprecated", - Deps.Libs.MultiPlatform.mokoMvvmTest to ":mvvm-test" + "${libs.mokoMvvm.get().module.group}:${libs.mokoMvvm.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm", + "${libs.mokoMvvmCore.get().module.group}:${libs.mokoMvvmCore.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-core", + "${libs.mokoMvvmLiveData.get().module.group}:${libs.mokoMvvmLiveData.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-livedata", + "${libs.mokoMvvmLiveDataMaterial.get().module.group}:${libs.mokoMvvmLiveDataMaterial.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-livedata-material", + "${libs.mokoMvvmLiveDataSwipeRefresh.get().module.group}:${libs.mokoMvvmLiveDataSwipeRefresh.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-livedata-swiperefresh", + "${libs.mokoMvvmDataBinding.get().module.group}:${libs.mokoMvvmDataBinding.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-databinding", + "${libs.mokoMvvmViewBinding.get().module.group}:${libs.mokoMvvmViewBinding.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-viewbinding", + "${libs.mokoMvvmState.get().module.group}:${libs.mokoMvvmState.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-state", + "${libs.mokoMvvmStateDeprecated.get().module.group}:${libs.mokoMvvmStateDeprecated.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-state-deprecated", + "${libs.mokoMvvmTest.get().module.group}:${libs.mokoMvvmTest.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-test" ).forEach { (module, path) -> substitute(module(module)).with(project(path)) } diff --git a/sample/mpp-library/build.gradle.kts b/sample/mpp-library/build.gradle.kts index dedf8a3b..d75ec05e 100644 --- a/sample/mpp-library/build.gradle.kts +++ b/sample/mpp-library/build.gradle.kts @@ -1,26 +1,26 @@ plugins { - plugin(Deps.Plugins.androidLibrary) - plugin(Deps.Plugins.kotlinMultiplatform) - plugin(Deps.Plugins.mobileMultiplatform) - plugin(Deps.Plugins.iosFramework) + id("com.android.library") + id("org.jetbrains.kotlin.multiplatform") + id("dev.icerock.mobile.multiplatform") + id("dev.icerock.mobile.multiplatform.ios-framework") } dependencies { - commonMainImplementation(Deps.Libs.MultiPlatform.coroutines) + commonMainImplementation(libs.coroutines) - commonMainApi(Deps.Libs.MultiPlatform.mokoResources.common) - commonMainApi(Deps.Libs.MultiPlatform.mokoMvvm) + commonMainApi(libs.mokoResources) + commonMainApi(libs.mokoMvvm) - androidMainApi(Deps.Libs.MultiPlatform.mokoMvvmLiveDataGlide) - androidMainApi(Deps.Libs.MultiPlatform.mokoMvvmLiveDataMaterial) - androidMainApi(Deps.Libs.MultiPlatform.mokoMvvmLiveDataSwipeRefresh) + androidMainApi(libs.mokoMvvmLiveDataGlide) + androidMainApi(libs.mokoMvvmLiveDataMaterial) + androidMainApi(libs.mokoMvvmLiveDataSwipeRefresh) - commonTestImplementation(Deps.Libs.MultiPlatform.mokoTest) - commonTestImplementation(Deps.Libs.MultiPlatform.mokoMvvmTest) + commonTestImplementation(libs.mokoTest) + commonTestImplementation(libs.mokoMvvmTest) } framework { export(project(":mvvm-core")) export(project(":mvvm-livedata")) - export(Deps.Libs.MultiPlatform.mokoResources) + export(libs.mokoResources) } diff --git a/settings.gradle.kts b/settings.gradle.kts index 94b78b72..b62af84b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,12 +2,20 @@ * Copyright 2019 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. */ -pluginManagement { +enableFeaturePreview("VERSION_CATALOGS") +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") + +dependencyResolutionManagement { repositories { mavenCentral() google() - gradlePluginPortal() + jcenter { + content { + includeGroup("org.jetbrains.trove4j") + includeModule("org.jetbrains.kotlinx", "kotlinx-html-jvm") + } + } } } From 4487c939abc8d8bc7a31fa0e17d2cbdce786e656 Mon Sep 17 00:00:00 2001 From: Anton Shestak Date: Sat, 26 Jun 2021 16:11:33 +0700 Subject: [PATCH 5/8] #144 fixes, gradle help and sync completed successfully --- sample/build.gradle.kts | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 sample/build.gradle.kts diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts deleted file mode 100644 index 2da21d5c..00000000 --- a/sample/build.gradle.kts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2020 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. - */ - -subprojects { - configurations.all { - resolutionStrategy.dependencySubstitution { - listOf( - "${libs.mokoMvvm.get().module.group}:${libs.mokoMvvm.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm", - "${libs.mokoMvvmCore.get().module.group}:${libs.mokoMvvmCore.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-core", - "${libs.mokoMvvmLiveData.get().module.group}:${libs.mokoMvvmLiveData.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-livedata", - "${libs.mokoMvvmLiveDataMaterial.get().module.group}:${libs.mokoMvvmLiveDataMaterial.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-livedata-material", - "${libs.mokoMvvmLiveDataSwipeRefresh.get().module.group}:${libs.mokoMvvmLiveDataSwipeRefresh.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-livedata-swiperefresh", - "${libs.mokoMvvmDataBinding.get().module.group}:${libs.mokoMvvmDataBinding.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-databinding", - "${libs.mokoMvvmViewBinding.get().module.group}:${libs.mokoMvvmViewBinding.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-viewbinding", - "${libs.mokoMvvmState.get().module.group}:${libs.mokoMvvmState.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-state", - "${libs.mokoMvvmStateDeprecated.get().module.group}:${libs.mokoMvvmStateDeprecated.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-state-deprecated", - "${libs.mokoMvvmTest.get().module.group}:${libs.mokoMvvmTest.get().module.name}:${libs.versions.mokoMvvmVersion.get()}" to ":mvvm-test" - ).forEach { (module, path) -> - substitute(module(module)).with(project(path)) - } - } - } -} From a7f79b305d414bedea8efe3d668381ea674122e9 Mon Sep 17 00:00:00 2001 From: Anton Shestak Date: Sat, 26 Jun 2021 17:09:18 +0700 Subject: [PATCH 6/8] #144 temp commit --- .github/workflows/compilation-check.yml | 2 +- gradle/libs.versions.toml | 2 +- sample/mpp-library/build.gradle.kts | 13 ++++++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/compilation-check.yml b/.github/workflows/compilation-check.yml index b220396d..62669625 100644 --- a/.github/workflows/compilation-check.yml +++ b/.github/workflows/compilation-check.yml @@ -23,7 +23,7 @@ jobs: - name: Install pods run: cd sample/ios-app && pod install - name: build ios sample - run: cd sample/ios-app && xcodebuild -scheme TestProj -workspace TestProj.xcworkspace -configuration Debug build CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO + run: cd sample/ios-app && xcodebuild -scheme TestProj -workspace TestProj.xcworkspace -configuration Debug -sdk iphonesimulator -arch x86_64 build CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcpretty - name: Publish Test Report uses: mikepenz/action-junit-report@v2 if: ${{ always() }} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b4721ba2..acc79140 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -kotlinVersion = "1.5.10" +kotlinVersion = "1.5.20" androidAppCompatVersion = "1.2.0" materialDesignVersion = "1.2.1" androidLifecycleVersion = "2.2.0" diff --git a/sample/mpp-library/build.gradle.kts b/sample/mpp-library/build.gradle.kts index d75ec05e..9157cb4f 100644 --- a/sample/mpp-library/build.gradle.kts +++ b/sample/mpp-library/build.gradle.kts @@ -9,13 +9,16 @@ dependencies { commonMainImplementation(libs.coroutines) commonMainApi(libs.mokoResources) - commonMainApi(libs.mokoMvvm) + commonMainApi(projects.mvvm) + commonMainApi(projects.mvvmTest) + commonMainApi(projects.mvvmLivedata) + commonMainApi(projects.mvvmCore) - androidMainApi(libs.mokoMvvmLiveDataGlide) - androidMainApi(libs.mokoMvvmLiveDataMaterial) - androidMainApi(libs.mokoMvvmLiveDataSwipeRefresh) + androidMainApi(projects.mvvmLivedataGlide) + androidMainApi(projects.mvvmLivedataMaterial) + androidMainApi(projects.mvvmLivedataSwiperefresh) - commonTestImplementation(libs.mokoTest) + commonTestImplementation(projects.mvvmTest) commonTestImplementation(libs.mokoMvvmTest) } From 15fa3998516c3f07567133122ee74a10ca223de5 Mon Sep 17 00:00:00 2001 From: Aleksey Mikhailov Date: Sun, 27 Jun 2021 14:25:04 +0700 Subject: [PATCH 7/8] #144 convention plugins usage --- build.gradle.kts | 93 +------------------ gradle/libs.versions.toml | 27 +----- mvvm-build-logic/build.gradle.kts | 17 ++++ .../kotlin/android-app-convention.gradle.kts | 37 ++++++++ .../kotlin/android-base-convention.gradle.kts | 14 +++ .../android-library-convention.gradle.kts | 13 +++ .../android-publication-convention.gradle.kts | 15 +++ .../main/kotlin/detekt-convention.gradle.kts | 15 +++ .../kotlin/javadoc-stub-convention.gradle.kts | 16 ++++ ...ultiplatform-library-convention.gradle.kts | 17 ++++ .../kotlin/publication-convention.gradle.kts | 65 +++++++++++++ mvvm-core/build.gradle.kts | 13 +-- mvvm-core/src/iosArm64Main | 1 - mvvm-databinding/build.gradle.kts | 16 +--- mvvm-internal/build.gradle.kts | 10 +- .../moko/mvvm/internal/createUIDispatcher.kt | 10 -- .../moko/mvvm/internal/createUIDispatcher.kt | 6 +- .../moko/mvvm/internal/UIDispatcher.kt | 72 -------------- .../moko/mvvm/internal/createUIDispatcher.kt | 9 -- mvvm-livedata-glide/build.gradle.kts | 18 +--- mvvm-livedata-material/build.gradle.kts | 18 +--- mvvm-livedata-swiperefresh/build.gradle.kts | 18 +--- mvvm-livedata/build.gradle.kts | 17 ++-- mvvm-state-deprecated/build.gradle.kts | 15 ++- mvvm-state/build.gradle.kts | 13 +-- mvvm-test/build.gradle.kts | 11 +-- mvvm-viewbinding/build.gradle.kts | 18 +--- mvvm/build.gradle.kts | 11 +-- sample/android-app/build.gradle.kts | 32 +------ sample/mpp-library/build.gradle.kts | 21 +++-- settings.gradle.kts | 3 +- 31 files changed, 292 insertions(+), 369 deletions(-) create mode 100644 mvvm-build-logic/build.gradle.kts create mode 100644 mvvm-build-logic/src/main/kotlin/android-app-convention.gradle.kts create mode 100644 mvvm-build-logic/src/main/kotlin/android-base-convention.gradle.kts create mode 100644 mvvm-build-logic/src/main/kotlin/android-library-convention.gradle.kts create mode 100644 mvvm-build-logic/src/main/kotlin/android-publication-convention.gradle.kts create mode 100644 mvvm-build-logic/src/main/kotlin/detekt-convention.gradle.kts create mode 100644 mvvm-build-logic/src/main/kotlin/javadoc-stub-convention.gradle.kts create mode 100644 mvvm-build-logic/src/main/kotlin/multiplatform-library-convention.gradle.kts create mode 100644 mvvm-build-logic/src/main/kotlin/publication-convention.gradle.kts delete mode 120000 mvvm-core/src/iosArm64Main delete mode 100644 mvvm-internal/src/androidMain/kotlin/dev/icerock/moko/mvvm/internal/createUIDispatcher.kt delete mode 100644 mvvm-internal/src/iosMain/kotlin/dev/icerock/moko/mvvm/internal/UIDispatcher.kt delete mode 100644 mvvm-internal/src/iosMain/kotlin/dev/icerock/moko/mvvm/internal/createUIDispatcher.kt diff --git a/build.gradle.kts b/build.gradle.kts index 986ab4f2..6e47afc0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,8 +2,6 @@ * Copyright 2019 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. */ -import java.util.Base64 - plugins { id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.5.0" } @@ -17,107 +15,18 @@ buildscript { } dependencies { - classpath("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.15.0") classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.4.20") - classpath("dev.icerock:mobile-multiplatform:0.11.0") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20") - classpath("com.android.tools.build:gradle:4.2.1") + classpath(":mvvm-build-logic") } } allprojects { - - apply(plugin = "io.gitlab.arturbosch.detekt") apply(plugin = "org.jetbrains.dokka") - configure { - input.setFrom( - "src/commonMain/kotlin", - "src/androidMain/kotlin", - "src/iosMain/kotlin", - "src/main/kotlin" - ) - } - - dependencies { - "detektPlugins"(rootProject.libs.detektFormatting) - } - - plugins.withId("com.android.library") { - configure { - compileSdkVersion(libs.versions.compileSdk.get().toInt()) - - defaultConfig { - minSdkVersion(libs.versions.minSdk.get().toInt()) - targetSdkVersion(libs.versions.targetSdk.get().toInt()) - } - } - } - plugins.withId("org.gradle.maven-publish") { group = "dev.icerock.moko" version = libs.versions.mokoMvvmVersion.get() - - val javadocJar by tasks.registering(Jar::class) { - archiveClassifier.set("javadoc") - } - - configure { - repositories.maven("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") { - name = "OSSRH" - - credentials { - username = System.getenv("OSSRH_USER") - password = System.getenv("OSSRH_KEY") - } - } - - publications.withType { - // Stub javadoc.jar artifact - artifact(javadocJar.get()) - - // Provide artifacts information requited by Maven Central - pom { - name.set("MOKO mvvm") - description.set("Model-View-ViewModel architecture components for mobile (android & ios) Kotlin Multiplatform development") - url.set("https://github.com/icerockdev/moko-mvvm") - licenses { - license { - url.set("https://github.com/icerockdev/moko-mvvm/blob/master/LICENSE.md") - } - } - - developers { - developer { - id.set("Alex009") - name.set("Aleksey Mikhailov") - email.set("aleksey.mikhailov@icerockdev.com") - } - } - - scm { - connection.set("scm:git:ssh://github.com/icerockdev/moko-mvvm.git") - developerConnection.set("scm:git:ssh://github.com/icerockdev/moko-mvvm.git") - url.set("https://github.com/icerockdev/moko-mvvm") - } - } - } - - apply(plugin = "signing") - - configure { - val signingKeyId: String? = System.getenv("SIGNING_KEY_ID") - val signingPassword: String? = System.getenv("SIGNING_PASSWORD") - val signingKey: String? = System.getenv("SIGNING_KEY")?.let { base64Key -> - String(Base64.getDecoder().decode(base64Key)) - } - if (signingKeyId != null) { - useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword) - sign(publications) - } - } - } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index acc79140..17906b1f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,15 +6,11 @@ androidLifecycleVersion = "2.2.0" androidCoreTestingVersion = "2.1.0" glideVersion = "4.11.0" swipeRefreshVersion = "1.1.0" -detektVersion = "1.15.0" dokkaVersion = "1.4.20" -coroutinesVersion = "1.4.2" -mokoResourcesVersion = "0.15.1" -mokoTestVersion = "0.2.1" -mokoMvvmVersion = "0.10.1" -compileSdk = "29" -targetSdk = "29" -minSdk = "16" +coroutinesVersion = "1.5.0-native-mt" +mokoResourcesVersion = "0.16.0" +mokoTestVersion = "0.4.0" +mokoMvvmVersion = "0.11.0" [libraries] appCompat = { module = "androidx.appcompat:appcompat", version.ref = "androidAppCompatVersion" } @@ -26,20 +22,7 @@ glide = { module = "com.github.bumptech.glide:glide", version.ref = "glideVersio swipeRefresh = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "swipeRefreshVersion" } coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutinesVersion" } mokoResources = { module = "dev.icerock.moko:resources", version.ref = "mokoResourcesVersion" } -mokoTest = { module = "dev.icerock.moko:test", version.ref = "mokoTestVersion" } -mokoMvvm = { module = "dev.icerock.moko:mvvm", version.ref = "mokoMvvmVersion" } -mokoMvvmCore = { module = "dev.icerock.moko:mvvm-core", version.ref = "mokoMvvmVersion" } -mokoMvvmLiveData = { module = "dev.icerock.moko:mvvm-livedata", version.ref = "mokoMvvmVersion" } -mokoMvvmLiveDataMaterial = { module = "dev.icerock.moko:mvvm-livedata-material", version.ref = "mokoMvvmVersion" } -mokoMvvmLiveDataGlide = { module = "dev.icerock.moko:mvvm-livedata-glide", version.ref = "mokoMvvmVersion" } -mokoMvvmLiveDataSwipeRefresh = { module = "dev.icerock.moko:mvvm-livedata-swiperefresh", version.ref = "mokoMvvmVersion" } -mokoMvvmDataBinding = { module = "dev.icerock.moko:mvvm-databinding", version.ref = "mokoMvvmVersion" } -mokoMvvmViewBinding = { module = "dev.icerock.moko:mvvm-viewbinding", version.ref = "mokoMvvmVersion" } -mokoMvvmState = { module = "dev.icerock.moko:mvvm-state", version.ref = "mokoMvvmVersion" } -mokoMvvmStateDeprecated = { module ="dev.icerock.moko:mvvm-state-deprecated", version.ref = "mokoMvvmVersion" } -mokoMvvmTest = { module = "dev.icerock.moko:mvvm-test", version.ref = "mokoMvvmVersion" } +mokoTest = { module = "dev.icerock.moko:test-core", version.ref = "mokoTestVersion" } kotlinTestJUnit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlinVersion" } androidCoreTesting = { module = "androidx.arch.core:core-testing", version.ref = "androidCoreTestingVersion" } coroutinesTest = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutinesVersion" } -detektFormatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detektVersion" } - diff --git a/mvvm-build-logic/build.gradle.kts b/mvvm-build-logic/build.gradle.kts new file mode 100644 index 00000000..84cbae3c --- /dev/null +++ b/mvvm-build-logic/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + `kotlin-dsl` +} + +repositories { + mavenCentral() + google() + + gradlePluginPortal() +} + +dependencies { + api("dev.icerock:mobile-multiplatform:0.12.0") + api("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20") + api("com.android.tools.build:gradle:4.2.1") + api("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.15.0") +} diff --git a/mvvm-build-logic/src/main/kotlin/android-app-convention.gradle.kts b/mvvm-build-logic/src/main/kotlin/android-app-convention.gradle.kts new file mode 100644 index 00000000..bc85a5c7 --- /dev/null +++ b/mvvm-build-logic/src/main/kotlin/android-app-convention.gradle.kts @@ -0,0 +1,37 @@ +/* + * Copyright 2021 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. + */ + +plugins { + id("com.android.application") + id("android-base-convention") + id("kotlin-android") +} + +android { + dexOptions { + javaMaxHeapSize = "2g" + } + + defaultConfig { + minSdkVersion(21) + multiDexEnabled = true + } + + buildTypes { + getByName("release") { + isMinifyEnabled = true + proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro") + } + getByName("debug") { + isDebuggable = true + applicationIdSuffix = ".debug" + } + } + + packagingOptions { + exclude("META-INF/*.kotlin_module") + exclude("META-INF/AL2.0") + exclude("META-INF/LGPL2.1") + } +} diff --git a/mvvm-build-logic/src/main/kotlin/android-base-convention.gradle.kts b/mvvm-build-logic/src/main/kotlin/android-base-convention.gradle.kts new file mode 100644 index 00000000..7f672853 --- /dev/null +++ b/mvvm-build-logic/src/main/kotlin/android-base-convention.gradle.kts @@ -0,0 +1,14 @@ +/* + * Copyright 2021 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. + */ + +import com.android.build.gradle.BaseExtension + +configure { + compileSdkVersion(30) + + defaultConfig { + minSdkVersion(16) + targetSdkVersion(30) + } +} diff --git a/mvvm-build-logic/src/main/kotlin/android-library-convention.gradle.kts b/mvvm-build-logic/src/main/kotlin/android-library-convention.gradle.kts new file mode 100644 index 00000000..c4354019 --- /dev/null +++ b/mvvm-build-logic/src/main/kotlin/android-library-convention.gradle.kts @@ -0,0 +1,13 @@ +/* + * Copyright 2021 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. + */ + +plugins { + id("com.android.library") + id("kotlin-android") + id("android-base-convention") +} + +android { + sourceSets.all { java.srcDir("src/$name/kotlin") } +} diff --git a/mvvm-build-logic/src/main/kotlin/android-publication-convention.gradle.kts b/mvvm-build-logic/src/main/kotlin/android-publication-convention.gradle.kts new file mode 100644 index 00000000..b4dae9e2 --- /dev/null +++ b/mvvm-build-logic/src/main/kotlin/android-publication-convention.gradle.kts @@ -0,0 +1,15 @@ +/* + * Copyright 2021 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. + */ + +plugins { + id("publication-convention") +} + +afterEvaluate { + publishing.publications { + create("release", MavenPublication::class.java) { + from(components.getByName("release")) + } + } +} diff --git a/mvvm-build-logic/src/main/kotlin/detekt-convention.gradle.kts b/mvvm-build-logic/src/main/kotlin/detekt-convention.gradle.kts new file mode 100644 index 00000000..68343a8e --- /dev/null +++ b/mvvm-build-logic/src/main/kotlin/detekt-convention.gradle.kts @@ -0,0 +1,15 @@ +/* + * Copyright 2021 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. + */ + +plugins { + id("io.gitlab.arturbosch.detekt") +} + +detekt { + input.setFrom("src/commonMain/kotlin", "src/androidMain/kotlin", "src/iosMain/kotlin", "src/main/kotlin") +} + +dependencies { + "detektPlugins"("io.gitlab.arturbosch.detekt:detekt-formatting:1.15.0") +} diff --git a/mvvm-build-logic/src/main/kotlin/javadoc-stub-convention.gradle.kts b/mvvm-build-logic/src/main/kotlin/javadoc-stub-convention.gradle.kts new file mode 100644 index 00000000..a1a2691a --- /dev/null +++ b/mvvm-build-logic/src/main/kotlin/javadoc-stub-convention.gradle.kts @@ -0,0 +1,16 @@ +/* + * Copyright 2021 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. + */ + +plugins { + id("org.gradle.maven-publish") +} + +val javadocJar by tasks.registering(Jar::class) { + archiveClassifier.set("javadoc") +} + +publishing.publications.withType { + // Stub javadoc.jar artifact + artifact(javadocJar.get()) +} diff --git a/mvvm-build-logic/src/main/kotlin/multiplatform-library-convention.gradle.kts b/mvvm-build-logic/src/main/kotlin/multiplatform-library-convention.gradle.kts new file mode 100644 index 00000000..f2039347 --- /dev/null +++ b/mvvm-build-logic/src/main/kotlin/multiplatform-library-convention.gradle.kts @@ -0,0 +1,17 @@ +/* + * Copyright 2021 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. + */ + +plugins { + id("com.android.library") + id("org.jetbrains.kotlin.multiplatform") + id("android-base-convention") + id("dev.icerock.mobile.multiplatform.android-manifest") +} + +kotlin { + android { + publishLibraryVariants("release", "debug") + } + ios() +} diff --git a/mvvm-build-logic/src/main/kotlin/publication-convention.gradle.kts b/mvvm-build-logic/src/main/kotlin/publication-convention.gradle.kts new file mode 100644 index 00000000..6bdaa11f --- /dev/null +++ b/mvvm-build-logic/src/main/kotlin/publication-convention.gradle.kts @@ -0,0 +1,65 @@ +/* + * Copyright 2021 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. + */ + +import java.util.Base64 + +plugins { + id("javadoc-stub-convention") + id("org.gradle.maven-publish") + id("signing") +} + +publishing { + repositories.maven("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") { + name = "OSSRH" + + credentials { + username = System.getenv("OSSRH_USER") + password = System.getenv("OSSRH_KEY") + } + } + + publications.withType { + // Provide artifacts information requited by Maven Central + pom { + name.set("MOKO mvvm") + description.set("Model-View-ViewModel architecture components for mobile (android & ios) Kotlin Multiplatform development") + url.set("https://github.com/icerockdev/moko-mvvm") + licenses { + license { + name.set("Apache-2.0") + distribution.set("repo") + url.set("https://github.com/icerockdev/moko-mvvm/blob/master/LICENSE.md") + } + } + + developers { + developer { + id.set("Alex009") + name.set("Aleksey Mikhailov") + email.set("aleksey.mikhailov@icerockdev.com") + } + } + + scm { + connection.set("scm:git:ssh://github.com/icerockdev/moko-mvvm.git") + developerConnection.set("scm:git:ssh://github.com/icerockdev/moko-mvvm.git") + url.set("https://github.com/icerockdev/moko-mvvm") + } + } + } +} + + +signing { + val signingKeyId: String? = System.getenv("SIGNING_KEY_ID") + val signingPassword: String? = System.getenv("SIGNING_PASSWORD") + val signingKey: String? = System.getenv("SIGNING_KEY")?.let { base64Key -> + String(Base64.getDecoder().decode(base64Key)) + } + if (signingKeyId != null) { + useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword) + sign(publishing.publications) + } +} diff --git a/mvvm-core/build.gradle.kts b/mvvm-core/build.gradle.kts index 5c1b4401..e03053dd 100644 --- a/mvvm-core/build.gradle.kts +++ b/mvvm-core/build.gradle.kts @@ -3,10 +3,9 @@ */ plugins { - id("com.android.library") - id("org.jetbrains.kotlin.multiplatform") - id("dev.icerock.mobile.multiplatform") - id("org.gradle.maven-publish") + id("multiplatform-library-convention") + id("detekt-convention") + id("publication-convention") } dependencies { @@ -14,8 +13,6 @@ dependencies { commonMainImplementation(projects.mvvmInternal) - androidMainApi(libs.appCompat) - androidMainApi(libs.androidViewModel) - - androidMainImplementation(libs.coroutines) + "androidMainApi"(libs.appCompat) + "androidMainApi"(libs.androidViewModel) } diff --git a/mvvm-core/src/iosArm64Main b/mvvm-core/src/iosArm64Main deleted file mode 120000 index 46be4b86..00000000 --- a/mvvm-core/src/iosArm64Main +++ /dev/null @@ -1 +0,0 @@ -iosX64Main \ No newline at end of file diff --git a/mvvm-databinding/build.gradle.kts b/mvvm-databinding/build.gradle.kts index b569c8eb..f5dde775 100644 --- a/mvvm-databinding/build.gradle.kts +++ b/mvvm-databinding/build.gradle.kts @@ -3,16 +3,14 @@ */ plugins { - id("com.android.library") - id("kotlin-android") + id("android-library-convention") + id("detekt-convention") + id("android-publication-convention") id("kotlin-kapt") - id("org.gradle.maven-publish") } android { buildFeatures.dataBinding = true - - sourceSets.all { java.srcDir("src/$name/kotlin") } } dependencies { @@ -30,11 +28,3 @@ dependencies { // fix of package javax.annotation does not exist import javax.annotation.Generated in DataBinding code compileOnly("javax.annotation:jsr250-api:1.0") } - -afterEvaluate { - publishing.publications { - create("release", MavenPublication::class.java) { - from(components.getByName("release")) - } - } -} diff --git a/mvvm-internal/build.gradle.kts b/mvvm-internal/build.gradle.kts index 9cc99396..70c92565 100644 --- a/mvvm-internal/build.gradle.kts +++ b/mvvm-internal/build.gradle.kts @@ -3,15 +3,11 @@ */ plugins { - id("com.android.library") - id("org.jetbrains.kotlin.multiplatform") - id("dev.icerock.mobile.multiplatform") - id("org.gradle.maven-publish") + id("multiplatform-library-convention") + id("detekt-convention") + id("publication-convention") } -group = "dev.icerock.moko" -version = libs.versions.mokoMvvmVersion.get() - dependencies { commonMainApi(libs.coroutines) } diff --git a/mvvm-internal/src/androidMain/kotlin/dev/icerock/moko/mvvm/internal/createUIDispatcher.kt b/mvvm-internal/src/androidMain/kotlin/dev/icerock/moko/mvvm/internal/createUIDispatcher.kt deleted file mode 100644 index 726c16bd..00000000 --- a/mvvm-internal/src/androidMain/kotlin/dev/icerock/moko/mvvm/internal/createUIDispatcher.kt +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2021 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. - */ - -package dev.icerock.moko.mvvm.internal - -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.Dispatchers - -actual fun createUIDispatcher(): CoroutineDispatcher = Dispatchers.Main diff --git a/mvvm-internal/src/commonMain/kotlin/dev/icerock/moko/mvvm/internal/createUIDispatcher.kt b/mvvm-internal/src/commonMain/kotlin/dev/icerock/moko/mvvm/internal/createUIDispatcher.kt index 73509d48..101cb1aa 100644 --- a/mvvm-internal/src/commonMain/kotlin/dev/icerock/moko/mvvm/internal/createUIDispatcher.kt +++ b/mvvm-internal/src/commonMain/kotlin/dev/icerock/moko/mvvm/internal/createUIDispatcher.kt @@ -5,5 +5,9 @@ package dev.icerock.moko.mvvm.internal import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers -expect fun createUIDispatcher(): CoroutineDispatcher +/** + * We use coroutines native-mt version, so we can use Main dispatcher on both platforms + */ +fun createUIDispatcher(): CoroutineDispatcher = Dispatchers.Main diff --git a/mvvm-internal/src/iosMain/kotlin/dev/icerock/moko/mvvm/internal/UIDispatcher.kt b/mvvm-internal/src/iosMain/kotlin/dev/icerock/moko/mvvm/internal/UIDispatcher.kt deleted file mode 100644 index 3de81abb..00000000 --- a/mvvm-internal/src/iosMain/kotlin/dev/icerock/moko/mvvm/internal/UIDispatcher.kt +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2021 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. - */ - -package dev.icerock.moko.mvvm.internal - -import kotlinx.coroutines.CancellableContinuation -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.Delay -import kotlinx.coroutines.DisposableHandle -import kotlinx.coroutines.InternalCoroutinesApi -import kotlinx.coroutines.Runnable -import platform.darwin.DISPATCH_TIME_NOW -import platform.darwin.NSEC_PER_MSEC -import platform.darwin.dispatch_after -import platform.darwin.dispatch_async -import platform.darwin.dispatch_get_main_queue -import platform.darwin.dispatch_time -import kotlin.coroutines.CoroutineContext - -@OptIn(ExperimentalUnsignedTypes::class, InternalCoroutinesApi::class) -internal class UIDispatcher : CoroutineDispatcher(), Delay { - private val mQueue = dispatch_get_main_queue() - - override fun dispatch(context: CoroutineContext, block: Runnable) { - dispatch_async(mQueue) { - block.run() - } - } - - override fun scheduleResumeAfterDelay( - timeMillis: Long, - continuation: CancellableContinuation - ) { - dispatch_after( - `when` = dispatch_time( - DISPATCH_TIME_NOW, - timeMillis * NSEC_PER_MSEC.toLong() - ), - queue = mQueue - ) { - val result = continuation.tryResume(Unit) - if (result != null) { - continuation.completeResume(result) - } - } - } - - override fun invokeOnTimeout( - timeMillis: Long, - block: Runnable, - context: CoroutineContext - ): DisposableHandle { - var disposed = false - dispatch_after( - `when` = dispatch_time( - DISPATCH_TIME_NOW, - timeMillis * NSEC_PER_MSEC.toLong() - ), - queue = mQueue - ) { - if (disposed) return@dispatch_after - - block.run() - } - return object : DisposableHandle { - override fun dispose() { - disposed = true - } - } - } -} diff --git a/mvvm-internal/src/iosMain/kotlin/dev/icerock/moko/mvvm/internal/createUIDispatcher.kt b/mvvm-internal/src/iosMain/kotlin/dev/icerock/moko/mvvm/internal/createUIDispatcher.kt deleted file mode 100644 index 23808798..00000000 --- a/mvvm-internal/src/iosMain/kotlin/dev/icerock/moko/mvvm/internal/createUIDispatcher.kt +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright 2021 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. - */ - -package dev.icerock.moko.mvvm.internal - -import kotlinx.coroutines.CoroutineDispatcher - -actual fun createUIDispatcher(): CoroutineDispatcher = UIDispatcher() diff --git a/mvvm-livedata-glide/build.gradle.kts b/mvvm-livedata-glide/build.gradle.kts index 27566bd9..d9f71ce7 100644 --- a/mvvm-livedata-glide/build.gradle.kts +++ b/mvvm-livedata-glide/build.gradle.kts @@ -3,13 +3,9 @@ */ plugins { - id("com.android.library") - id("kotlin-android") - id("org.gradle.maven-publish") -} - -android { - sourceSets.all { java.srcDir("src/$name/kotlin") } + id("android-library-convention") + id("detekt-convention") + id("android-publication-convention") } dependencies { @@ -24,11 +20,3 @@ dependencies { api(libs.glide) api(libs.coroutines) } - -afterEvaluate { - publishing.publications { - create("release", MavenPublication::class.java) { - from(components.getByName("release")) - } - } -} diff --git a/mvvm-livedata-material/build.gradle.kts b/mvvm-livedata-material/build.gradle.kts index 731c6fc4..a9c8824d 100644 --- a/mvvm-livedata-material/build.gradle.kts +++ b/mvvm-livedata-material/build.gradle.kts @@ -3,13 +3,9 @@ */ plugins { - id("com.android.library") - id("kotlin-android") - id("org.gradle.maven-publish") -} - -android { - sourceSets.all { java.srcDir("src/$name/kotlin") } + id("android-library-convention") + id("detekt-convention") + id("android-publication-convention") } dependencies { @@ -24,11 +20,3 @@ dependencies { api(libs.material) api(libs.coroutines) } - -afterEvaluate { - publishing.publications { - create("release", MavenPublication::class.java) { - from(components.getByName("release")) - } - } -} diff --git a/mvvm-livedata-swiperefresh/build.gradle.kts b/mvvm-livedata-swiperefresh/build.gradle.kts index 2f682e21..429ffe0d 100644 --- a/mvvm-livedata-swiperefresh/build.gradle.kts +++ b/mvvm-livedata-swiperefresh/build.gradle.kts @@ -3,13 +3,9 @@ */ plugins { - id("com.android.library") - id("kotlin-android") - id("org.gradle.maven-publish") -} - -android { - sourceSets.all { java.srcDir("src/$name/kotlin") } + id("android-library-convention") + id("detekt-convention") + id("android-publication-convention") } dependencies { @@ -24,11 +20,3 @@ dependencies { api(libs.swipeRefresh) api(libs.coroutines) } - -afterEvaluate { - publishing.publications { - create("release", MavenPublication::class.java) { - from(components.getByName("release")) - } - } -} diff --git a/mvvm-livedata/build.gradle.kts b/mvvm-livedata/build.gradle.kts index 91cf69ea..e78c5872 100644 --- a/mvvm-livedata/build.gradle.kts +++ b/mvvm-livedata/build.gradle.kts @@ -3,22 +3,21 @@ */ plugins { - id("com.android.library") - id("org.jetbrains.kotlin.multiplatform") - id("dev.icerock.mobile.multiplatform") - id("org.gradle.maven-publish") + id("multiplatform-library-convention") + id("detekt-convention") + id("publication-convention") } dependencies { commonMainImplementation(libs.coroutines) commonMainApi(libs.mokoResources) - commonMainApi(project(":mvvm-core")) + commonMainApi(projects.mvvmCore) - androidMainApi(libs.appCompat) - androidMainApi(libs.androidLiveData) - androidMainImplementation(libs.coroutines) + "androidMainApi"(libs.appCompat) + "androidMainApi"(libs.androidLiveData) + "androidMainImplementation"(libs.coroutines) commonTestApi(libs.mokoTest) - commonTestApi(project(":mvvm-test")) + commonTestApi(projects.mvvmTest) } diff --git a/mvvm-state-deprecated/build.gradle.kts b/mvvm-state-deprecated/build.gradle.kts index 2f6aa6a7..60fbff36 100644 --- a/mvvm-state-deprecated/build.gradle.kts +++ b/mvvm-state-deprecated/build.gradle.kts @@ -3,10 +3,9 @@ */ plugins { - id("com.android.library") - id("org.jetbrains.kotlin.multiplatform") - id("dev.icerock.mobile.multiplatform") - id("org.gradle.maven-publish") + id("multiplatform-library-convention") + id("detekt-convention") + id("publication-convention") } dependencies { @@ -14,11 +13,9 @@ dependencies { commonMainApi(projects.mvvmLivedata) - androidMainApi(libs.appCompat) - androidMainApi(libs.androidViewModel) - - androidMainImplementation(libs.coroutines) + "androidMainApi"(libs.appCompat) + "androidMainApi"(libs.androidViewModel) commonTestApi(libs.mokoTest) - commonTestApi(project(":mvvm-test")) + commonTestApi(projects.mvvmTest) } diff --git a/mvvm-state/build.gradle.kts b/mvvm-state/build.gradle.kts index 653e0f0f..60fbff36 100644 --- a/mvvm-state/build.gradle.kts +++ b/mvvm-state/build.gradle.kts @@ -3,10 +3,9 @@ */ plugins { - id("com.android.library") - id("org.jetbrains.kotlin.multiplatform") - id("dev.icerock.mobile.multiplatform") - id("org.gradle.maven-publish") + id("multiplatform-library-convention") + id("detekt-convention") + id("publication-convention") } dependencies { @@ -14,10 +13,8 @@ dependencies { commonMainApi(projects.mvvmLivedata) - androidMainApi(libs.appCompat) - androidMainApi(libs.androidViewModel) - - androidMainImplementation(libs.coroutines) + "androidMainApi"(libs.appCompat) + "androidMainApi"(libs.androidViewModel) commonTestApi(libs.mokoTest) commonTestApi(projects.mvvmTest) diff --git a/mvvm-test/build.gradle.kts b/mvvm-test/build.gradle.kts index ff05cefe..73b5f283 100644 --- a/mvvm-test/build.gradle.kts +++ b/mvvm-test/build.gradle.kts @@ -3,10 +3,9 @@ */ plugins { - id("com.android.library") - id("org.jetbrains.kotlin.multiplatform") - id("dev.icerock.mobile.multiplatform") - id("org.gradle.maven-publish") + id("multiplatform-library-convention") + id("detekt-convention") + id("publication-convention") } dependencies { @@ -16,6 +15,6 @@ dependencies { commonMainImplementation(projects.mvvmInternal) commonMainApi(libs.kotlinTestJUnit) - androidMainApi(libs.coroutinesTest) - androidMainApi(libs.androidCoreTesting) + "androidMainApi"(libs.coroutinesTest) + "androidMainApi"(libs.androidCoreTesting) } diff --git a/mvvm-viewbinding/build.gradle.kts b/mvvm-viewbinding/build.gradle.kts index 7f725fb0..d7a4b890 100644 --- a/mvvm-viewbinding/build.gradle.kts +++ b/mvvm-viewbinding/build.gradle.kts @@ -3,22 +3,20 @@ */ plugins { - id("com.android.library") - id("kotlin-android") + id("android-library-convention") + id("detekt-convention") id("kotlin-kapt") - id("org.gradle.maven-publish") + id("android-publication-convention") } android { buildFeatures.viewBinding = true - - sourceSets.all { java.srcDir("src/$name/kotlin") } } dependencies { implementation(libs.coroutines) - api(project(":mvvm-core")) + api(projects.mvvmCore) api(libs.mokoResources) @@ -26,11 +24,3 @@ dependencies { api(libs.lifecycle) api(libs.coroutines) } - -afterEvaluate { - publishing.publications { - create("release", MavenPublication::class.java) { - from(components.getByName("release")) - } - } -} diff --git a/mvvm/build.gradle.kts b/mvvm/build.gradle.kts index b968fad3..c7e6f0c7 100644 --- a/mvvm/build.gradle.kts +++ b/mvvm/build.gradle.kts @@ -3,15 +3,14 @@ */ plugins { - id("com.android.library") - id("org.jetbrains.kotlin.multiplatform") - id("dev.icerock.mobile.multiplatform") - id("org.gradle.maven-publish") + id("multiplatform-library-convention") + id("detekt-convention") + id("publication-convention") } dependencies { // by default use old named state // core and livedata loaded transitive from it. not add directly - mergeDex will fail on android - commonMainApi(project(":mvvm-state-deprecated")) - androidMainApi(project(":mvvm-databinding")) + commonMainApi(projects.mvvmStateDeprecated) + "androidMainApi"(projects.mvvmDatabinding) } diff --git a/sample/android-app/build.gradle.kts b/sample/android-app/build.gradle.kts index f2de90ed..d37b524b 100644 --- a/sample/android-app/build.gradle.kts +++ b/sample/android-app/build.gradle.kts @@ -1,43 +1,17 @@ plugins { - id("com.android.application") - id("kotlin-android") + id("android-app-convention") + id("detekt-convention") id("kotlin-kapt") } android { - compileSdkVersion(libs.versions.compileSdk.get().toInt()) - buildFeatures.dataBinding = true - dexOptions { - javaMaxHeapSize = "2g" - } - defaultConfig { - minSdkVersion(libs.versions.minSdk.get().toInt()) - targetSdkVersion(libs.versions.targetSdk.get().toInt()) - applicationId = "dev.icerock.moko.samples.mvvm" versionCode = 1 versionName = "0.1.0" - - vectorDrawables.useSupportLibrary = true - } - - buildTypes { - getByName("release") { - isMinifyEnabled = false - proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro") - } - getByName("debug") { - isDebuggable = true - applicationIdSuffix = ".debug" - } - } - - packagingOptions { - exclude("META-INF/*.kotlin_module") } lintOptions { @@ -48,5 +22,5 @@ android { dependencies { implementation(libs.appCompat) - implementation(project(":sample:mpp-library")) + implementation(projects.sample.mppLibrary) } diff --git a/sample/mpp-library/build.gradle.kts b/sample/mpp-library/build.gradle.kts index 9157cb4f..56648d71 100644 --- a/sample/mpp-library/build.gradle.kts +++ b/sample/mpp-library/build.gradle.kts @@ -1,10 +1,17 @@ plugins { id("com.android.library") + id("android-base-convention") + id("detekt-convention") id("org.jetbrains.kotlin.multiplatform") - id("dev.icerock.mobile.multiplatform") + id("dev.icerock.mobile.multiplatform.android-manifest") id("dev.icerock.mobile.multiplatform.ios-framework") } +kotlin { + android() + ios() +} + dependencies { commonMainImplementation(libs.coroutines) @@ -14,16 +21,16 @@ dependencies { commonMainApi(projects.mvvmLivedata) commonMainApi(projects.mvvmCore) - androidMainApi(projects.mvvmLivedataGlide) - androidMainApi(projects.mvvmLivedataMaterial) - androidMainApi(projects.mvvmLivedataSwiperefresh) + "androidMainApi"(projects.mvvmLivedataGlide) + "androidMainApi"(projects.mvvmLivedataMaterial) + "androidMainApi"(projects.mvvmLivedataSwiperefresh) commonTestImplementation(projects.mvvmTest) - commonTestImplementation(libs.mokoMvvmTest) + commonTestImplementation(libs.mokoTest) } framework { - export(project(":mvvm-core")) - export(project(":mvvm-livedata")) + export(projects.mvvmCore) + export(projects.mvvmLivedata) export(libs.mokoResources) } diff --git a/settings.gradle.kts b/settings.gradle.kts index b62af84b..bab0f9c2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,13 +12,14 @@ dependencyResolutionManagement { jcenter { content { - includeGroup("org.jetbrains.trove4j") includeModule("org.jetbrains.kotlinx", "kotlinx-html-jvm") } } } } +includeBuild("mvvm-build-logic") + include(":mvvm-internal") include(":mvvm-core") include(":mvvm-livedata") From e23c898c714b0ce731c310b1617a77f629bd8b7e Mon Sep 17 00:00:00 2001 From: Aleksey Mikhailov Date: Sun, 27 Jun 2021 14:41:53 +0700 Subject: [PATCH 8/8] up version --- MultiPlatformLibraryMvvm.podspec | 2 +- README.md | 60 +++++++++----------------------- 2 files changed, 17 insertions(+), 45 deletions(-) diff --git a/MultiPlatformLibraryMvvm.podspec b/MultiPlatformLibraryMvvm.podspec index ab2c0e7a..d8c23ba7 100644 --- a/MultiPlatformLibraryMvvm.podspec +++ b/MultiPlatformLibraryMvvm.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = 'MultiPlatformLibraryMvvm' - spec.version = '0.9.1' + spec.version = '0.11.0' spec.homepage = 'https://github.com/icerockdev/moko-mvvm' spec.source = { :git => "https://github.com/icerockdev/moko-mvvm.git", :tag => "release/#{spec.version}" } spec.authors = 'IceRock Development' diff --git a/README.md b/README.md index 9920ab95..2268e049 100755 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ![moko-mvvm](img/logo.png) -[![GitHub license](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) [![Download](https://img.shields.io/maven-central/v/dev.icerock.moko/mvvm) ](https://repo1.maven.org/maven2/dev/icerock/moko/mvvm) ![kotlin-version](https://img.shields.io/badge/kotlin-1.4.31-orange) +[![GitHub license](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) [![Download](https://img.shields.io/maven-central/v/dev.icerock.moko/mvvm-core) ](https://repo1.maven.org/maven2/dev/icerock/moko/mvvm-core) ![kotlin-version](https://kotlin-version.aws.icerock.dev/kotlin-version?group=dev.icerock.moko&name=mvvm-core) # Mobile Kotlin Model-View-ViewModel architecture components This is a Kotlin Multiplatform library that provides architecture components of Model-View-ViewModel @@ -8,7 +8,6 @@ This is a Kotlin Multiplatform library that provides architecture components of ## Table of Contents - [Features](#features) - [Requirements](#requirements) -- [Versions](#versions) - [Installation](#installation) - [Documentation](#documentation) - [Usage](#usage) @@ -24,36 +23,9 @@ This is a Kotlin Multiplatform library that provides architecture components of - **DataBinding, ViewBinding support** - integrate to android app with commonly used tools. ## Requirements -- Gradle version 6.0+ +- Gradle version 6.8+ - Android API 16+ -- iOS version 9.0+ - -## Versions -### Bintray -- kotlin 1.3.50 - - 0.1.0 - - 0.2.0 - - 0.3.0 - - 0.3.1 -- kotlin 1.3.61 - - 0.4.0 - - 0.5.0 -- kotlin 1.3.70 - - 0.6.0 -- kotlin 1.3.72 - - 0.7.0 - - 0.7.1 -- kotlin 1.4.0 - - 0.8.0 -- kotlin 1.4.21 - - 0.8.1 - - 0.9.0 - - 0.9.1 -### mavenCentral -- kotlin 1.4.31 - - 0.9.2 - - 0.10.0 - - 0.10.1 +- iOS version 11.0+ ## Installation root build.gradle @@ -68,17 +40,17 @@ allprojects { project build.gradle ```groovy dependencies { - commonMainApi("dev.icerock.moko:mvvm-core:0.10.1") // only ViewModel, EventsDispatcher, Dispatchers.UI - commonMainApi("dev.icerock.moko:mvvm-livedata:0.10.1") // api mvvm-core, LiveData and extensions - commonMainApi("dev.icerock.moko:mvvm-state:0.10.1") // api mvvm-livedata, ResourceState class and extensions + commonMainApi("dev.icerock.moko:mvvm-core:0.11.0") // only ViewModel, EventsDispatcher, Dispatchers.UI + commonMainApi("dev.icerock.moko:mvvm-livedata:0.11.0") // api mvvm-core, LiveData and extensions + commonMainApi("dev.icerock.moko:mvvm-state:0.11.0") // api mvvm-livedata, ResourceState class and extensions - androidMainApi("dev.icerock.moko:mvvm-livedata-material:0.10.1") // api mvvm-livedata, Material library android extensions - androidMainApi("dev.icerock.moko:mvvm-livedata-glide:0.10.1") // api mvvm-livedata, Glide library android extensions - androidMainApi("dev.icerock.moko:mvvm-livedata-swiperefresh:0.10.1") // api mvvm-livedata, SwipeRefreshLayout library android extensions - androidMainApi("dev.icerock.moko:mvvm-databinding:0.10.1") // api mvvm-livedata, DataBinding support for Android - androidMainApi("dev.icerock.moko:mvvm-viewbinding:0.10.1") // api mvvm-livedata, ViewBinding support for Android + androidMainApi("dev.icerock.moko:mvvm-livedata-material:0.11.0") // api mvvm-livedata, Material library android extensions + androidMainApi("dev.icerock.moko:mvvm-livedata-glide:0.11.0") // api mvvm-livedata, Glide library android extensions + androidMainApi("dev.icerock.moko:mvvm-livedata-swiperefresh:0.11.0") // api mvvm-livedata, SwipeRefreshLayout library android extensions + androidMainApi("dev.icerock.moko:mvvm-databinding:0.11.0") // api mvvm-livedata, DataBinding support for Android + androidMainApi("dev.icerock.moko:mvvm-viewbinding:0.11.0") // api mvvm-livedata, ViewBinding support for Android - commonTestImplementation("dev.icerock.moko:mvvm-test:0.10.1") // test utilities + commonTestImplementation("dev.icerock.moko:mvvm-test:0.11.0") // test utilities } ``` @@ -88,9 +60,9 @@ kotlin { // export correct artifact to use all classes of library directly from Swift targets.withType(org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget::class.java).all { binaries.withType(org.jetbrains.kotlin.gradle.plugin.mpp.Framework::class.java).all { - export("dev.icerock.moko:mvvm-core:0.10.1") - export("dev.icerock.moko:mvvm-livedata:0.10.1") - export("dev.icerock.moko:mvvm-state:0.10.1") + export("dev.icerock.moko:mvvm-core:0.11.0") + export("dev.icerock.moko:mvvm-livedata:0.11.0") + export("dev.icerock.moko:mvvm-state:0.11.0") } } } @@ -98,7 +70,7 @@ kotlin { On iOS, in addition to the Kotlin library add in Podfile ```ruby -pod 'MultiPlatformLibraryMvvm', :git => 'https://github.com/icerockdev/moko-mvvm.git', :tag => 'release/0.10.1' +pod 'MultiPlatformLibraryMvvm', :git => 'https://github.com/icerockdev/moko-mvvm.git', :tag => 'release/0.11.0' ``` **`MultiPlatformLibraryMvvm` CocoaPod requires that the framework compiled from Kotlin be named `MultiPlatformLibrary` and be connected as a CocoaPod `MultiPlatformLibrary`.