diff --git a/README.md b/README.md index 2656b6ef0..f0546c011 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -<h1 align="left">Firebase Kotlin SDK <img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/gitliveapp/firebase-kotlin-sdk?style=flat-square"> <a href="https://git.live"><img src="https://img.shields.io/badge/GitLive-45_active_forks-blueviolet?style=flat-square"></a></h1> +<h1 align="left">Firebase Kotlin SDK <img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/gitliveapp/firebase-kotlin-sdk?style=flat-square"> <a href="https://git.live"><img src="https://img.shields.io/endpoint?style=flatsquare&url=https%3A%2F%2Fteamhub-dev.web.app%2Fbadge%3Forg%3DGitLiveApp%26repo%3Dfirebase-kotlin-sdk"></a></h1> <img align="left" width="75px" src="https://avatars2.githubusercontent.com/u/42865805?s=200&v=4"> <b>Built and maintained with 🧡 by <a href="https://git.live">GitLive</a></b><br/> <i>Development teams merge faster with GitLive</i><br/> @@ -76,7 +76,7 @@ plugins { } ``` -Then mark you custom classes `@Serializable`: +Then mark your custom classes `@Serializable`: ```kotlin @Serializable @@ -269,9 +269,13 @@ These properties are only accessible from the equivalent target's source set. Fo .build() ``` +### Running on Android + +On android, some modules (`config`) require you to enable [Core library desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) if you have a *minSDK lower than API 26*. + ### Running on iOS -On iOS the official [Firebase iOS SDK](https://github.com/firebase/firebase-ios-sdk) in not linked as a transtive dependency. Therefore, any project using this SDK needs to link the actual Firestore SDK as well. This can be done through your preferred installation method (Cocoapods/SPM). +On iOS the official [Firebase iOS SDK](https://github.com/firebase/firebase-ios-sdk) in not linked as a transitive dependency. Therefore, any project using this SDK needs to link the actual Firestore SDK as well. This can be done through your preferred installation method (Cocoapods/SPM). Similarly, tests require linking as well. Make sure to add the required frameworks to the search path of your test targets. This can be done by specifying a `cocoapods` block in your `build.gradle`: ```kotlin diff --git a/firebase-common-internal/package.json b/firebase-common-internal/package.json index c1a555b9e..9548da6c3 100644 --- a/firebase-common-internal/package.json +++ b/firebase-common-internal/package.json @@ -1,6 +1,6 @@ { "name": "@gitlive/firebase-common-internal", - "version": "2.0.0", + "version": "2.1.0", "description": "Wrapper around firebase for usage in Kotlin Multiplatform projects", "main": "firebase-common-internal.js", "scripts": { @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/GitLiveApp/firebase-kotlin-multiplatform-sdk", "dependencies": { - "@gitlive/firebase-common": "2.0.0", + "@gitlive/firebase-common": "2.1.0", "firebase": "9.19.1", "kotlin": "1.8.20", "kotlinx-coroutines-core": "1.6.4", diff --git a/firebase-config/build.gradle.kts b/firebase-config/build.gradle.kts index a28086463..f942264e4 100644 --- a/firebase-config/build.gradle.kts +++ b/firebase-config/build.gradle.kts @@ -29,7 +29,6 @@ android { } compileOptions { - isCoreLibraryDesugaringEnabled = true sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } @@ -45,10 +44,6 @@ android { } } -dependencies { - coreLibraryDesugaring(libs.android.desugarjdk) -} - val supportIosTarget = project.property("skipIosTarget") != "true" kotlin { diff --git a/firebase-crashlytics/src/iosMain/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt b/firebase-crashlytics/src/iosMain/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt index 6c6d16bec..5445ceb6e 100644 --- a/firebase-crashlytics/src/iosMain/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt +++ b/firebase-crashlytics/src/iosMain/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt @@ -37,22 +37,22 @@ public actual class FirebaseCrashlytics internal constructor(internal val ios: F } public actual fun didCrashOnPreviousExecution(): Boolean = ios.didCrashDuringPreviousExecution() public actual fun setCustomKey(key: String, value: String) { - ios.setCustomValue(key, value) + ios.setCustomValue(value, key) } public actual fun setCustomKey(key: String, value: Boolean) { - ios.setCustomValue(key, value.toString()) + ios.setCustomValue(value.toString(), key) } public actual fun setCustomKey(key: String, value: Double) { - ios.setCustomValue(key, value.toString()) + ios.setCustomValue(value.toString(), key) } public actual fun setCustomKey(key: String, value: Float) { - ios.setCustomValue(key, value.toString()) + ios.setCustomValue(value.toString(), key) } public actual fun setCustomKey(key: String, value: Int) { - ios.setCustomValue(key, value.toString()) + ios.setCustomValue(value.toString(), key) } public actual fun setCustomKey(key: String, value: Long) { - ios.setCustomValue(key, value.toString()) + ios.setCustomValue(value.toString(), key) } @Suppress("UNCHECKED_CAST") diff --git a/firebase-storage/api/android/firebase-storage.api b/firebase-storage/api/android/firebase-storage.api index 4715f8dcf..3613f5aab 100644 --- a/firebase-storage/api/android/firebase-storage.api +++ b/firebase-storage/api/android/firebase-storage.api @@ -13,6 +13,7 @@ public final class dev/gitlive/firebase/storage/FirebaseStorage { public final fun getMaxOperationRetryTime-UwyO8pc ()J public final fun getMaxUploadRetryTime-UwyO8pc ()J public final fun getReference ()Ldev/gitlive/firebase/storage/StorageReference; + public final fun getReferenceFromUrl (Ljava/lang/String;)Ldev/gitlive/firebase/storage/StorageReference; public final fun reference (Ljava/lang/String;)Ldev/gitlive/firebase/storage/StorageReference; public final fun setMaxOperationRetryTime-LRDsOJo (J)V public final fun setMaxUploadRetryTime-LRDsOJo (J)V diff --git a/firebase-storage/api/jvm/firebase-storage.api b/firebase-storage/api/jvm/firebase-storage.api index e94fb4ab9..eaa50149c 100644 --- a/firebase-storage/api/jvm/firebase-storage.api +++ b/firebase-storage/api/jvm/firebase-storage.api @@ -11,6 +11,7 @@ public final class dev/gitlive/firebase/storage/FirebaseStorage { public final fun getMaxOperationRetryTime-UwyO8pc ()J public final fun getMaxUploadRetryTime-UwyO8pc ()J public final fun getReference ()Ldev/gitlive/firebase/storage/StorageReference; + public final fun getReferenceFromUrl (Ljava/lang/String;)Ldev/gitlive/firebase/storage/StorageReference; public final fun reference (Ljava/lang/String;)Ldev/gitlive/firebase/storage/StorageReference; public final fun setMaxOperationRetryTime-LRDsOJo (J)V public final fun setMaxUploadRetryTime-LRDsOJo (J)V diff --git a/firebase-storage/src/androidMain/kotlin/dev/gitlive/firebase/storage/storage.kt b/firebase-storage/src/androidMain/kotlin/dev/gitlive/firebase/storage/storage.kt index 8d435afed..41c906c45 100644 --- a/firebase-storage/src/androidMain/kotlin/dev/gitlive/firebase/storage/storage.kt +++ b/firebase-storage/src/androidMain/kotlin/dev/gitlive/firebase/storage/storage.kt @@ -55,6 +55,8 @@ public actual class FirebaseStorage(internal val android: com.google.firebase.st public actual val reference: StorageReference get() = StorageReference(android.reference) public actual fun reference(location: String): StorageReference = StorageReference(android.getReference(location)) + + public actual fun getReferenceFromUrl(fullUrl: String): StorageReference = StorageReference(android.getReferenceFromUrl(fullUrl)) } public val StorageReference.android: com.google.firebase.storage.StorageReference get() = android diff --git a/firebase-storage/src/commonMain/kotlin/dev/gitlive/firebase/storage/storage.kt b/firebase-storage/src/commonMain/kotlin/dev/gitlive/firebase/storage/storage.kt index 8485adc51..57d311fed 100644 --- a/firebase-storage/src/commonMain/kotlin/dev/gitlive/firebase/storage/storage.kt +++ b/firebase-storage/src/commonMain/kotlin/dev/gitlive/firebase/storage/storage.kt @@ -86,6 +86,16 @@ public expect class FirebaseStorage { * @return An instance of [StorageReference] at the given child path. */ public fun reference(location: String): StorageReference + + /** + * Creates a [StorageReference] given a gs:// or https:// URL pointing to a Firebase Storage location. + * + * @param fullUrl A gs:// or http[s]:// URL used to initialize the reference. For example, you can pass + * in a download URL retrieved from getDownloadUrl or the uri retrieved from toString An error is + * thrown if fullUrl is not associated with the FirebaseApp used to initialize this FirebaseStorage. + * @return An instance of [StorageReference] at the given url. + */ + public fun getReferenceFromUrl(fullUrl: String): StorageReference } @Deprecated("Deprecated to use Kotlin Duration", replaceWith = ReplaceWith("maxOperationRetryTime")) diff --git a/firebase-storage/src/iosMain/kotlin/dev/gitlive/firebase/storage/storage.kt b/firebase-storage/src/iosMain/kotlin/dev/gitlive/firebase/storage/storage.kt index 0a0c1afab..46dcbe97e 100644 --- a/firebase-storage/src/iosMain/kotlin/dev/gitlive/firebase/storage/storage.kt +++ b/firebase-storage/src/iosMain/kotlin/dev/gitlive/firebase/storage/storage.kt @@ -67,6 +67,8 @@ public actual class FirebaseStorage(internal val ios: FIRStorage) { public actual val reference: StorageReference get() = StorageReference(ios.reference()) public actual fun reference(location: String): StorageReference = StorageReference(ios.referenceWithPath(location)) + + public actual fun getReferenceFromUrl(fullUrl: String): StorageReference = StorageReference(ios.referenceForURL(fullUrl)) } public val StorageReference.ios: FIRStorageReference get() = ios diff --git a/firebase-storage/src/jsMain/kotlin/dev/gitlive/firebase/storage/storage.kt b/firebase-storage/src/jsMain/kotlin/dev/gitlive/firebase/storage/storage.kt index 14a7897b3..5337601ae 100644 --- a/firebase-storage/src/jsMain/kotlin/dev/gitlive/firebase/storage/storage.kt +++ b/firebase-storage/src/jsMain/kotlin/dev/gitlive/firebase/storage/storage.kt @@ -51,6 +51,8 @@ public actual class FirebaseStorage(internal val js: dev.gitlive.firebase.storag public actual val reference: StorageReference get() = StorageReference(ref(js)) public actual fun reference(location: String): StorageReference = rethrow { StorageReference(ref(js, location)) } + + public actual fun getReferenceFromUrl(fullUrl: String): StorageReference = rethrow { StorageReference(ref(js, fullUrl)) } } public val StorageReference.js get() = js diff --git a/firebase-storage/src/jvmMain/kotlin/dev/gitlive/firebase/storage/storage.jvm.kt b/firebase-storage/src/jvmMain/kotlin/dev/gitlive/firebase/storage/storage.jvm.kt index 9d4f16ab8..c3674a728 100644 --- a/firebase-storage/src/jvmMain/kotlin/dev/gitlive/firebase/storage/storage.jvm.kt +++ b/firebase-storage/src/jvmMain/kotlin/dev/gitlive/firebase/storage/storage.jvm.kt @@ -37,6 +37,10 @@ public actual class FirebaseStorage { public actual fun reference(location: String): StorageReference { TODO("Not yet implemented") } + + public actual fun getReferenceFromUrl(fullUrl: String): StorageReference { + TODO("Not yet implemented") + } } public actual class StorageReference { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c2a38ad9b..ed0772a45 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,26 +1,25 @@ [versions] -agp = "8.5.2" +agp = "8.6.0" androidx-test-core = "1.6.1" androidx-test-junit = "1.2.1" androidx-test-runner = "1.6.2" ben-manes-versions = "0.51.0" firebase-bom = "33.2.0" -gitlive-firebase-java-sdk = "0.4.5" +gitlive-firebase-java-sdk = "0.4.6" gson = "2.11.0" junit = "4.13.2" -kotlin = "2.0.20" -kotlinx-coroutines = "1.9.0-RC.2" -kotlinx-serialization = "1.7.1" +kotlin = "2.0.21" +kotlinx-coroutines = "1.9.0" +kotlinx-serialization = "1.7.2" kotlinx-binarycompatibilityvalidator = "0.16.3" kotlinx-datetime = "0.6.1" kotlinter = "4.4.1" settings-api = "2.0" settings-language = "2.0" -firebase-cocoapods = "11.1.0" +firebase-cocoapods = "11.4.0" ios-deploymentTarget = "13.0" test-logger-plugin = "4.0.0" dokka = "1.9.20" -desugar-libs = "2.1.0" [libraries] android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" } @@ -50,7 +49,6 @@ kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines- kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinx-serialization" } kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" } dokka-base = { module = "org.jetbrains.dokka:dokka-base", version.ref = "dokka" } -android-desugarjdk = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar-libs" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" }