Skip to content

Commit e2d095f

Browse files
authored
Merge pull request #93 from russhwolf/0.8
Version 0.8
2 parents 9627b2a + 5e5faad commit e2d095f

File tree

36 files changed

+361
-333
lines changed

36 files changed

+361
-333
lines changed

.idea/codeStyles/Project.xml

Lines changed: 1 addition & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CHANGELOG.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
11
# Changelog #
22

3+
## v0.8 *(2021-08-26)* ##
4+
5+
- Update to Kotlin 1.5.30 and Gradle 7.1
6+
- Add new Apple ARM targets
7+
- Enable hierarchical project model
8+
- Update `multiplatform-settings-coroutines` to use coroutines version 1.5.1
9+
- Update `multiplatform-settings-datastore` to use DataStore release version 1.0.0
10+
- Update `multiplatform-settings-serialization` to use serialization version 1.2.2
11+
- Other dependency version updates
12+
313
## v0.7.7 *(2021-05-20)* ##
414

515
- Fix missing Kotlin 1.5.0 updates
616
- Update `multiplatform-settings-coroutines` to use coroutines version 1.5.0
717
- Update `multiplatform-settings-datastore` to use DataStore version 1.0.0-beta01
8-
- Update `multiplatform-settings-serealization` to use serialization version 1.2.1
18+
- Update `multiplatform-settings-serialization` to use serialization version 1.2.1
919

1020
## v0.7.6 *(2021-04-27)* ##
1121

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ Then, simply add the dependency to your common source-set dependencies
5252
commonMain {
5353
dependencies {
5454
// ...
55-
implementation("com.russhwolf:multiplatform-settings:0.7.7")
55+
implementation("com.russhwolf:multiplatform-settings:0.8")
5656
}
5757
}
5858
```
@@ -144,7 +144,7 @@ val factory: Settings.Factory = AppleSettings.Factory()
144144
To create a `Settings` instance from common without needing to pass platform-specific dependencies, add the `multiplatform-settings-no-arg` gradle dependency. This exports `multiplatform-settings` as an API dependency, so you can use it as a replacement for that default dependency.
145145

146146
```kotlin
147-
implementation("com.russhwolf:multiplatform-settings-no-arg:0.7.7")
147+
implementation("com.russhwolf:multiplatform-settings-no-arg:0.8")
148148
```
149149

150150
Then from common code, you can write
@@ -238,7 +238,7 @@ Note that for the `AppleSettings` implementation, some entries are unremovable a
238238
A testing dependency is available to aid in testing code that interacts with this library.
239239

240240
```kotlin
241-
implementation("com.russhwolf:multiplatform-settings-test:0.7.7")
241+
implementation("com.russhwolf:multiplatform-settings-test:0.8")
242242
```
243243

244244
This includes a `MockSettings` implementation of the `Settings` interface, which is backed by an in-memory `MutableMap` on all platforms.
@@ -309,7 +309,7 @@ On Apple platforms, the `AppleSettings` listeners are designed to work within th
309309
A `kotlinx-serialization` integration exists so it's easier to save non-primitive data
310310

311311
```kotlin
312-
implementation("com.russhwolf:multiplatform-settings-serialization:0.7.7")
312+
implementation("com.russhwolf:multiplatform-settings-serialization:0.8")
313313
```
314314

315315
This essentially uses the `Settings` store as a serialization format. Thus for a serializable class
@@ -346,10 +346,10 @@ Usage requires accepting both the `@ExperimentalSettingsApi` and `@ExperimentalS
346346
A separate `multiplatform-settings-coroutines` dependency includes various coroutine APIs.
347347

348348
```kotlin
349-
implementation("com.russhwolf:multiplatform-settings-coroutines:0.7.7")
349+
implementation("com.russhwolf:multiplatform-settings-coroutines:0.8")
350350

351351
// Or, if you use native-mt coroutines release
352-
implementation("com.russhwolf:multiplatform-settings-coroutines-native-mt:0.7.7")
352+
implementation("com.russhwolf:multiplatform-settings-coroutines-native-mt:0.8")
353353
```
354354

355355
This adds flow extensions for all types which use the listener APIs internally.
@@ -389,7 +389,7 @@ val blockingSettings: Settings = suspendSettings.toBlockingSettings()
389389
An implementation of `FlowSettings` on the Android exists in the `multiplatform-settings-datastore` dependency, based on [Jetpack DataStore](https://developer.android.com/jetpack/androidx/releases/datastore)
390390

391391
```kotlin
392-
implementation("com.russhwolf:multiplatform-settings-datastore:0.7.7")
392+
implementation("com.russhwolf:multiplatform-settings-datastore:0.8")
393393
```
394394

395395
This provides a `DataStoreSettings` class

azure-pipelines-deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jobs:
3636
jdkArchitectureOption: 'x64'
3737
publishJUnitResults: true
3838
testResultsFiles: '**/TEST-*.xml'
39-
tasks: 'clean publishIosArm32PublicationToMavenRepository publishIosArm64PublicationToMavenRepository publishIosX64PublicationToMavenRepository publishMacosX64PublicationToMavenRepository publishWatchosArm32PublicationToMavenRepository publishWatchosArm64PublicationToMavenRepository publishWatchosX86PublicationToMavenRepository publishTvosArm64PublicationToMavenRepository publishTvosX64PublicationToMavenRepository'
39+
tasks: 'clean publishKotlinMultiplatformPublicationToMavenRepository publishIosArm32PublicationToMavenRepository publishIosArm64PublicationToMavenRepository publishIosSimulatorArm64PublicationToMavenRepository publishIosX64PublicationToMavenRepository publishMacosX64PublicationToMavenRepository publishMacosArm64PublicationToMavenRepository publishWatchosArm32PublicationToMavenRepository publishWatchosArm64PublicationToMavenRepository publishWatchosSimulatorArm64PublicationToMavenRepository publishWatchosX86PublicationToMavenRepository publishWatchosX64PublicationToMavenRepository publishTvosArm64PublicationToMavenRepository publishTvosSimulatorArm64PublicationToMavenRepository publishTvosX64PublicationToMavenRepository'
4040
env:
4141
ORG_GRADLE_PROJECT_sonatypeUsername: $(sonatype_username)
4242
ORG_GRADLE_PROJECT_sonatypePassword: $(sonatype_password)

azure-pipelines.yml

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ jobs:
6868
jdkArchitectureOption: 'x64'
6969
publishJUnitResults: true
7070
testResultsFiles: '**/TEST-*.xml'
71-
tasks: 'clean macosX64Test iosX64Test watchosX86Test tvosX64Test publishKotlinMultiplatformPublicationToMavenLocal publishIosArm32PublicationToMavenLocal publishIosArm64PublicationToMavenLocal publishIosX64PublicationToMavenLocal publishMacosX64PublicationToMavenLocal publishWatchosArm32PublicationToMavenLocal publishWatchosArm64PublicationToMavenLocal publishWatchosX86PublicationToMavenLocal publishTvosArm64PublicationToMavenLocal publishTvosX64PublicationToMavenLocal'
71+
tasks: 'clean macosX64Test iosX64Test watchosX64Test watchosX86Test tvosX64Test publishKotlinMultiplatformPublicationToMavenLocal publishIosArm32PublicationToMavenLocal publishIosArm64PublicationToMavenLocal publishIosSimulatorArm64PublicationToMavenLocal publishIosX64PublicationToMavenLocal publishMacosX64PublicationToMavenLocal publishMacosArm64PublicationToMavenLocal publishWatchosArm32PublicationToMavenLocal publishWatchosArm64PublicationToMavenLocal publishWatchosSimulatorArm64PublicationToMavenLocal publishWatchosX86PublicationToMavenLocal publishWatchosX64PublicationToMavenLocal publishTvosArm64PublicationToMavenLocal publishTvosSimulatorArm64PublicationToMavenLocal publishTvosX64PublicationToMavenLocal'
7272

7373
- task: Gradle@2
7474
inputs:
@@ -80,15 +80,18 @@ jobs:
8080
jdkArchitectureOption: 'x64'
8181
publishJUnitResults: true
8282
testResultsFiles: '**/TEST-*.xml'
83-
tasks: 'clean iosTest'
83+
tasks: 'clean iosX64Test'
8484

85-
- task: Xcode@5
86-
inputs:
87-
actions: 'build'
88-
configuration: 'Debug'
89-
scheme: 'SettingsDemo'
90-
sdk: 'iphoneos'
91-
packageApp: false
85+
# TODO disabled because embedAndSign task needs more signing/provisioning config
86+
# - task: Xcode@5
87+
# inputs:
88+
# actions: 'build'
89+
# configuration: 'Debug'
90+
# scheme: 'SettingsDemo'
91+
# sdk: 'iphoneos'
92+
# packageApp: false
93+
# signingOption: default
94+
# args: '-allowProvisioningUpdates'
9295

9396
# TODO Disabled because it isn't working in Azure
9497
# - task: Xcode@5

buildSrc/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616

1717
plugins {
18-
kotlin("jvm") version "1.5.0"
18+
kotlin("jvm") version "1.5.30"
1919
}
2020

2121
repositories {

buildSrc/src/main/kotlin/BuildHelpers.kt

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
2929
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
3030
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
3131
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetPreset
32+
import org.jetbrains.kotlin.konan.target.Architecture
33+
import org.jetbrains.kotlin.konan.target.KonanTarget
3234

3335
private val Project.kotlin: KotlinMultiplatformExtension
3436
get() = extensions.getByType(KotlinMultiplatformExtension::class.java)
@@ -83,12 +85,13 @@ private fun KotlinMultiplatformExtension.buildAllTargets(targetPresets: NamedDom
8385

8486
sourceSets.all {
8587
it.languageSettings.apply {
86-
useExperimentalAnnotation("kotlin.RequiresOptIn")
88+
optIn("kotlin.RequiresOptIn")
8789
}
8890
}
8991
targets.configureEach {
9092
it.compilations.configureEach {
91-
it.kotlinOptions.allWarningsAsErrors = true
93+
// TODO reenable this once duplicate library warnings are cleared
94+
// it.kotlinOptions.allWarningsAsErrors = true
9295
}
9396
}
9497

@@ -137,32 +140,15 @@ private fun KotlinMultiplatformExtension.linkNativeSourceSets() {
137140
dependsOn(appleTest)
138141
}
139142

140-
// TODO this is just here to make the IDE happy (ish) while we wait for HMPP to improve
141-
if (ideaActive) {
142-
findByName("macosX64Main")?.apply {
143-
kotlin.srcDirs(*nativeMain.kotlin.srcDirs.toTypedArray())
144-
kotlin.srcDirs(*appleMain.kotlin.srcDirs.toTypedArray())
145-
kotlin.srcDirs(*apple64Main.kotlin.srcDirs.toTypedArray())
146-
}
147-
findByName("macosX64Test")?.apply {
148-
kotlin.srcDirs(*nativeTest.kotlin.srcDirs.toTypedArray())
149-
kotlin.srcDirs(*appleTest.kotlin.srcDirs.toTypedArray())
150-
kotlin.srcDirs(*apple64Test.kotlin.srcDirs.toTypedArray())
151-
}
152-
findByName("jvmMain")?.apply {
153-
kotlin.srcDirs(*multithreadedMain.kotlin.srcDirs.toTypedArray())
154-
}
155-
findByName("jvmTest")?.apply {
156-
kotlin.srcDirs(*multithreadedTest.kotlin.srcDirs.toTypedArray())
157-
}
158-
}
159-
160143
targets
161144
.withType(KotlinNativeTarget::class.java)
162145
.matching { it.konanTarget.family.isAppleFamily }
163146
.configureEach {
164147
it.apply {
165-
if (konanTarget.architecture.bitness == 32 || it.name == "watchosArm64") {
148+
if (
149+
konanTarget.architecture !in listOf(Architecture.X64, Architecture.ARM64) ||
150+
konanTarget in listOf<KonanTarget>(KonanTarget.WATCHOS_ARM64)
151+
) {
166152
compilations.getByName("main").defaultSourceSet.dependsOn(apple32Main)
167153
compilations.getByName("test").defaultSourceSet.dependsOn(apple32Test)
168154
} else {

buildSrc/src/main/kotlin/Versions.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,22 @@
1717
@file:Suppress("KDocMissingDocumentation")
1818

1919
object Versions {
20-
const val multiplatformSettings = "0.7.7"
20+
const val multiplatformSettings = "0.8"
2121

2222
const val minSdk = 15
2323
const val compileSdk = 30
2424

25-
const val androidxDatastore = "1.0.0-beta01"
25+
const val androidxDatastore = "1.0.0"
2626
const val androidxPreference = "1.1.1"
27-
const val androidxStartup = "1.0.0"
28-
const val androidxTest = "1.3.0"
29-
const val androidxTestExt = "1.1.2"
27+
const val androidxStartup = "1.1.0"
28+
const val androidxTest = "1.4.0"
29+
const val androidxTestExt = "1.1.3"
3030
const val binaryCompatibilityValidator = "0.2.4"
31-
const val coroutines = "1.5.0"
32-
const val coroutinesNativeMt = "1.5.0-native-mt"
31+
const val coroutines = "1.5.1"
32+
const val coroutinesNativeMt = "1.5.1-native-mt"
3333
const val junit = "4.13.2"
34-
const val robolectric = "4.5.1"
35-
const val serializationPlugin = "1.5.0"
36-
const val serializationRuntime = "1.2.1"
37-
const val turbine = "0.5.0"
34+
const val robolectric = "4.6.1"
35+
const val serializationPlugin = "1.5.30"
36+
const val serializationRuntime = "1.2.2"
37+
const val turbine = "0.6.0"
3838
}

gradle.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,5 @@
1616
org.gradle.jvmargs=-Xmx2g
1717
android.useAndroidX=true
1818
kotlin.js.compiler=both
19+
kotlin.mpp.enableGranularSourceSetsMetadata=true
20+
kotlin.native.enableDependencyPropagation=false

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#
1616

1717
#Sun Jun 09 17:45:17 EDT 2019
18-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-all.zip
18+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-all.zip
1919
distributionBase=GRADLE_USER_HOME
2020
distributionPath=wrapper/dists
2121
zipStorePath=wrapper/dists
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright 2021 Russell Wolf
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.russhwolf.settings.coroutines
18+
19+
import kotlinx.coroutines.CoroutineScope
20+
import kotlin.coroutines.CoroutineContext
21+
22+
internal actual fun <T> runBlocking(context: CoroutineContext, block: suspend CoroutineScope.() -> T): T =
23+
kotlinx.coroutines.runBlocking(context, block)

multiplatform-settings-coroutines-internal/src/commonTest/kotlin/com/russhwolf/settings/coroutines/BaseCoroutineExtensionsTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,17 @@ abstract class BaseCoroutineExtensionsTest {
4141
settings.setter("foo", firstValue)
4242
settings.flowBuilder("foo", defaultValue)
4343
.test {
44-
assertEquals(firstValue, expectItem())
44+
assertEquals(firstValue, awaitItem())
4545
expectNoEvents()
4646
settings.setter("foo", firstValue)
4747
expectNoEvents()
4848
settings.setter("bar", firstValue)
4949
expectNoEvents()
5050
settings.setter("foo", secondValue)
51-
assertEquals(secondValue, expectItem())
51+
assertEquals(secondValue, awaitItem())
5252
expectNoEvents()
5353
settings.remove("foo")
54-
assertEquals(defaultValue, expectItem())
54+
assertEquals(defaultValue, awaitItem())
5555
expectNoEvents()
5656
}
5757
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright 2021 Russell Wolf
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.russhwolf.settings.coroutines
18+
19+
import kotlinx.coroutines.CoroutineScope
20+
import kotlin.coroutines.CoroutineContext
21+
22+
internal actual fun <T> runBlocking(context: CoroutineContext, block: suspend CoroutineScope.() -> T): T =
23+
kotlinx.coroutines.runBlocking(context, block)

multiplatform-settings-coroutines-internal/src/multithreadedMain/kotlin/com/russhwolf/settings/coroutines/BlockingConverters.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package com.russhwolf.settings.coroutines
1818

1919
import com.russhwolf.settings.ExperimentalSettingsApi
2020
import com.russhwolf.settings.Settings
21-
import kotlinx.coroutines.runBlocking
2221

2322
/**
2423
* Wraps this [SuspendSettings] in the [Settings] interface.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright 2021 Russell Wolf
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.russhwolf.settings.coroutines
18+
19+
import kotlinx.coroutines.CoroutineScope
20+
import kotlin.coroutines.CoroutineContext
21+
import kotlin.coroutines.EmptyCoroutineContext
22+
23+
internal expect fun <T> runBlocking(
24+
context: CoroutineContext = EmptyCoroutineContext,
25+
block: suspend CoroutineScope.() -> T
26+
): T
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
package com.russhwolf.settings.coroutines
22

3-
import kotlinx.coroutines.runBlocking
4-
53
public actual fun suspendTest(block: suspend () -> Unit): Unit = runBlocking { block() }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright 2021 Russell Wolf
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.russhwolf.settings.coroutines
18+
19+
import kotlinx.coroutines.CoroutineScope
20+
import kotlin.coroutines.CoroutineContext
21+
22+
internal actual fun <T> runBlocking(context: CoroutineContext, block: suspend CoroutineScope.() -> T): T =
23+
kotlinx.coroutines.runBlocking(context, block)

0 commit comments

Comments
 (0)