From d2ef6ef7689b201ae411f3af538d24830234a6e3 Mon Sep 17 00:00:00 2001 From: Sajid Ali Date: Sat, 7 Jun 2025 00:52:26 +0500 Subject: [PATCH 01/29] Add support for tvOS and update dependencies Updated the build configuration to include support for tvOS by setting deployment targets and adjusting Kotlin opt-ins. Also, updated Gradle and library versions to their latest stable releases as of commit `9b4c5f6`. This change ensures compatibility with new platforms while leveraging the latest features and improvements in dependencies. --- firebase-app/build.gradle.kts | 23 +++++++++++++++---- .../kotlin/dev/gitlive/firebase/firebase.kt | 0 firebase-common-internal/build.gradle.kts | 3 +++ .../firebase/internal/EncodedObject.kt | 0 .../gitlive/firebase/internal/_decoders.kt | 1 + .../gitlive/firebase/internal/_encoders.kt | 0 .../gitlive/firebase/internal/serializers.kt | 2 ++ firebase-common/build.gradle.kts | 3 +++ firebase-database/build.gradle.kts | 9 +++++++- .../gitlive/firebase/database/ServerValue.kt | 0 .../dev/gitlive/firebase/database/database.kt | 0 .../dev/gitlive/firebase/database/database.kt | 0 gradle/libs.versions.toml | 1 + test-utils/build.gradle.kts | 3 +++ .../kotlin/dev/gitlive/firebase/TestUtils.kt | 3 ++- 15 files changed, 41 insertions(+), 7 deletions(-) rename firebase-app/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firebase.kt (100%) rename firebase-common-internal/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/internal/EncodedObject.kt (100%) rename firebase-common-internal/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/internal/_decoders.kt (98%) rename firebase-common-internal/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/internal/_encoders.kt (100%) rename firebase-database/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/database/ServerValue.kt (100%) rename firebase-database/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/database/database.kt (100%) rename firebase-database/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/database/database.kt (100%) rename test-utils/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/TestUtils.kt (94%) diff --git a/firebase-app/build.gradle.kts b/firebase-app/build.gradle.kts index 99e9c95a2..ab0fbcf02 100644 --- a/firebase-app/build.gradle.kts +++ b/firebase-app/build.gradle.kts @@ -24,7 +24,7 @@ android { val compileSdkVersion: Int by project compileSdk = compileSdkVersion - namespace="dev.gitlive.firebase" + namespace = "dev.gitlive.firebase" defaultConfig { minSdk = minSdkVersion @@ -82,9 +82,13 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() framework { baseName = "FirebaseApp" } @@ -120,7 +124,10 @@ kotlin { this.apiVersion = libs.versions.settings.api.get() this.languageVersion = libs.versions.settings.language.get() progressiveMode = true - if (name.lowercase().contains("ios")) { + if (name.lowercase().contains("ios") + || name.lowercase().contains("apple") + || name.lowercase().contains("tvos") + ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } } @@ -152,19 +159,25 @@ kotlin { if (project.property("firebase-app.skipIosTests") == "true") { tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } + if (it.name.contains("ios", true) && it.name.contains("test", true)) { + it.enabled = false + } } } if (project.property("firebase-app.skipJvmTests") == "true") { tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } + if (it.name.contains("jvm", true) && it.name.contains("test", true)) { + it.enabled = false + } } } if (project.property("firebase-app.skipJsTests") == "true") { tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } + if (it.name.contains("js", true) && it.name.contains("test", true)) { + it.enabled = false + } } } diff --git a/firebase-app/src/iosMain/kotlin/dev/gitlive/firebase/firebase.kt b/firebase-app/src/appleMain/kotlin/dev/gitlive/firebase/firebase.kt similarity index 100% rename from firebase-app/src/iosMain/kotlin/dev/gitlive/firebase/firebase.kt rename to firebase-app/src/appleMain/kotlin/dev/gitlive/firebase/firebase.kt diff --git a/firebase-common-internal/build.gradle.kts b/firebase-common-internal/build.gradle.kts index 97549c2fe..a75b3652c 100644 --- a/firebase-common-internal/build.gradle.kts +++ b/firebase-common-internal/build.gradle.kts @@ -82,6 +82,9 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() } js(IR) { diff --git a/firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/EncodedObject.kt b/firebase-common-internal/src/appleMain/kotlin/dev/gitlive/firebase/internal/EncodedObject.kt similarity index 100% rename from firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/EncodedObject.kt rename to firebase-common-internal/src/appleMain/kotlin/dev/gitlive/firebase/internal/EncodedObject.kt diff --git a/firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt b/firebase-common-internal/src/appleMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt similarity index 98% rename from firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt rename to firebase-common-internal/src/appleMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt index 59008b9d9..507bb427f 100644 --- a/firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt +++ b/firebase-common-internal/src/appleMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt @@ -8,6 +8,7 @@ import kotlinx.serialization.encoding.CompositeDecoder import kotlinx.serialization.descriptors.PolymorphicKind import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.descriptors.StructureKind +import kotlin.collections.get internal actual fun FirebaseDecoderImpl.structureDecoder(descriptor: SerialDescriptor, polymorphicIsNested: Boolean): CompositeDecoder = when (descriptor.kind) { StructureKind.CLASS, StructureKind.OBJECT -> decodeAsMap(false) diff --git a/firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt b/firebase-common-internal/src/appleMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt similarity index 100% rename from firebase-common-internal/src/iosMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt rename to firebase-common-internal/src/appleMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt diff --git a/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/serializers.kt b/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/serializers.kt index 18f3df21f..34cbd86ea 100644 --- a/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/serializers.kt +++ b/firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/serializers.kt @@ -2,6 +2,8 @@ * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ +@file:OptIn(SealedSerializationApi::class) + package dev.gitlive.firebase.internal import kotlinx.serialization.KSerializer diff --git a/firebase-common/build.gradle.kts b/firebase-common/build.gradle.kts index 07ec4b0ce..df50722e7 100644 --- a/firebase-common/build.gradle.kts +++ b/firebase-common/build.gradle.kts @@ -81,6 +81,9 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() } js(IR) { diff --git a/firebase-database/build.gradle.kts b/firebase-database/build.gradle.kts index 6f64bddb6..6034ff8dd 100644 --- a/firebase-database/build.gradle.kts +++ b/firebase-database/build.gradle.kts @@ -83,8 +83,12 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() framework { baseName = "FirebaseDatabase" } @@ -123,7 +127,10 @@ kotlin { optIn("kotlinx.coroutines.ExperimentalCoroutinesApi") optIn("kotlinx.coroutines.FlowPreview") optIn("kotlinx.serialization.InternalSerializationApi") - if (name.lowercase().contains("ios")) { + if (name.lowercase().contains("ios") + || name.lowercase().contains("apple") + || name.lowercase().contains("tvos") + ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } } diff --git a/firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/ServerValue.kt b/firebase-database/src/appleMain/kotlin/dev/gitlive/firebase/database/ServerValue.kt similarity index 100% rename from firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/ServerValue.kt rename to firebase-database/src/appleMain/kotlin/dev/gitlive/firebase/database/ServerValue.kt diff --git a/firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/database.kt b/firebase-database/src/appleMain/kotlin/dev/gitlive/firebase/database/database.kt similarity index 100% rename from firebase-database/src/iosMain/kotlin/dev/gitlive/firebase/database/database.kt rename to firebase-database/src/appleMain/kotlin/dev/gitlive/firebase/database/database.kt diff --git a/firebase-database/src/iosTest/kotlin/dev/gitlive/firebase/database/database.kt b/firebase-database/src/appleTest/kotlin/dev/gitlive/firebase/database/database.kt similarity index 100% rename from firebase-database/src/iosTest/kotlin/dev/gitlive/firebase/database/database.kt rename to firebase-database/src/appleTest/kotlin/dev/gitlive/firebase/database/database.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d55c7499a..83001f2cc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,6 +18,7 @@ settings-api = "2.2" settings-language = "2.2" firebase-cocoapods = "11.8.0" ios-deploymentTarget = "13.0" +tvos-deploymentTarget = "13.0" test-logger-plugin = "4.0.0" dokka = "2.0.0" publish = "0.34.0" diff --git a/test-utils/build.gradle.kts b/test-utils/build.gradle.kts index a68dad0bf..fb01defbf 100644 --- a/test-utils/build.gradle.kts +++ b/test-utils/build.gradle.kts @@ -76,6 +76,9 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosX64() + tvosArm64() + tvosSimulatorArm64() } js(IR) { diff --git a/test-utils/src/iosMain/kotlin/dev/gitlive/firebase/TestUtils.kt b/test-utils/src/appleMain/kotlin/dev/gitlive/firebase/TestUtils.kt similarity index 94% rename from test-utils/src/iosMain/kotlin/dev/gitlive/firebase/TestUtils.kt rename to test-utils/src/appleMain/kotlin/dev/gitlive/firebase/TestUtils.kt index 1bd12ad92..971625fc8 100644 --- a/test-utils/src/iosMain/kotlin/dev/gitlive/firebase/TestUtils.kt +++ b/test-utils/src/appleMain/kotlin/dev/gitlive/firebase/TestUtils.kt @@ -14,6 +14,7 @@ import platform.Foundation.NSDefaultRunLoopMode import platform.Foundation.NSRunLoop import platform.Foundation.create import platform.Foundation.runMode +import kotlin.test.assertEquals actual fun runTest(test: suspend CoroutineScope.() -> Unit) = runBlocking { val testRun = MainScope().async { test() } @@ -30,5 +31,5 @@ actual fun runBlockingTest(action: suspend CoroutineScope.() -> Unit) = runBlock actual fun nativeMapOf(vararg pairs: Pair): Any = mapOf(*pairs) actual fun nativeListOf(vararg elements: Any?): Any = listOf(*elements) actual fun nativeAssertEquals(expected: Any?, actual: Any?) { - kotlin.test.assertEquals(expected, actual) + assertEquals(expected, actual) } From a3540c33ea7026a556c8387edcfbba63110b9760 Mon Sep 17 00:00:00 2001 From: Sajid Ali Date: Sat, 7 Jun 2025 14:27:34 +0500 Subject: [PATCH 02/29] Add macOS Support and Extend Platform Coverage Updated the build configuration to include support for macOS by setting appropriate deployment targets. Enhanced platform coverage by adding macOS targets to existing iOS, tvOS, and Kotlin opt-ins. Updated Gradle and library versions to their latest stable releases, ensuring compatibility with new platforms while leveraging recent improvements in dependencies. --- firebase-analytics/build.gradle.kts | 13 ++++++++++++- .../dev/gitlive/firebase/analytics/analytics.kt | 0 .../dev/gitlive/firebase/analytics/analytics.kt | 0 firebase-app/build.gradle.kts | 4 ++++ .../kotlin/dev/gitlive/firebase/firebase.kt | 0 firebase-common-internal/build.gradle.kts | 2 ++ firebase-common/build.gradle.kts | 2 ++ firebase-config/build.gradle.kts | 13 ++++++++++++- .../firebase/remoteconfig/FirebaseRemoteConfig.kt | 0 .../remoteconfig/FirebaseRemoteConfigValue.kt | 0 .../firebase/remoteconfig/NSDataExtension.kt | 0 .../firebase/remoteconfig/NSDataExtensionTest.kt | 0 .../gitlive/firebase/remoteconfig/RemoteConfig.kt | 0 firebase-crashlytics/build.gradle.kts | 13 ++++++++++++- .../dev/gitlive/firebase/crashlytics/crashlytics.kt | 0 .../dev/gitlive/firebase/crashlytics/crashlytics.kt | 0 firebase-database/build.gradle.kts | 4 ++++ firebase-firestore/build.gradle.kts | 13 ++++++++++++- .../dev/gitlive/firebase/firestore/FieldValue.kt | 0 .../dev/gitlive/firebase/firestore/GeoPoint.kt | 0 .../dev/gitlive/firebase/firestore/Timestamp.kt | 0 .../dev/gitlive/firebase/firestore/_encoders.kt | 0 .../dev/gitlive/firebase/firestore/firestore.kt | 0 .../internal/NativeCollectionReferenceWrapper.kt | 0 .../firestore/internal/NativeDocumentReference.kt | 0 .../internal/NativeDocumentSnapshotWrapper.kt | 0 .../internal/NativeFirebaseFirestoreWrapper.kt | 0 .../firestore/internal/NativeQueryWrapper.kt | 0 .../firestore/internal/NativeTransactionWrapper.kt | 0 .../firestore/internal/NativeWriteBatchWrapper.kt | 0 .../gitlive/firebase/firestore/internal/Source.kt | 0 .../firebase/firestore/internal/throwError.kt | 0 .../gitlive/firebase/firestore/ContextSwitchTest.kt | 0 .../kotlin/dev/gitlive/firebase/firestore/Ignore.kt | 0 .../dev/gitlive/firebase/firestore/firestore.kt | 0 firebase-functions/build.gradle.kts | 13 ++++++++++++- .../dev/gitlive/firebase/functions/functions.kt | 0 firebase-installations/build.gradle.kts | 13 ++++++++++++- .../gitlive/firebase/installations/installations.kt | 0 firebase-messaging/build.gradle.kts | 13 ++++++++++++- .../dev/gitlive/firebase/messaging/messaging.kt | 0 .../dev/gitlive/firebase/messaging/messaging.kt | 0 firebase-perf/build.gradle.kts | 10 +++++++++- .../dev/gitlive/firebase/perf/metrics/Trace.kt | 0 .../kotlin/dev/gitlive/firebase/perf/performance.kt | 0 .../kotlin/dev/gitlive/firebase/perf/performance.kt | 0 firebase-storage/build.gradle.kts | 13 ++++++++++++- .../kotlin/dev/gitlive/firebase/storage/storage.kt | 0 .../dev/gitlive/firebase/storage/storage.ios.kt | 0 .../kotlin/dev/gitlive/firebase/storage/storage.kt | 0 gradle/libs.versions.toml | 1 + test-utils/build.gradle.kts | 2 ++ 52 files changed, 120 insertions(+), 9 deletions(-) rename firebase-analytics/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/analytics/analytics.kt (100%) rename firebase-analytics/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/analytics/analytics.kt (100%) rename firebase-app/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/firebase.kt (100%) rename firebase-config/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig.kt (100%) rename firebase-config/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigValue.kt (100%) rename firebase-config/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/remoteconfig/NSDataExtension.kt (100%) rename firebase-config/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/remoteconfig/NSDataExtensionTest.kt (100%) rename firebase-config/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/remoteconfig/RemoteConfig.kt (100%) rename firebase-crashlytics/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt (100%) rename firebase-crashlytics/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/FieldValue.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/GeoPoint.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/Timestamp.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/_encoders.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/firestore.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/internal/NativeCollectionReferenceWrapper.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentReference.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentSnapshotWrapper.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/internal/NativeQueryWrapper.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/internal/NativeTransactionWrapper.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/internal/NativeWriteBatchWrapper.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/internal/Source.kt (100%) rename firebase-firestore/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/firestore/internal/throwError.kt (100%) rename firebase-firestore/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/firestore/ContextSwitchTest.kt (100%) rename firebase-firestore/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/firestore/Ignore.kt (100%) rename firebase-firestore/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/firestore/firestore.kt (100%) rename firebase-functions/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/functions/functions.kt (100%) rename firebase-installations/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/installations/installations.kt (100%) rename firebase-messaging/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/messaging/messaging.kt (100%) rename firebase-messaging/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/messaging/messaging.kt (100%) rename firebase-perf/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt (100%) rename firebase-perf/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/perf/performance.kt (100%) rename firebase-perf/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/perf/performance.kt (100%) rename firebase-storage/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/storage/storage.kt (100%) rename firebase-storage/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/storage/storage.ios.kt (100%) rename firebase-storage/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/storage/storage.kt (100%) diff --git a/firebase-analytics/build.gradle.kts b/firebase-analytics/build.gradle.kts index 11d6d2cf0..3b4308afe 100644 --- a/firebase-analytics/build.gradle.kts +++ b/firebase-analytics/build.gradle.kts @@ -81,8 +81,15 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() + macosArm64() + macosX64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() framework { baseName = "FirebaseAnalytics" } @@ -118,7 +125,11 @@ kotlin { this.apiVersion = libs.versions.settings.api.get() this.languageVersion = libs.versions.settings.language.get() progressiveMode = true - if (name.lowercase().contains("ios")) { + if (name.lowercase().contains("ios") + || name.lowercase().contains("apple") + || name.lowercase().contains("tvos") + || name.lowercase().contains("macos") + ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } } diff --git a/firebase-analytics/src/iosMain/kotlin/dev/gitlive/firebase/analytics/analytics.kt b/firebase-analytics/src/appleMain/kotlin/dev/gitlive/firebase/analytics/analytics.kt similarity index 100% rename from firebase-analytics/src/iosMain/kotlin/dev/gitlive/firebase/analytics/analytics.kt rename to firebase-analytics/src/appleMain/kotlin/dev/gitlive/firebase/analytics/analytics.kt diff --git a/firebase-analytics/src/iosTest/kotlin/dev/gitlive/firebase/analytics/analytics.kt b/firebase-analytics/src/appleTest/kotlin/dev/gitlive/firebase/analytics/analytics.kt similarity index 100% rename from firebase-analytics/src/iosTest/kotlin/dev/gitlive/firebase/analytics/analytics.kt rename to firebase-analytics/src/appleTest/kotlin/dev/gitlive/firebase/analytics/analytics.kt diff --git a/firebase-app/build.gradle.kts b/firebase-app/build.gradle.kts index ab0fbcf02..d430a3c92 100644 --- a/firebase-app/build.gradle.kts +++ b/firebase-app/build.gradle.kts @@ -85,10 +85,13 @@ kotlin { tvosArm64() tvosX64() tvosSimulatorArm64() + macosArm64() + macosX64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() framework { baseName = "FirebaseApp" } @@ -127,6 +130,7 @@ kotlin { if (name.lowercase().contains("ios") || name.lowercase().contains("apple") || name.lowercase().contains("tvos") + || name.lowercase().contains("macos") ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } diff --git a/firebase-app/src/iosTest/kotlin/dev/gitlive/firebase/firebase.kt b/firebase-app/src/appleTest/kotlin/dev/gitlive/firebase/firebase.kt similarity index 100% rename from firebase-app/src/iosTest/kotlin/dev/gitlive/firebase/firebase.kt rename to firebase-app/src/appleTest/kotlin/dev/gitlive/firebase/firebase.kt diff --git a/firebase-common-internal/build.gradle.kts b/firebase-common-internal/build.gradle.kts index a75b3652c..9ed6479f5 100644 --- a/firebase-common-internal/build.gradle.kts +++ b/firebase-common-internal/build.gradle.kts @@ -85,6 +85,8 @@ kotlin { tvosArm64() tvosX64() tvosSimulatorArm64() + macosArm64() + macosX64() } js(IR) { diff --git a/firebase-common/build.gradle.kts b/firebase-common/build.gradle.kts index df50722e7..ac473ecc7 100644 --- a/firebase-common/build.gradle.kts +++ b/firebase-common/build.gradle.kts @@ -84,6 +84,8 @@ kotlin { tvosArm64() tvosX64() tvosSimulatorArm64() + macosArm64() + macosX64() } js(IR) { diff --git a/firebase-config/build.gradle.kts b/firebase-config/build.gradle.kts index b47b8deb5..b743f021a 100644 --- a/firebase-config/build.gradle.kts +++ b/firebase-config/build.gradle.kts @@ -81,8 +81,15 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() + macosArm64() + macosX64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() framework { baseName = "FirebaseConfig" } @@ -112,7 +119,11 @@ kotlin { this.languageVersion = libs.versions.settings.language.get() progressiveMode = true optIn("kotlinx.coroutines.ExperimentalCoroutinesApi") - if (name.lowercase().contains("ios")) { + if (name.lowercase().contains("ios") + || name.lowercase().contains("apple") + || name.lowercase().contains("tvos") + || name.lowercase().contains("macos") + ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") optIn("kotlinx.cinterop.BetaInteropApi") } diff --git a/firebase-config/src/iosMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig.kt b/firebase-config/src/appleMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig.kt similarity index 100% rename from firebase-config/src/iosMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig.kt rename to firebase-config/src/appleMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig.kt diff --git a/firebase-config/src/iosMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigValue.kt b/firebase-config/src/appleMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigValue.kt similarity index 100% rename from firebase-config/src/iosMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigValue.kt rename to firebase-config/src/appleMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigValue.kt diff --git a/firebase-config/src/iosMain/kotlin/dev/gitlive/firebase/remoteconfig/NSDataExtension.kt b/firebase-config/src/appleMain/kotlin/dev/gitlive/firebase/remoteconfig/NSDataExtension.kt similarity index 100% rename from firebase-config/src/iosMain/kotlin/dev/gitlive/firebase/remoteconfig/NSDataExtension.kt rename to firebase-config/src/appleMain/kotlin/dev/gitlive/firebase/remoteconfig/NSDataExtension.kt diff --git a/firebase-config/src/iosTest/kotlin/dev/gitlive/firebase/remoteconfig/NSDataExtensionTest.kt b/firebase-config/src/appleTest/kotlin/dev/gitlive/firebase/remoteconfig/NSDataExtensionTest.kt similarity index 100% rename from firebase-config/src/iosTest/kotlin/dev/gitlive/firebase/remoteconfig/NSDataExtensionTest.kt rename to firebase-config/src/appleTest/kotlin/dev/gitlive/firebase/remoteconfig/NSDataExtensionTest.kt diff --git a/firebase-config/src/iosTest/kotlin/dev/gitlive/firebase/remoteconfig/RemoteConfig.kt b/firebase-config/src/appleTest/kotlin/dev/gitlive/firebase/remoteconfig/RemoteConfig.kt similarity index 100% rename from firebase-config/src/iosTest/kotlin/dev/gitlive/firebase/remoteconfig/RemoteConfig.kt rename to firebase-config/src/appleTest/kotlin/dev/gitlive/firebase/remoteconfig/RemoteConfig.kt diff --git a/firebase-crashlytics/build.gradle.kts b/firebase-crashlytics/build.gradle.kts index 514c1763b..74913d3eb 100644 --- a/firebase-crashlytics/build.gradle.kts +++ b/firebase-crashlytics/build.gradle.kts @@ -82,8 +82,15 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() + macosArm64() + macosX64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() framework { baseName = "FirebaseCrashlytics" } @@ -102,7 +109,11 @@ kotlin { this.languageVersion = libs.versions.settings.language.get() progressiveMode = true optIn("kotlinx.coroutines.ExperimentalCoroutinesApi") - if (name.lowercase().contains("ios")) { + if (name.lowercase().contains("ios") + || name.lowercase().contains("apple") + || name.lowercase().contains("tvos") + || name.lowercase().contains("macos") + ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } } diff --git a/firebase-crashlytics/src/iosMain/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt b/firebase-crashlytics/src/appleMain/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt similarity index 100% rename from firebase-crashlytics/src/iosMain/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt rename to firebase-crashlytics/src/appleMain/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt diff --git a/firebase-crashlytics/src/iosTest/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt b/firebase-crashlytics/src/appleTest/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt similarity index 100% rename from firebase-crashlytics/src/iosTest/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt rename to firebase-crashlytics/src/appleTest/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt diff --git a/firebase-database/build.gradle.kts b/firebase-database/build.gradle.kts index 6034ff8dd..58e344b10 100644 --- a/firebase-database/build.gradle.kts +++ b/firebase-database/build.gradle.kts @@ -86,9 +86,12 @@ kotlin { tvosArm64() tvosX64() tvosSimulatorArm64() + macosArm64() + macosX64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() framework { baseName = "FirebaseDatabase" } @@ -130,6 +133,7 @@ kotlin { if (name.lowercase().contains("ios") || name.lowercase().contains("apple") || name.lowercase().contains("tvos") + || name.lowercase().contains("macos") ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } diff --git a/firebase-firestore/build.gradle.kts b/firebase-firestore/build.gradle.kts index f57307d21..a4cd9e366 100644 --- a/firebase-firestore/build.gradle.kts +++ b/firebase-firestore/build.gradle.kts @@ -85,8 +85,15 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() + macosArm64() + macosX64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() framework { baseName = "FirebaseFirestore" } @@ -140,7 +147,11 @@ kotlin { optIn("kotlinx.coroutines.ExperimentalCoroutinesApi") optIn("kotlinx.serialization.InternalSerializationApi") optIn("kotlinx.serialization.ExperimentalSerializationApi") - if (name.lowercase().contains("ios")) { + if (name.lowercase().contains("ios") + || name.lowercase().contains("apple") + || name.lowercase().contains("tvos") + || name.lowercase().contains("macos") + ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") optIn("kotlinx.cinterop.BetaInteropApi") } diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/FieldValue.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/FieldValue.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/FieldValue.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/FieldValue.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/GeoPoint.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/GeoPoint.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/GeoPoint.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/GeoPoint.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/Timestamp.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/Timestamp.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/Timestamp.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/Timestamp.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/_encoders.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/_encoders.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/_encoders.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/_encoders.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeCollectionReferenceWrapper.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeCollectionReferenceWrapper.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeCollectionReferenceWrapper.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeCollectionReferenceWrapper.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentReference.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentReference.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentReference.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentReference.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentSnapshotWrapper.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentSnapshotWrapper.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentSnapshotWrapper.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeDocumentSnapshotWrapper.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeQueryWrapper.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeQueryWrapper.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeQueryWrapper.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeQueryWrapper.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeTransactionWrapper.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeTransactionWrapper.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeTransactionWrapper.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeTransactionWrapper.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeWriteBatchWrapper.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeWriteBatchWrapper.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeWriteBatchWrapper.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeWriteBatchWrapper.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/Source.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/Source.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/Source.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/Source.kt diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/throwError.kt b/firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/throwError.kt similarity index 100% rename from firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/throwError.kt rename to firebase-firestore/src/appleMain/kotlin/dev/gitlive/firebase/firestore/internal/throwError.kt diff --git a/firebase-firestore/src/iosTest/kotlin/dev/gitlive/firebase/firestore/ContextSwitchTest.kt b/firebase-firestore/src/appleTest/kotlin/dev/gitlive/firebase/firestore/ContextSwitchTest.kt similarity index 100% rename from firebase-firestore/src/iosTest/kotlin/dev/gitlive/firebase/firestore/ContextSwitchTest.kt rename to firebase-firestore/src/appleTest/kotlin/dev/gitlive/firebase/firestore/ContextSwitchTest.kt diff --git a/firebase-firestore/src/iosTest/kotlin/dev/gitlive/firebase/firestore/Ignore.kt b/firebase-firestore/src/appleTest/kotlin/dev/gitlive/firebase/firestore/Ignore.kt similarity index 100% rename from firebase-firestore/src/iosTest/kotlin/dev/gitlive/firebase/firestore/Ignore.kt rename to firebase-firestore/src/appleTest/kotlin/dev/gitlive/firebase/firestore/Ignore.kt diff --git a/firebase-firestore/src/iosTest/kotlin/dev/gitlive/firebase/firestore/firestore.kt b/firebase-firestore/src/appleTest/kotlin/dev/gitlive/firebase/firestore/firestore.kt similarity index 100% rename from firebase-firestore/src/iosTest/kotlin/dev/gitlive/firebase/firestore/firestore.kt rename to firebase-firestore/src/appleTest/kotlin/dev/gitlive/firebase/firestore/firestore.kt diff --git a/firebase-functions/build.gradle.kts b/firebase-functions/build.gradle.kts index 7a9144309..06bac5499 100644 --- a/firebase-functions/build.gradle.kts +++ b/firebase-functions/build.gradle.kts @@ -82,8 +82,15 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() + macosArm64() + macosX64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() framework { baseName = "FirebaseFunctions" } @@ -121,7 +128,11 @@ kotlin { progressiveMode = true optIn("kotlinx.coroutines.ExperimentalCoroutinesApi") optIn("kotlinx.serialization.InternalSerializationApi") - if (name.lowercase().contains("ios")) { + if (name.lowercase().contains("ios") + || name.lowercase().contains("apple") + || name.lowercase().contains("tvos") + || name.lowercase().contains("macos") + ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } } diff --git a/firebase-functions/src/iosMain/kotlin/dev/gitlive/firebase/functions/functions.kt b/firebase-functions/src/appleMain/kotlin/dev/gitlive/firebase/functions/functions.kt similarity index 100% rename from firebase-functions/src/iosMain/kotlin/dev/gitlive/firebase/functions/functions.kt rename to firebase-functions/src/appleMain/kotlin/dev/gitlive/firebase/functions/functions.kt diff --git a/firebase-installations/build.gradle.kts b/firebase-installations/build.gradle.kts index f4ccb0f18..ef326d15a 100644 --- a/firebase-installations/build.gradle.kts +++ b/firebase-installations/build.gradle.kts @@ -81,8 +81,15 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() + macosArm64() + macosX64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() framework { baseName = "FirebaseInstallations" } @@ -118,7 +125,11 @@ kotlin { this.apiVersion = libs.versions.settings.api.get() this.languageVersion = libs.versions.settings.language.get() progressiveMode = true - if (name.lowercase().contains("ios")) { + if (name.lowercase().contains("ios") + || name.lowercase().contains("apple") + || name.lowercase().contains("tvos") + || name.lowercase().contains("macos") + ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } } diff --git a/firebase-installations/src/iosMain/kotlin/dev/gitlive/firebase/installations/installations.kt b/firebase-installations/src/appleMain/kotlin/dev/gitlive/firebase/installations/installations.kt similarity index 100% rename from firebase-installations/src/iosMain/kotlin/dev/gitlive/firebase/installations/installations.kt rename to firebase-installations/src/appleMain/kotlin/dev/gitlive/firebase/installations/installations.kt diff --git a/firebase-messaging/build.gradle.kts b/firebase-messaging/build.gradle.kts index 54f578b86..8906d3c30 100644 --- a/firebase-messaging/build.gradle.kts +++ b/firebase-messaging/build.gradle.kts @@ -81,8 +81,15 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() + macosArm64() + macosX64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() framework { baseName = "FirebaseMessaging" } @@ -119,7 +126,11 @@ kotlin { this.languageVersion = libs.versions.settings.language.get() progressiveMode = true optIn("kotlinx.coroutines.ExperimentalCoroutinesApi") - if (name.lowercase().contains("ios")) { + if (name.lowercase().contains("ios") + || name.lowercase().contains("apple") + || name.lowercase().contains("tvos") + || name.lowercase().contains("macos") + ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") optIn("kotlinx.cinterop.BetaInteropApi") } diff --git a/firebase-messaging/src/iosMain/kotlin/dev/gitlive/firebase/messaging/messaging.kt b/firebase-messaging/src/appleMain/kotlin/dev/gitlive/firebase/messaging/messaging.kt similarity index 100% rename from firebase-messaging/src/iosMain/kotlin/dev/gitlive/firebase/messaging/messaging.kt rename to firebase-messaging/src/appleMain/kotlin/dev/gitlive/firebase/messaging/messaging.kt diff --git a/firebase-messaging/src/iosTest/kotlin/dev/gitlive/firebase/messaging/messaging.kt b/firebase-messaging/src/appleTest/kotlin/dev/gitlive/firebase/messaging/messaging.kt similarity index 100% rename from firebase-messaging/src/iosTest/kotlin/dev/gitlive/firebase/messaging/messaging.kt rename to firebase-messaging/src/appleTest/kotlin/dev/gitlive/firebase/messaging/messaging.kt diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index 05e72148c..d3247bcda 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -82,8 +82,13 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() + cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() framework { baseName = "FirebasePerformance" } @@ -113,7 +118,10 @@ kotlin { this.languageVersion = libs.versions.settings.language.get() progressiveMode = true optIn("kotlinx.coroutines.ExperimentalCoroutinesApi") - if (name.lowercase().contains("ios")) { + if (name.lowercase().contains("ios") + || name.lowercase().contains("apple") + || name.lowercase().contains("tvos") + ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } } diff --git a/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt b/firebase-perf/src/appleMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt similarity index 100% rename from firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt rename to firebase-perf/src/appleMain/kotlin/dev/gitlive/firebase/perf/metrics/Trace.kt diff --git a/firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/appleMain/kotlin/dev/gitlive/firebase/perf/performance.kt similarity index 100% rename from firebase-perf/src/iosMain/kotlin/dev/gitlive/firebase/perf/performance.kt rename to firebase-perf/src/appleMain/kotlin/dev/gitlive/firebase/perf/performance.kt diff --git a/firebase-perf/src/iosTest/kotlin/dev/gitlive/firebase/perf/performance.kt b/firebase-perf/src/appleTest/kotlin/dev/gitlive/firebase/perf/performance.kt similarity index 100% rename from firebase-perf/src/iosTest/kotlin/dev/gitlive/firebase/perf/performance.kt rename to firebase-perf/src/appleTest/kotlin/dev/gitlive/firebase/perf/performance.kt diff --git a/firebase-storage/build.gradle.kts b/firebase-storage/build.gradle.kts index d8d7c9688..9b6c7955a 100644 --- a/firebase-storage/build.gradle.kts +++ b/firebase-storage/build.gradle.kts @@ -81,8 +81,15 @@ kotlin { if (supportIosTarget) { iosArm64() iosSimulatorArm64() + tvosArm64() + tvosX64() + tvosSimulatorArm64() + macosArm64() + macosX64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() framework { baseName = "FirebaseStorage" } @@ -118,7 +125,11 @@ kotlin { this.apiVersion = libs.versions.settings.api.get() this.languageVersion = libs.versions.settings.language.get() progressiveMode = true - if (name.lowercase().contains("ios")) { + if (name.lowercase().contains("ios") + || name.lowercase().contains("apple") + || name.lowercase().contains("tvos") + || name.lowercase().contains("macos") + ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } } diff --git a/firebase-storage/src/iosMain/kotlin/dev/gitlive/firebase/storage/storage.kt b/firebase-storage/src/appleMain/kotlin/dev/gitlive/firebase/storage/storage.kt similarity index 100% rename from firebase-storage/src/iosMain/kotlin/dev/gitlive/firebase/storage/storage.kt rename to firebase-storage/src/appleMain/kotlin/dev/gitlive/firebase/storage/storage.kt diff --git a/firebase-storage/src/iosTest/kotlin/dev/gitlive/firebase/storage/storage.ios.kt b/firebase-storage/src/appleTest/kotlin/dev/gitlive/firebase/storage/storage.ios.kt similarity index 100% rename from firebase-storage/src/iosTest/kotlin/dev/gitlive/firebase/storage/storage.ios.kt rename to firebase-storage/src/appleTest/kotlin/dev/gitlive/firebase/storage/storage.ios.kt diff --git a/firebase-storage/src/iosTest/kotlin/dev/gitlive/firebase/storage/storage.kt b/firebase-storage/src/appleTest/kotlin/dev/gitlive/firebase/storage/storage.kt similarity index 100% rename from firebase-storage/src/iosTest/kotlin/dev/gitlive/firebase/storage/storage.kt rename to firebase-storage/src/appleTest/kotlin/dev/gitlive/firebase/storage/storage.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 83001f2cc..ba2821923 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,6 +19,7 @@ settings-language = "2.2" firebase-cocoapods = "11.8.0" ios-deploymentTarget = "13.0" tvos-deploymentTarget = "13.0" +macos-deploymentTarget = "10.15" test-logger-plugin = "4.0.0" dokka = "2.0.0" publish = "0.34.0" diff --git a/test-utils/build.gradle.kts b/test-utils/build.gradle.kts index fb01defbf..e8674b083 100644 --- a/test-utils/build.gradle.kts +++ b/test-utils/build.gradle.kts @@ -79,6 +79,8 @@ kotlin { tvosX64() tvosArm64() tvosSimulatorArm64() + macosArm64() + macosX64() } js(IR) { From 673901a512ded0ee80440d1ba9861996b7751e72 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 31 Aug 2025 17:09:35 +0100 Subject: [PATCH 03/29] Added iosX64 --- firebase-analytics/build.gradle.kts | 1 + firebase-app/build.gradle.kts | 1 + firebase-auth/build.gradle.kts | 1 + firebase-common-internal/build.gradle.kts | 1 + firebase-common/build.gradle.kts | 1 + firebase-config/build.gradle.kts | 1 + firebase-crashlytics/build.gradle.kts | 1 + firebase-database/build.gradle.kts | 1 + firebase-firestore/build.gradle.kts | 1 + firebase-functions/build.gradle.kts | 1 + firebase-installations/build.gradle.kts | 1 + firebase-messaging/build.gradle.kts | 1 + firebase-perf/build.gradle.kts | 1 + firebase-storage/build.gradle.kts | 1 + test-utils/build.gradle.kts | 1 + 15 files changed, 15 insertions(+) diff --git a/firebase-analytics/build.gradle.kts b/firebase-analytics/build.gradle.kts index 3b4308afe..855d8dec7 100644 --- a/firebase-analytics/build.gradle.kts +++ b/firebase-analytics/build.gradle.kts @@ -80,6 +80,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/firebase-app/build.gradle.kts b/firebase-app/build.gradle.kts index d430a3c92..87fad6c2b 100644 --- a/firebase-app/build.gradle.kts +++ b/firebase-app/build.gradle.kts @@ -81,6 +81,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/firebase-auth/build.gradle.kts b/firebase-auth/build.gradle.kts index ed1a7647e..bc88e7b08 100644 --- a/firebase-auth/build.gradle.kts +++ b/firebase-auth/build.gradle.kts @@ -81,6 +81,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64().enableKeychainForTests() iosSimulatorArm64().enableKeychainForTests() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() diff --git a/firebase-common-internal/build.gradle.kts b/firebase-common-internal/build.gradle.kts index 9ed6479f5..57edb8bc9 100644 --- a/firebase-common-internal/build.gradle.kts +++ b/firebase-common-internal/build.gradle.kts @@ -81,6 +81,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/firebase-common/build.gradle.kts b/firebase-common/build.gradle.kts index ac473ecc7..40b4a195f 100644 --- a/firebase-common/build.gradle.kts +++ b/firebase-common/build.gradle.kts @@ -80,6 +80,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/firebase-config/build.gradle.kts b/firebase-config/build.gradle.kts index b743f021a..b551adbd8 100644 --- a/firebase-config/build.gradle.kts +++ b/firebase-config/build.gradle.kts @@ -80,6 +80,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/firebase-crashlytics/build.gradle.kts b/firebase-crashlytics/build.gradle.kts index 74913d3eb..3f3a32f05 100644 --- a/firebase-crashlytics/build.gradle.kts +++ b/firebase-crashlytics/build.gradle.kts @@ -81,6 +81,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/firebase-database/build.gradle.kts b/firebase-database/build.gradle.kts index 58e344b10..4783db1e0 100644 --- a/firebase-database/build.gradle.kts +++ b/firebase-database/build.gradle.kts @@ -82,6 +82,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/firebase-firestore/build.gradle.kts b/firebase-firestore/build.gradle.kts index a4cd9e366..83b61c0f3 100644 --- a/firebase-firestore/build.gradle.kts +++ b/firebase-firestore/build.gradle.kts @@ -84,6 +84,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/firebase-functions/build.gradle.kts b/firebase-functions/build.gradle.kts index 06bac5499..912a67cc8 100644 --- a/firebase-functions/build.gradle.kts +++ b/firebase-functions/build.gradle.kts @@ -81,6 +81,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/firebase-installations/build.gradle.kts b/firebase-installations/build.gradle.kts index ef326d15a..4cf5c6602 100644 --- a/firebase-installations/build.gradle.kts +++ b/firebase-installations/build.gradle.kts @@ -80,6 +80,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/firebase-messaging/build.gradle.kts b/firebase-messaging/build.gradle.kts index 8906d3c30..b0c8427bc 100644 --- a/firebase-messaging/build.gradle.kts +++ b/firebase-messaging/build.gradle.kts @@ -80,6 +80,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index d3247bcda..485d46e5d 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -81,6 +81,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/firebase-storage/build.gradle.kts b/firebase-storage/build.gradle.kts index 9b6c7955a..0cba9f52f 100644 --- a/firebase-storage/build.gradle.kts +++ b/firebase-storage/build.gradle.kts @@ -80,6 +80,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosArm64() tvosX64() diff --git a/test-utils/build.gradle.kts b/test-utils/build.gradle.kts index e8674b083..ad549587c 100644 --- a/test-utils/build.gradle.kts +++ b/test-utils/build.gradle.kts @@ -75,6 +75,7 @@ kotlin { if (supportIosTarget) { iosArm64() + iosX64() iosSimulatorArm64() tvosX64() tvosArm64() From 6e03365dd69af87db06f11da19107cd0bec6a34b Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 31 Aug 2025 17:27:39 +0100 Subject: [PATCH 04/29] attempt to update github actions --- .github/workflows/pull_request.yml | 82 ++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index ac6af22a0..fb889e0bb 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -17,6 +17,8 @@ jobs: outputs: emulator_jobs_matrix: ${{ steps.dataStep.outputs.emulator_jobs_matrix }} ios_test_jobs_matrix: ${{ steps.dataStep.outputs.ios_test_jobs_matrix }} + macos_test_jobs_matrix: ${{ steps.dataStep.outputs.macos_test_jobs_matrix }} + tvos_test_jobs_matrix: ${{ steps.dataStep.outputs.tvos_test_jobs_matrix }} js_test_jobs_matrix: ${{ steps.dataStep.outputs.js_test_jobs_matrix }} jvm_test_jobs_matrix: ${{ steps.dataStep.outputs.jvm_test_jobs_matrix }} steps: @@ -34,6 +36,8 @@ jobs: echo " emulator_jobs_matrix=$(jq -c . < ./build/emulator_jobs_matrix.json) ios_test_jobs_matrix=$(jq -c . < ./build/ios_test_jobs_matrix.json) + macos_test_jobs_matrix=$(jq -c . < ./build/macos_test_jobs_matrix.json) + tvos_test_jobs_matrix=$(jq -c . < ./build/tvos_test_jobs_matrix.json) js_test_jobs_matrix=$(jq -c . < ./build/js_test_jobs_matrix.json) jvm_test_jobs_matrix=$(jq -c . < ./build/jvm_test_jobs_matrix.json) " >> $GITHUB_OUTPUT @@ -141,6 +145,84 @@ jobs: with: name: iOS ${{ env.ARCHIVE_KEY }} Firebase Debug Log path: "**/firebase-debug.log" + build-macos: + needs: jobMatrixSetup + runs-on: macos-latest + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.jobMatrixSetup.outputs.macos_test_jobs_matrix) }} + steps: + - uses: actions/checkout@v4 + - name: Cocoapods cache + uses: actions/cache@v4 + with: + path: | + ~/.cocoapods + ~/Library/Caches/CocoaPods + */build/cocoapods + */build/classes + key: cocoapods-cache-v2 + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable + - name: Setup test environment + uses: ./.github/actions/setup_test_action + - name: Set Artifact Name + run: | + echo "ARCHIVE_KEY=$(echo ${{ matrix.gradle_tasks }} | cut -d: -f2)" >> $GITHUB_ENV + - name: Run macOS Tests + run: ./gradlew ${{ matrix.gradle_tasks }} + - name: Upload macOS test artifact + uses: actions/upload-artifact@v4 + if: failure() + with: + name: macOS ${{ env.ARCHIVE_KEY }} Test Report HTML + path: "**/build/reports/tests/macosArm64Test/" + - name: Upload Firebase Debug Log + uses: actions/upload-artifact@v4 + if: failure() + with: + name: iOS ${{ env.ARCHIVE_KEY }} Firebase Debug Log + path: "**/firebase-debug.log" + build-tvos: + needs: jobMatrixSetup + runs-on: macos-latest + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.jobMatrixSetup.outputs.tvos_test_jobs_matrix) }} + steps: + - uses: actions/checkout@v4 + - name: Cocoapods cache + uses: actions/cache@v4 + with: + path: | + ~/.cocoapods + ~/Library/Caches/CocoaPods + */build/cocoapods + */build/classes + key: cocoapods-cache-v2 + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable + - name: Setup test environment + uses: ./.github/actions/setup_test_action + - name: Set Artifact Name + run: | + echo "ARCHIVE_KEY=$(echo ${{ matrix.gradle_tasks }} | cut -d: -f2)" >> $GITHUB_ENV + - name: Run tvOS Tests + run: ./gradlew ${{ matrix.gradle_tasks }} + - name: Upload tvOS test artifact + uses: actions/upload-artifact@v4 + if: failure() + with: + name: iOS ${{ env.ARCHIVE_KEY }} Test Report HTML + path: "**/build/reports/tests/tvosArm64Test/" + - name: Upload Firebase Debug Log + uses: actions/upload-artifact@v4 + if: failure() + with: + name: iOS ${{ env.ARCHIVE_KEY }} Firebase Debug Log + path: "**/firebase-debug.log" build-jvm: needs: jobMatrixSetup runs-on: ubuntu-latest From a98eaa98f430383e4d3da0629c66d3c776ce147c Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 31 Aug 2025 17:30:04 +0100 Subject: [PATCH 05/29] Added Apple target skip --- firebase-analytics/build.gradle.kts | 4 ++-- firebase-app/build.gradle.kts | 4 ++-- firebase-auth/build.gradle.kts | 6 +++--- firebase-common-internal/build.gradle.kts | 4 ++-- firebase-common/build.gradle.kts | 4 ++-- firebase-config/build.gradle.kts | 4 ++-- firebase-crashlytics/build.gradle.kts | 4 ++-- firebase-database/build.gradle.kts | 4 ++-- firebase-firestore/build.gradle.kts | 4 ++-- firebase-functions/build.gradle.kts | 4 ++-- firebase-installations/build.gradle.kts | 4 ++-- firebase-messaging/build.gradle.kts | 4 ++-- firebase-perf/build.gradle.kts | 4 ++-- firebase-storage/build.gradle.kts | 4 ++-- gradle.properties | 2 +- test-utils/build.gradle.kts | 4 ++-- 16 files changed, 32 insertions(+), 32 deletions(-) diff --git a/firebase-analytics/build.gradle.kts b/firebase-analytics/build.gradle.kts index 855d8dec7..b84187ae5 100644 --- a/firebase-analytics/build.gradle.kts +++ b/firebase-analytics/build.gradle.kts @@ -47,7 +47,7 @@ android { } } -val supportIosTarget = project.property("skipIosTarget") != "true" +val supportAppleTarget = project.property("skipAppleTargets") != "true" kotlin { explicitApi() @@ -78,7 +78,7 @@ kotlin { jvm() - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/firebase-app/build.gradle.kts b/firebase-app/build.gradle.kts index 87fad6c2b..64b078ea0 100644 --- a/firebase-app/build.gradle.kts +++ b/firebase-app/build.gradle.kts @@ -47,7 +47,7 @@ android { } } -val supportIosTarget = project.property("skipIosTarget") != "true" +val supportAppleTarget = project.property("skipAppleTargets") != "true" kotlin { explicitApi() @@ -79,7 +79,7 @@ kotlin { jvm() - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/firebase-auth/build.gradle.kts b/firebase-auth/build.gradle.kts index bc88e7b08..54856a02e 100644 --- a/firebase-auth/build.gradle.kts +++ b/firebase-auth/build.gradle.kts @@ -48,7 +48,7 @@ android { } } -val supportIosTarget = project.property("skipIosTarget") != "true" +val supportAppleTarget = project.property("skipAppleTargets") != "true" kotlin { explicitApi() @@ -79,7 +79,7 @@ kotlin { jvm() - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64().enableKeychainForTests() iosSimulatorArm64().enableKeychainForTests() @@ -167,7 +167,7 @@ if (project.property("firebase-auth.skipJsTests") == "true") { } } -if (supportIosTarget) { +if (supportAppleTarget) { tasks.create("launchIosSimulator") { commandLine("open", "-a", "Simulator") } diff --git a/firebase-common-internal/build.gradle.kts b/firebase-common-internal/build.gradle.kts index 57edb8bc9..8e6dd1eeb 100644 --- a/firebase-common-internal/build.gradle.kts +++ b/firebase-common-internal/build.gradle.kts @@ -77,9 +77,9 @@ kotlin { jvm() - val supportIosTarget = project.property("skipIosTarget") != "true" + val supportAppleTarget = project.property("skipAppleTargets") != "true" - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/firebase-common/build.gradle.kts b/firebase-common/build.gradle.kts index 40b4a195f..620dd97fd 100644 --- a/firebase-common/build.gradle.kts +++ b/firebase-common/build.gradle.kts @@ -76,9 +76,9 @@ kotlin { jvm() - val supportIosTarget = project.property("skipIosTarget") != "true" + val supportAppleTarget = project.property("skipAppleTargets") != "true" - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/firebase-config/build.gradle.kts b/firebase-config/build.gradle.kts index b551adbd8..400b0a32f 100644 --- a/firebase-config/build.gradle.kts +++ b/firebase-config/build.gradle.kts @@ -47,7 +47,7 @@ android { } } -val supportIosTarget = project.property("skipIosTarget") != "true" +val supportAppleTarget = project.property("skipAppleTargets") != "true" kotlin { explicitApi() @@ -78,7 +78,7 @@ kotlin { jvm() - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/firebase-crashlytics/build.gradle.kts b/firebase-crashlytics/build.gradle.kts index 3f3a32f05..232314991 100644 --- a/firebase-crashlytics/build.gradle.kts +++ b/firebase-crashlytics/build.gradle.kts @@ -48,7 +48,7 @@ android { } } -val supportIosTarget = project.property("skipIosTarget") != "true" +val supportAppleTarget = project.property("skipAppleTargets") != "true" kotlin { explicitApi() @@ -79,7 +79,7 @@ kotlin { // jvm() - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/firebase-database/build.gradle.kts b/firebase-database/build.gradle.kts index 4783db1e0..cf69e6022 100644 --- a/firebase-database/build.gradle.kts +++ b/firebase-database/build.gradle.kts @@ -48,7 +48,7 @@ android { } } -val supportIosTarget = project.property("skipIosTarget") != "true" +val supportAppleTarget = project.property("skipAppleTargets") != "true" kotlin { explicitApi() @@ -80,7 +80,7 @@ kotlin { jvm() - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/firebase-firestore/build.gradle.kts b/firebase-firestore/build.gradle.kts index 83b61c0f3..dc5204e7a 100644 --- a/firebase-firestore/build.gradle.kts +++ b/firebase-firestore/build.gradle.kts @@ -50,7 +50,7 @@ android { } } -val supportIosTarget = project.property("skipIosTarget") != "true" +val supportAppleTarget = project.property("skipAppleTargets") != "true" kotlin { explicitApi() @@ -82,7 +82,7 @@ kotlin { jvm() - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/firebase-functions/build.gradle.kts b/firebase-functions/build.gradle.kts index 912a67cc8..d22ad50ce 100644 --- a/firebase-functions/build.gradle.kts +++ b/firebase-functions/build.gradle.kts @@ -47,7 +47,7 @@ android { } } -val supportIosTarget = project.property("skipIosTarget") != "true" +val supportAppleTarget = project.property("skipAppleTargets") != "true" kotlin { explicitApi() @@ -79,7 +79,7 @@ kotlin { jvm() - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/firebase-installations/build.gradle.kts b/firebase-installations/build.gradle.kts index 4cf5c6602..ea6adcd22 100644 --- a/firebase-installations/build.gradle.kts +++ b/firebase-installations/build.gradle.kts @@ -47,7 +47,7 @@ android { } } -val supportIosTarget = project.property("skipIosTarget") != "true" +val supportAppleTarget = project.property("skipAppleTargets") != "true" kotlin { explicitApi() @@ -78,7 +78,7 @@ kotlin { jvm() - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/firebase-messaging/build.gradle.kts b/firebase-messaging/build.gradle.kts index b0c8427bc..aa32c51fd 100644 --- a/firebase-messaging/build.gradle.kts +++ b/firebase-messaging/build.gradle.kts @@ -47,7 +47,7 @@ android { } } -val supportIosTarget = project.property("skipIosTarget") != "true" +val supportAppleTarget = project.property("skipAppleTargets") != "true" kotlin { explicitApi() @@ -78,7 +78,7 @@ kotlin { jvm() - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index 485d46e5d..0f9b60b47 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -48,7 +48,7 @@ android { } } -val supportIosTarget = project.property("skipIosTarget") != "true" +val supportAppleTarget = project.property("skipAppleTargets") != "true" kotlin { explicitApi() @@ -79,7 +79,7 @@ kotlin { jvm() - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/firebase-storage/build.gradle.kts b/firebase-storage/build.gradle.kts index 0cba9f52f..85f6656fe 100644 --- a/firebase-storage/build.gradle.kts +++ b/firebase-storage/build.gradle.kts @@ -47,7 +47,7 @@ android { } } -val supportIosTarget = project.property("skipIosTarget") != "true" +val supportAppleTarget = project.property("skipAppleTargets") != "true" kotlin { explicitApi() @@ -78,7 +78,7 @@ kotlin { jvm() - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() diff --git a/gradle.properties b/gradle.properties index 597e763f9..9ffeb2a2b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,7 +19,7 @@ kotlin.mpp.enableCInteropCommonization=true kotlin.native.cacheKind=none # Set to true to skip tests and even compilation of the iOS target. -skipIosTarget=false +skipAppleTargets=false # Skip iOS Tests firebase-analytics.skipIosTests=true diff --git a/test-utils/build.gradle.kts b/test-utils/build.gradle.kts index ad549587c..be2c05ef5 100644 --- a/test-utils/build.gradle.kts +++ b/test-utils/build.gradle.kts @@ -71,9 +71,9 @@ kotlin { jvm() - val supportIosTarget = project.property("skipIosTarget") != "true" + val supportAppleTarget = project.property("skipAppleTargets") != "true" - if (supportIosTarget) { + if (supportAppleTarget) { iosArm64() iosX64() iosSimulatorArm64() From a03b31e522c85163a866316f53bb6dbcd486dad9 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 9 Sep 2025 20:23:38 +0100 Subject: [PATCH 06/29] Adjusted tvos and macos --- .github/workflows/pull_request.yml | 10 +++--- .../src/main/kotlin/EmulatorJobsMatrix.kt | 24 ++++++++++++++ gradle.properties | 32 +++++++++++++++++++ 3 files changed, 61 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index fb889e0bb..aea99e00a 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -147,7 +147,7 @@ jobs: path: "**/firebase-debug.log" build-macos: needs: jobMatrixSetup - runs-on: macos-latest + runs-on: macos-15 strategy: fail-fast: false matrix: ${{ fromJson(needs.jobMatrixSetup.outputs.macos_test_jobs_matrix) }} @@ -182,11 +182,11 @@ jobs: uses: actions/upload-artifact@v4 if: failure() with: - name: iOS ${{ env.ARCHIVE_KEY }} Firebase Debug Log + name: macOS ${{ env.ARCHIVE_KEY }} Firebase Debug Log path: "**/firebase-debug.log" build-tvos: needs: jobMatrixSetup - runs-on: macos-latest + runs-on: macos-15 strategy: fail-fast: false matrix: ${{ fromJson(needs.jobMatrixSetup.outputs.tvos_test_jobs_matrix) }} @@ -215,13 +215,13 @@ jobs: uses: actions/upload-artifact@v4 if: failure() with: - name: iOS ${{ env.ARCHIVE_KEY }} Test Report HTML + name: tvOS ${{ env.ARCHIVE_KEY }} Test Report HTML path: "**/build/reports/tests/tvosArm64Test/" - name: Upload Firebase Debug Log uses: actions/upload-artifact@v4 if: failure() with: - name: iOS ${{ env.ARCHIVE_KEY }} Firebase Debug Log + name: tvOS ${{ env.ARCHIVE_KEY }} Firebase Debug Log path: "**/firebase-debug.log" build-jvm: needs: jobMatrixSetup diff --git a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt index 13c9f64ec..9044838f0 100644 --- a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt +++ b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt @@ -16,6 +16,8 @@ class EmulatorJobsMatrix { mapOf( "emulator_jobs_matrix.json" to getEmulatorTaskList(rootProject = rootProject), "ios_test_jobs_matrix.json" to getIosTestTaskList(rootProject = rootProject), + "macos_test_jobs_matrix.json" to getMacosTestTaskList(rootProject = rootProject), + "tvos_test_jobs_matrix.json" to getTvosTestTaskList(rootProject = rootProject), "js_test_jobs_matrix.json" to getJsTestTaskList(rootProject = rootProject), "jvm_test_jobs_matrix.json" to getJvmTestTaskList(rootProject = rootProject) ) @@ -41,6 +43,28 @@ class EmulatorJobsMatrix { } }.map { listOf("cleanTest", it) } + fun getMacosTestTaskList(rootProject: Project): List> = + rootProject.subprojects.filter { subProject -> + subProject.name == "test-utils" || + (rootProject.property("${subProject.name}.skipMacosTests") == "true").not() + }.map { subProject -> + when (val osArch = System.getProperty("os.arch")) { + "arm64", "arm-v8", "aarch64" -> "${subProject.path}:macosArm64Test" + else -> throw Error("Unexpected System.getProperty(\"os.arch\") = $osArch") + } + }.map { listOf("cleanTest", it) } + + fun getTvosTestTaskList(rootProject: Project): List> = + rootProject.subprojects.filter { subProject -> + subProject.name == "test-utils" || + (rootProject.property("${subProject.name}.skipTvosTests") == "true").not() + }.map { subProject -> + when (val osArch = System.getProperty("os.arch")) { + "arm64", "arm-v8", "aarch64" -> "${subProject.path}:tvosSimulatorArm64Test" + else -> throw Error("Unexpected System.getProperty(\"os.arch\") = $osArch") + } + }.map { listOf("cleanTest", it) } + fun getJsTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> subProject.name == "test-utils" || diff --git a/gradle.properties b/gradle.properties index 9ffeb2a2b..2500d064f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -37,6 +37,38 @@ firebase-messaging.skipIosTests=false firebase-perf.skipIosTests=false firebase-storage.skipIosTests=true +# Skip Macos Tests +firebase-analytics.skipMacosTests=true +firebase-app.skipMacosTests=false +firebase-auth.skipMacosTests=false +firebase-common-internal.skipMacosTests=false +firebase-common.skipMacosTests=false +firebase-config.skipMacosTests=false +firebase-crashlytics.skipMacosTests=false +firebase-database.skipMacosTests=false +firebase-firestore.skipMacosTests=false +firebase-functions.skipMacosTests=false +firebase-installations.skipMacosTests=false +firebase-messaging.skipMacosTests=false +firebase-perf.skipMacosTests=false +firebase-storage.skipMacosTests=true + +# Skip Tvos Tests +firebase-analytics.skipTvosTests=true +firebase-app.skipTvosTests=false +firebase-auth.skipTvosTests=false +firebase-common-internal.skipTvosTests=false +firebase-common.skipTvosTests=false +firebase-config.skipTvosTests=false +firebase-crashlytics.skipTvosTests=false +firebase-database.skipTvosTests=false +firebase-firestore.skipTvosTests=false +firebase-functions.skipTvosTests=false +firebase-installations.skipTvosTests=false +firebase-messaging.skipTvosTests=false +firebase-perf.skipTvosTests=false +firebase-storage.skipTvosTests=true + # We can have the functionality to skip jvm tests, due to compatibility issues. firebase-analytics.skipJvmTests=true firebase-app.skipJvmTests=false From 807ad5c53557c149a293ddce7821ecd9b7152dc9 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 14 Sep 2025 14:59:53 +0100 Subject: [PATCH 07/29] Added missing target for macos and adjusted folder name --- .../kotlin/dev/gitlive/firebase/auth/auth.kt | 0 .../kotlin/dev/gitlive/firebase/auth/credentials.kt | 0 .../kotlin/dev/gitlive/firebase/auth/multifactor.kt | 0 .../kotlin/dev/gitlive/firebase/auth/user.kt | 0 .../kotlin/dev/gitlive/firebase/auth/auth.kt | 0 firebase-perf/build.gradle.kts | 2 ++ 6 files changed, 2 insertions(+) rename firebase-auth/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/auth/auth.kt (100%) rename firebase-auth/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/auth/credentials.kt (100%) rename firebase-auth/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/auth/multifactor.kt (100%) rename firebase-auth/src/{iosMain => appleMain}/kotlin/dev/gitlive/firebase/auth/user.kt (100%) rename firebase-auth/src/{iosTest => appleTest}/kotlin/dev/gitlive/firebase/auth/auth.kt (100%) diff --git a/firebase-auth/src/iosMain/kotlin/dev/gitlive/firebase/auth/auth.kt b/firebase-auth/src/appleMain/kotlin/dev/gitlive/firebase/auth/auth.kt similarity index 100% rename from firebase-auth/src/iosMain/kotlin/dev/gitlive/firebase/auth/auth.kt rename to firebase-auth/src/appleMain/kotlin/dev/gitlive/firebase/auth/auth.kt diff --git a/firebase-auth/src/iosMain/kotlin/dev/gitlive/firebase/auth/credentials.kt b/firebase-auth/src/appleMain/kotlin/dev/gitlive/firebase/auth/credentials.kt similarity index 100% rename from firebase-auth/src/iosMain/kotlin/dev/gitlive/firebase/auth/credentials.kt rename to firebase-auth/src/appleMain/kotlin/dev/gitlive/firebase/auth/credentials.kt diff --git a/firebase-auth/src/iosMain/kotlin/dev/gitlive/firebase/auth/multifactor.kt b/firebase-auth/src/appleMain/kotlin/dev/gitlive/firebase/auth/multifactor.kt similarity index 100% rename from firebase-auth/src/iosMain/kotlin/dev/gitlive/firebase/auth/multifactor.kt rename to firebase-auth/src/appleMain/kotlin/dev/gitlive/firebase/auth/multifactor.kt diff --git a/firebase-auth/src/iosMain/kotlin/dev/gitlive/firebase/auth/user.kt b/firebase-auth/src/appleMain/kotlin/dev/gitlive/firebase/auth/user.kt similarity index 100% rename from firebase-auth/src/iosMain/kotlin/dev/gitlive/firebase/auth/user.kt rename to firebase-auth/src/appleMain/kotlin/dev/gitlive/firebase/auth/user.kt diff --git a/firebase-auth/src/iosTest/kotlin/dev/gitlive/firebase/auth/auth.kt b/firebase-auth/src/appleTest/kotlin/dev/gitlive/firebase/auth/auth.kt similarity index 100% rename from firebase-auth/src/iosTest/kotlin/dev/gitlive/firebase/auth/auth.kt rename to firebase-auth/src/appleTest/kotlin/dev/gitlive/firebase/auth/auth.kt diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index 0f9b60b47..1d3b03b52 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -86,6 +86,8 @@ kotlin { tvosArm64() tvosX64() tvosSimulatorArm64() + macosArm64() + macosX64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() From e42bb96d57d2650fbb85bb05968b488a27af83e2 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 14 Sep 2025 15:40:15 +0100 Subject: [PATCH 08/29] Added skips --- firebase-analytics/build.gradle.kts | 12 ++++++++++++ firebase-app/build.gradle.kts | 12 ++++++++++++ firebase-auth/build.gradle.kts | 12 ++++++++++++ firebase-common-internal/build.gradle.kts | 12 ++++++++++++ firebase-common/build.gradle.kts | 12 ++++++++++++ firebase-config/build.gradle.kts | 12 ++++++++++++ firebase-crashlytics/build.gradle.kts | 12 ++++++++++++ firebase-database/build.gradle.kts | 12 ++++++++++++ firebase-firestore/build.gradle.kts | 12 ++++++++++++ firebase-functions/build.gradle.kts | 12 ++++++++++++ firebase-installations/build.gradle.kts | 12 ++++++++++++ firebase-messaging/build.gradle.kts | 12 ++++++++++++ firebase-perf/build.gradle.kts | 13 +++++++++++++ firebase-storage/build.gradle.kts | 12 ++++++++++++ 14 files changed, 169 insertions(+) diff --git a/firebase-analytics/build.gradle.kts b/firebase-analytics/build.gradle.kts index b84187ae5..3bdd711cb 100644 --- a/firebase-analytics/build.gradle.kts +++ b/firebase-analytics/build.gradle.kts @@ -163,6 +163,18 @@ if (project.property("firebase-analytics.skipIosTests") == "true") { } } +if (project.property("firebase-analytics.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-analytics.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-analytics.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } diff --git a/firebase-app/build.gradle.kts b/firebase-app/build.gradle.kts index 64b078ea0..fa2a371e6 100644 --- a/firebase-app/build.gradle.kts +++ b/firebase-app/build.gradle.kts @@ -170,6 +170,18 @@ if (project.property("firebase-app.skipIosTests") == "true") { } } +if (project.property("firebase-app.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-app.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-app.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { diff --git a/firebase-auth/build.gradle.kts b/firebase-auth/build.gradle.kts index 54856a02e..a4e591e89 100644 --- a/firebase-auth/build.gradle.kts +++ b/firebase-auth/build.gradle.kts @@ -155,6 +155,18 @@ if (project.property("firebase-auth.skipIosTests") == "true") { } } +if (project.property("firebase-auth.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-auth.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-auth.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } diff --git a/firebase-common-internal/build.gradle.kts b/firebase-common-internal/build.gradle.kts index 8e6dd1eeb..45fa6c6b4 100644 --- a/firebase-common-internal/build.gradle.kts +++ b/firebase-common-internal/build.gradle.kts @@ -164,6 +164,18 @@ if (project.property("firebase-common.skipIosTests") == "true") { } } +if (project.property("firebase-common.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-common.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-common.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } diff --git a/firebase-common/build.gradle.kts b/firebase-common/build.gradle.kts index 620dd97fd..7166dcfea 100644 --- a/firebase-common/build.gradle.kts +++ b/firebase-common/build.gradle.kts @@ -162,6 +162,18 @@ if (project.property("firebase-common.skipIosTests") == "true") { } } +if (project.property("firebase-common.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-common.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-common.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } diff --git a/firebase-config/build.gradle.kts b/firebase-config/build.gradle.kts index 400b0a32f..04953f0fa 100644 --- a/firebase-config/build.gradle.kts +++ b/firebase-config/build.gradle.kts @@ -163,6 +163,18 @@ if (project.property("firebase-config.skipIosTests") == "true") { } } +if (project.property("firebase-config.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-config.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-config.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } diff --git a/firebase-crashlytics/build.gradle.kts b/firebase-crashlytics/build.gradle.kts index 232314991..675d25912 100644 --- a/firebase-crashlytics/build.gradle.kts +++ b/firebase-crashlytics/build.gradle.kts @@ -150,6 +150,18 @@ if (project.property("firebase-crashlytics.skipIosTests") == "true") { } } +if (project.property("firebase-crashlytics.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-crashlytics.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-crashlytics.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } diff --git a/firebase-database/build.gradle.kts b/firebase-database/build.gradle.kts index cf69e6022..26e824559 100644 --- a/firebase-database/build.gradle.kts +++ b/firebase-database/build.gradle.kts @@ -176,6 +176,18 @@ if (project.property("firebase-database.skipIosTests") == "true") { } } +if (project.property("firebase-database.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-database.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-database.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } diff --git a/firebase-firestore/build.gradle.kts b/firebase-firestore/build.gradle.kts index dc5204e7a..7d09dc8fa 100644 --- a/firebase-firestore/build.gradle.kts +++ b/firebase-firestore/build.gradle.kts @@ -192,6 +192,18 @@ if (project.property("firebase-firestore.skipIosTests") == "true") { } } +if (project.property("firebase-firestore.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-firestore.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-firestore.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } diff --git a/firebase-functions/build.gradle.kts b/firebase-functions/build.gradle.kts index d22ad50ce..f33d9181b 100644 --- a/firebase-functions/build.gradle.kts +++ b/firebase-functions/build.gradle.kts @@ -171,6 +171,18 @@ if (project.property("firebase-functions.skipIosTests") == "true") { } } +if (project.property("firebase-functions.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-functions.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-functions.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } diff --git a/firebase-installations/build.gradle.kts b/firebase-installations/build.gradle.kts index ea6adcd22..b0ff65f9f 100644 --- a/firebase-installations/build.gradle.kts +++ b/firebase-installations/build.gradle.kts @@ -167,6 +167,18 @@ if (project.property("firebase-installations.skipIosTests") == "true") { } } +if (project.property("firebase-installations.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-installations.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-installations.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } diff --git a/firebase-messaging/build.gradle.kts b/firebase-messaging/build.gradle.kts index aa32c51fd..7ace765bd 100644 --- a/firebase-messaging/build.gradle.kts +++ b/firebase-messaging/build.gradle.kts @@ -165,6 +165,18 @@ if (project.property("firebase-messaging.skipIosTests") == "true") { } } +if (project.property("firebase-messaging.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-messaging.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-messaging.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index 1d3b03b52..bf2805f39 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -91,6 +91,7 @@ kotlin { cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() framework { baseName = "FirebasePerformance" @@ -161,6 +162,18 @@ if (project.property("firebase-perf.skipIosTests") == "true") { } } +if (project.property("firebase-perf.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-perf.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-perf.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } diff --git a/firebase-storage/build.gradle.kts b/firebase-storage/build.gradle.kts index 85f6656fe..b747a60c2 100644 --- a/firebase-storage/build.gradle.kts +++ b/firebase-storage/build.gradle.kts @@ -167,6 +167,18 @@ if (project.property("firebase-storage.skipIosTests") == "true") { } } +if (project.property("firebase-storage.skipMacosTests") == "true") { + tasks.forEach { + if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + +if (project.property("firebase-storage.skipTvosTests") == "true") { + tasks.forEach { + if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } + } +} + if (project.property("firebase-storage.skipJvmTests") == "true") { tasks.forEach { if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } From 69626e5efd8ba021472557adc4ebf19567a2bfe4 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 14 Sep 2025 15:48:20 +0100 Subject: [PATCH 09/29] Added missing macos check --- firebase-perf/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index bf2805f39..c47c07926 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -125,6 +125,7 @@ kotlin { if (name.lowercase().contains("ios") || name.lowercase().contains("apple") || name.lowercase().contains("tvos") + || name.lowercase().contains("macos") ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } From 905aca09fc17f2e8662d607e528466f10f17ff9f Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 14 Sep 2025 16:26:28 +0100 Subject: [PATCH 10/29] hardcoded 16.4 xcode --- .github/workflows/publish.yml | 4 ++-- .github/workflows/pull_request.yml | 6 +++--- .github/workflows/pull_request_target.yml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e7827f376..12c6adad0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -31,7 +31,7 @@ jobs: run: chmod +x gradlew - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: latest-stable + xcode-version: '16.4' - name: Publish Firebase Analytics run: ./gradlew :firebase-analytics:publish - name: Publish Firebase App @@ -74,7 +74,7 @@ jobs: run: chmod +x gradlew - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: latest-stable + xcode-version: '16.4' - name: Generate documentation run: ./gradlew dokkaHtmlMultiModule - name: Uploading build folder diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index aea99e00a..baac108f7 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -125,7 +125,7 @@ jobs: key: cocoapods-cache-v2 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: latest-stable + xcode-version: '16.4' - name: Setup test environment uses: ./.github/actions/setup_test_action - name: Set Artifact Name @@ -164,7 +164,7 @@ jobs: key: cocoapods-cache-v2 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: latest-stable + xcode-version: '16.4' - name: Setup test environment uses: ./.github/actions/setup_test_action - name: Set Artifact Name @@ -203,7 +203,7 @@ jobs: key: cocoapods-cache-v2 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: latest-stable + xcode-version: '16.4' - name: Setup test environment uses: ./.github/actions/setup_test_action - name: Set Artifact Name diff --git a/.github/workflows/pull_request_target.yml b/.github/workflows/pull_request_target.yml index 61bda52d4..acd499d69 100644 --- a/.github/workflows/pull_request_target.yml +++ b/.github/workflows/pull_request_target.yml @@ -32,7 +32,7 @@ jobs: key: cocoapods-cache-v2 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: latest-stable + xcode-version: '16.4' - name: Format Kotlin run: ./gradlew formatKotlin - name: Api File Update From 3b30f610f034d86edb3d5e8359e86099c71847c4 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 14 Sep 2025 17:47:06 +0100 Subject: [PATCH 11/29] Adjusted test matrix --- .../src/main/kotlin/EmulatorJobsMatrix.kt | 3 +++ firebase-perf/build.gradle.kts | 10 ---------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt index 9044838f0..fe907d1f6 100644 --- a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt +++ b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt @@ -46,6 +46,8 @@ class EmulatorJobsMatrix { fun getMacosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> subProject.name == "test-utils" || + subProject.name == "firebase-perf" || + subProject.name == "firebase-auth" || (rootProject.property("${subProject.name}.skipMacosTests") == "true").not() }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { @@ -57,6 +59,7 @@ class EmulatorJobsMatrix { fun getTvosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> subProject.name == "test-utils" || + subProject.name == "firebase-auth" || (rootProject.property("${subProject.name}.skipTvosTests") == "true").not() }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index c47c07926..fb6ee6642 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -86,12 +86,9 @@ kotlin { tvosArm64() tvosX64() tvosSimulatorArm64() - macosArm64() - macosX64() cocoapods { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() - osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() framework { baseName = "FirebasePerformance" @@ -125,7 +122,6 @@ kotlin { if (name.lowercase().contains("ios") || name.lowercase().contains("apple") || name.lowercase().contains("tvos") - || name.lowercase().contains("macos") ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } @@ -163,12 +159,6 @@ if (project.property("firebase-perf.skipIosTests") == "true") { } } -if (project.property("firebase-perf.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - if (project.property("firebase-perf.skipTvosTests") == "true") { tasks.forEach { if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } From cbe0a09925cd446798e901f4040302ccbbbea383 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 14 Sep 2025 19:48:39 +0100 Subject: [PATCH 12/29] Adjusted test matrix --- .../src/main/kotlin/EmulatorJobsMatrix.kt | 3 --- gradle.properties | 6 +++--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt index fe907d1f6..9044838f0 100644 --- a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt +++ b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt @@ -46,8 +46,6 @@ class EmulatorJobsMatrix { fun getMacosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> subProject.name == "test-utils" || - subProject.name == "firebase-perf" || - subProject.name == "firebase-auth" || (rootProject.property("${subProject.name}.skipMacosTests") == "true").not() }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { @@ -59,7 +57,6 @@ class EmulatorJobsMatrix { fun getTvosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> subProject.name == "test-utils" || - subProject.name == "firebase-auth" || (rootProject.property("${subProject.name}.skipTvosTests") == "true").not() }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { diff --git a/gradle.properties b/gradle.properties index 2500d064f..dd6b8c81b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -40,7 +40,7 @@ firebase-storage.skipIosTests=true # Skip Macos Tests firebase-analytics.skipMacosTests=true firebase-app.skipMacosTests=false -firebase-auth.skipMacosTests=false +firebase-auth.skipMacosTests=true firebase-common-internal.skipMacosTests=false firebase-common.skipMacosTests=false firebase-config.skipMacosTests=false @@ -50,13 +50,13 @@ firebase-firestore.skipMacosTests=false firebase-functions.skipMacosTests=false firebase-installations.skipMacosTests=false firebase-messaging.skipMacosTests=false -firebase-perf.skipMacosTests=false +firebase-perf.skipMacosTests=true firebase-storage.skipMacosTests=true # Skip Tvos Tests firebase-analytics.skipTvosTests=true firebase-app.skipTvosTests=false -firebase-auth.skipTvosTests=false +firebase-auth.skipTvosTests=true firebase-common-internal.skipTvosTests=false firebase-common.skipTvosTests=false firebase-config.skipTvosTests=false From 1bc76a4d1fa22f24427c4f54d48add563f00608a Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 21 Sep 2025 20:20:34 +0100 Subject: [PATCH 13/29] Added platform types to projects. --- buildSrc/build.gradle.kts | 7 + buildSrc/src/main/kotlin/Utils.kt | 22 +++ firebase-analytics/build.gradle.kts | 150 +++++++++---------- firebase-app/build.gradle.kts | 163 ++++++++++---------- firebase-auth/build.gradle.kts | 140 ++++++++---------- firebase-common-internal/build.gradle.kts | 159 +++++++++----------- firebase-common/build.gradle.kts | 160 +++++++++----------- firebase-config/build.gradle.kts | 146 +++++++++--------- firebase-crashlytics/build.gradle.kts | 124 +++++++--------- firebase-database/build.gradle.kts | 162 ++++++++++---------- firebase-firestore/build.gradle.kts | 172 +++++++++++----------- firebase-functions/build.gradle.kts | 156 ++++++++++---------- firebase-installations/build.gradle.kts | 156 ++++++++++---------- firebase-messaging/build.gradle.kts | 150 +++++++++---------- firebase-perf/build.gradle.kts | 138 ++++++++--------- firebase-storage/build.gradle.kts | 157 ++++++++++---------- gradle.properties | 97 ++---------- 17 files changed, 1054 insertions(+), 1205 deletions(-) create mode 100644 buildSrc/build.gradle.kts create mode 100644 buildSrc/src/main/kotlin/Utils.kt diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 000000000..cc02e636b --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + `kotlin-dsl` +} + +repositories { + gradlePluginPortal() +} diff --git a/buildSrc/src/main/kotlin/Utils.kt b/buildSrc/src/main/kotlin/Utils.kt new file mode 100644 index 000000000..64e7aa2ca --- /dev/null +++ b/buildSrc/src/main/kotlin/Utils.kt @@ -0,0 +1,22 @@ +package utils + +enum class TargetPlatform { + Android, Ios, Macos, Tvos, Jvm, Js +} + +fun String.toTargetPlatforms(): List = + split(",").map { + when (it.lowercase().trim()) { + "android" -> TargetPlatform.Android + "ios" -> TargetPlatform.Ios + "macos" -> TargetPlatform.Macos + "tvos" -> TargetPlatform.Tvos + "jvm" -> TargetPlatform.Jvm + "js" -> TargetPlatform.Js + else -> throw IllegalArgumentException("Unknown target platform: $it") + } + } + +fun List.supportsApple() = this.any { + it == TargetPlatform.Ios || it == TargetPlatform.Macos || it == TargetPlatform.Tvos +} diff --git a/firebase-analytics/build.gradle.kts b/firebase-analytics/build.gradle.kts index 3bdd711cb..9927eee74 100644 --- a/firebase-analytics/build.gradle.kts +++ b/firebase-analytics/build.gradle.kts @@ -1,15 +1,17 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.supportsApple +import utils.toTargetPlatforms /* * Copyright (c) 2023 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-analytics.version") as String +val supportedPlatforms = (project.property("firebase-analytics.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -19,36 +21,36 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.analytics" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.analytics" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + testOptions.configureTestOptions(project) + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } -val supportAppleTarget = project.property("skipAppleTargets") != "true" - kotlin { explicitApi() @@ -69,28 +71,44 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() + } + if (supportedPlatforms.supportsApple()) { cocoapods { - ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() - tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() - osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + } framework { baseName = "FirebaseAnalytics" } @@ -102,19 +120,21 @@ kotlin { } } - js(IR) { - useCommonJs() - nodejs { - testTask { - useKarma { - useChromeHeadless() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + nodejs { + testTask { + useKarma { + useChromeHeadless() + } } } - } - browser { - testTask { - useKarma { - useChromeHeadless() + browser { + testTask { + useKarma { + useChromeHeadless() + } } } } @@ -149,44 +169,16 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.analytics) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.analytics) + } } } } } -if (project.property("firebase-analytics.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-analytics.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-analytics.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-analytics.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-analytics.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - mavenPublishing { publishToMavenCentral(automaticRelease = true) signAllPublications() diff --git a/firebase-app/build.gradle.kts b/firebase-app/build.gradle.kts index fa2a371e6..aadde426c 100644 --- a/firebase-app/build.gradle.kts +++ b/firebase-app/build.gradle.kts @@ -1,15 +1,17 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.supportsApple +import utils.toTargetPlatforms /* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-app.version") as String +val supportedPlatforms = (project.property("firebase-app.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -19,36 +21,36 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + testOptions.configureTestOptions(project) + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } -val supportAppleTarget = project.property("skipAppleTargets") != "true" - kotlin { explicitApi() @@ -70,29 +72,44 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() - + } + if (supportedPlatforms.supportsApple()) { cocoapods { - ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() - tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() - osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + } framework { baseName = "FirebaseApp" } @@ -104,19 +121,21 @@ kotlin { } } - js(IR) { - useCommonJs() - nodejs { - testTask { - useKarma { - useChromeHeadless() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + nodejs { + testTask { + useKarma { + useChromeHeadless() + } } } - } - browser { - testTask { - useKarma { - useChromeHeadless() + browser { + testTask { + useKarma { + useChromeHeadless() + } } } } @@ -150,50 +169,18 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.common) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.common) + } } } - getByName("jvmMain") { - kotlin.srcDir("src/androidMain/kotlin") - } - } -} - -if (project.property("firebase-app.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { - it.enabled = false - } - } -} - -if (project.property("firebase-app.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-app.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-app.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { - it.enabled = false - } - } -} - -if (project.property("firebase-app.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { - it.enabled = false + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + getByName("jvmMain") { + kotlin.srcDir("src/androidMain/kotlin") + } } } } diff --git a/firebase-auth/build.gradle.kts b/firebase-auth/build.gradle.kts index a4e591e89..5afc9e2cb 100644 --- a/firebase-auth/build.gradle.kts +++ b/firebase-auth/build.gradle.kts @@ -1,17 +1,19 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithSimulatorTests import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeSimulatorTest -import kotlin.text.set +import utils.TargetPlatform +import utils.supportsApple +import utils.toTargetPlatforms /* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-auth.version") as String +val supportedPlatforms = (project.property("firebase-auth.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -21,35 +23,36 @@ plugins { alias(libs.plugins.publish) } -android { - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.auth" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.auth" - defaultConfig { - minSdk = 23 // Auth has a MinSDK of 23. See https://github.com/firebase/firebase-android-sdk/issues/5927#issuecomment-2093466572 - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } + defaultConfig { + minSdk = + 23 // Auth has a MinSDK of 23. See https://github.com/firebase/firebase-android-sdk/issues/5927#issuecomment-2093466572 + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + testOptions.configureTestOptions(project) + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } -val supportAppleTarget = project.property("skipAppleTargets") != "true" - kotlin { explicitApi() @@ -70,21 +73,30 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64().enableKeychainForTests() iosSimulatorArm64().enableKeychainForTests() + } + + if (supportedPlatforms.supportsApple()) { cocoapods { - ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + } framework { baseName = "FirebaseAuth" } @@ -96,19 +108,21 @@ kotlin { } } - js(IR) { - useCommonJs() - nodejs { - testTask { - useKarma { - useChromeHeadless() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + nodejs { + testTask { + useKarma { + useChromeHeadless() + } } } - } - browser { - testTask { - useKarma { - useChromeHeadless() + browser { + testTask { + useKarma { + useChromeHeadless() + } } } } @@ -141,45 +155,17 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.auth) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.auth) + } } } } } -if (project.property("firebase-auth.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-auth.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-auth.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-auth.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-auth.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (supportAppleTarget) { +if (supportedPlatforms.supportsApple()) { tasks.create("launchIosSimulator") { commandLine("open", "-a", "Simulator") } diff --git a/firebase-common-internal/build.gradle.kts b/firebase-common-internal/build.gradle.kts index 45fa6c6b4..a37f706c0 100644 --- a/firebase-common-internal/build.gradle.kts +++ b/firebase-common-internal/build.gradle.kts @@ -1,15 +1,16 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.toTargetPlatforms /* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-common-internal.version") as String +val supportedPlatforms = (project.property("firebase-common-internal.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -19,31 +20,33 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.common.internal" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.common.internal" + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) + testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } @@ -68,41 +71,49 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() - - val supportAppleTarget = project.property("skipAppleTargets") != "true" + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() } - js(IR) { - useCommonJs() - nodejs { - testTask { - useKarma { - useChromeHeadless() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + nodejs { + testTask { + useKarma { + useChromeHeadless() + } } } - } - browser { - testTask { - useKarma { - useChromeHeadless() + browser { + testTask { + useKarma { + useChromeHeadless() + } } } } @@ -133,61 +144,37 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.common) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.common) + } } } - getByName("jsMain") { - dependencies { - api(npm("firebase", "10.12.2")) + if (supportedPlatforms.contains(TargetPlatform.Js)) { + getByName("jsMain") { + dependencies { + api(npm("firebase", "10.12.2")) + } } } - getByName("jvmMain") { - kotlin.srcDir("src/androidMain/kotlin") - } + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + getByName("jvmMain") { + kotlin.srcDir("src/androidMain/kotlin") + } - getByName("jvmTest") { - dependencies { - implementation(kotlin("test-junit")) + getByName("jvmTest") { + dependencies { + implementation(kotlin("test-junit")) + } + kotlin.srcDir("src/androidAndroidTest/kotlin") } - kotlin.srcDir("src/androidAndroidTest/kotlin") } } } -if (project.property("firebase-common.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-common.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-common.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-common.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-common.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - mavenPublishing { publishToMavenCentral(automaticRelease = true) signAllPublications() diff --git a/firebase-common/build.gradle.kts b/firebase-common/build.gradle.kts index 7166dcfea..ea151f115 100644 --- a/firebase-common/build.gradle.kts +++ b/firebase-common/build.gradle.kts @@ -1,15 +1,16 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.toTargetPlatforms /* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-common.version") as String +val supportedPlatforms = (project.property("firebase-common.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -19,31 +20,33 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.common" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.common" + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) + testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } @@ -67,41 +70,49 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() - - val supportAppleTarget = project.property("skipAppleTargets") != "true" + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() } - js(IR) { - useCommonJs() - nodejs { - testTask { - useKarma { - useChromeHeadless() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + nodejs { + testTask { + useKarma { + useChromeHeadless() + } } } - } - browser { - testTask { - useKarma { - useChromeHeadless() + browser { + testTask { + useKarma { + useChromeHeadless() + } } } } @@ -131,61 +142,36 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.common) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.common) + } } } - getByName("jsMain") { - dependencies { - api(npm("firebase", "10.12.2")) + if (supportedPlatforms.contains(TargetPlatform.Js)) { + getByName("jsMain") { + dependencies { + api(npm("firebase", "10.12.2")) + } } } - getByName("jvmMain") { - kotlin.srcDir("src/androidMain/kotlin") - } + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + getByName("jvmMain") { + kotlin.srcDir("src/androidMain/kotlin") + } - getByName("jvmTest") { - dependencies { - implementation(kotlin("test-junit")) + getByName("jvmTest") { + dependencies { + implementation(kotlin("test-junit")) + } + kotlin.srcDir("src/androidAndroidTest/kotlin") } - kotlin.srcDir("src/androidAndroidTest/kotlin") } } } - -if (project.property("firebase-common.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-common.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-common.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-common.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-common.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - mavenPublishing { publishToMavenCentral(automaticRelease = true) signAllPublications() diff --git a/firebase-config/build.gradle.kts b/firebase-config/build.gradle.kts index 04953f0fa..00db5bf31 100644 --- a/firebase-config/build.gradle.kts +++ b/firebase-config/build.gradle.kts @@ -1,15 +1,17 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.supportsApple +import utils.toTargetPlatforms /* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-config.version") as String +val supportedPlatforms = (project.property("firebase-config.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -19,36 +21,36 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.remoteconfig" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.remoteconfig" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + testOptions.configureTestOptions(project) + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } -val supportAppleTarget = project.property("skipAppleTargets") != "true" - kotlin { explicitApi() @@ -69,28 +71,44 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() + } + if (supportedPlatforms.supportsApple()) { cocoapods { - ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() - tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() - osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + } framework { baseName = "FirebaseConfig" } @@ -102,12 +120,14 @@ kotlin { } } - js(IR) { - useCommonJs() - browser { - testTask { - useKarma { - useChromeHeadless() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + browser { + testTask { + useKarma { + useChromeHeadless() + } } } } @@ -145,48 +165,22 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.config) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.config) + } } } - getByName("jvmMain") { - kotlin.srcDir("src/androidMain/kotlin") + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + getByName("jvmMain") { + kotlin.srcDir("src/androidMain/kotlin") + } } } } -if (project.property("firebase-config.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-config.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-config.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-config.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-config.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - mavenPublishing { publishToMavenCentral(automaticRelease = true) signAllPublications() diff --git a/firebase-crashlytics/build.gradle.kts b/firebase-crashlytics/build.gradle.kts index 675d25912..2824c666a 100644 --- a/firebase-crashlytics/build.gradle.kts +++ b/firebase-crashlytics/build.gradle.kts @@ -1,15 +1,17 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.supportsApple +import utils.toTargetPlatforms /* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-crashlytics.version") as String +val supportedPlatforms = (project.property("firebase-crashlytics.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -19,37 +21,37 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.crashlytics" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.crashlytics" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - multiDexEnabled = true - } + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + multiDexEnabled = true + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + testOptions.configureTestOptions(project) + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } -val supportAppleTarget = project.property("skipAppleTargets") != "true" - kotlin { explicitApi() @@ -70,28 +72,42 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } // jvm() - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() + } + if (supportedPlatforms.supportsApple()) { cocoapods { - ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() - tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() - osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + } framework { baseName = "FirebaseCrashlytics" } @@ -133,9 +149,11 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.crashlytics) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.crashlytics) + } } } @@ -144,36 +162,6 @@ kotlin { } } -if (project.property("firebase-crashlytics.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-crashlytics.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-crashlytics.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-crashlytics.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-crashlytics.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - mavenPublishing { publishToMavenCentral(automaticRelease = true) signAllPublications() diff --git a/firebase-database/build.gradle.kts b/firebase-database/build.gradle.kts index 26e824559..3785b62f8 100644 --- a/firebase-database/build.gradle.kts +++ b/firebase-database/build.gradle.kts @@ -1,15 +1,17 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.supportsApple +import utils.toTargetPlatforms /* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-database.version") as String +val supportedPlatforms = (project.property("firebase-database.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -20,36 +22,36 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.database" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.database" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + testOptions.configureTestOptions(project) + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } -val supportAppleTarget = project.property("skipAppleTargets") != "true" - kotlin { explicitApi() @@ -71,28 +73,44 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() + } + if (supportedPlatforms.supportsApple()) { cocoapods { - ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() - tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() - osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + } framework { baseName = "FirebaseDatabase" } @@ -104,19 +122,21 @@ kotlin { } } - js(IR) { - useCommonJs() - nodejs { - testTask { - useKarma { - useChromeHeadless() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + nodejs { + testTask { + useKarma { + useChromeHeadless() + } } } - } - browser { - testTask { - useKarma { - useChromeHeadless() + browser { + testTask { + useKarma { + useChromeHeadless() + } } } } @@ -155,51 +175,27 @@ kotlin { } } - getByName("jvmMain") { - kotlin.srcDir("src/androidMain/kotlin") + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + getByName("jvmMain") { + kotlin.srcDir("src/androidMain/kotlin") + } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.database) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.database) + } } } - getByName("jvmMain") { - kotlin.srcDir("src/androidMain/kotlin") + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + getByName("jvmMain") { + kotlin.srcDir("src/androidMain/kotlin") + } } } } -if (project.property("firebase-database.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-database.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-database.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-database.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-database.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - mavenPublishing { publishToMavenCentral(automaticRelease = true) signAllPublications() diff --git a/firebase-firestore/build.gradle.kts b/firebase-firestore/build.gradle.kts index 7d09dc8fa..ef0817558 100644 --- a/firebase-firestore/build.gradle.kts +++ b/firebase-firestore/build.gradle.kts @@ -1,15 +1,17 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.supportsApple +import utils.toTargetPlatforms /* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-firestore.version") as String +val supportedPlatforms = (project.property("firebase-firestore.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -20,38 +22,38 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.firestore" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.firestore" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - multiDexEnabled = true - } + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + multiDexEnabled = true + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - resources.pickFirsts.add("androidsupportmultidexversion.txt") - } - lint { - abortOnError = false + testOptions.configureTestOptions(project) + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + resources.pickFirsts.add("androidsupportmultidexversion.txt") + } + lint { + abortOnError = false + } } } -val supportAppleTarget = project.property("skipAppleTargets") != "true" - kotlin { explicitApi() @@ -73,28 +75,44 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() + } + if (supportedPlatforms.supportsApple()) { cocoapods { - ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() - tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() - osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + } framework { baseName = "FirebaseFirestore" } @@ -113,26 +131,28 @@ kotlin { } } - js(IR) { - useCommonJs() - nodejs { - testTask { - useKarma { - useChromeHeadless() - // Explicitly specify Mocha here since it seems to be throwing random errors otherwise - useMocha { - timeout = "180s" + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + nodejs { + testTask { + useKarma { + useChromeHeadless() + // Explicitly specify Mocha here since it seems to be throwing random errors otherwise + useMocha { + timeout = "180s" + } } } } - } - browser { - testTask { - useKarma { - useChromeHeadless() - // Explicitly specify Mocha here since it seems to be throwing random errors otherwise - useMocha { - timeout = "180s" + browser { + testTask { + useKarma { + useChromeHeadless() + // Explicitly specify Mocha here since it seems to be throwing random errors otherwise + useMocha { + timeout = "180s" + } } } } @@ -173,49 +193,23 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.firestore) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.firestore) + } } } - getByName("jvmMain") { - kotlin.srcDir("src/androidMain/kotlin") + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + getByName("jvmMain") { + kotlin.srcDir("src/androidMain/kotlin") + } } } } -if (project.property("firebase-firestore.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-firestore.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-firestore.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-firestore.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-firestore.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - mavenPublishing { publishToMavenCentral(automaticRelease = true) signAllPublications() diff --git a/firebase-functions/build.gradle.kts b/firebase-functions/build.gradle.kts index f33d9181b..f8e60bc7a 100644 --- a/firebase-functions/build.gradle.kts +++ b/firebase-functions/build.gradle.kts @@ -1,15 +1,17 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.supportsApple +import utils.toTargetPlatforms /* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-functions.version") as String +val supportedPlatforms = (project.property("firebase-functions.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -19,36 +21,36 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.functions" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.functions" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + testOptions.configureTestOptions(project) + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } -val supportAppleTarget = project.property("skipAppleTargets") != "true" - kotlin { explicitApi() @@ -70,28 +72,44 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() + } + if (supportedPlatforms.supportsApple()) { cocoapods { - ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() - tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() - osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + } framework { baseName = "FirebaseFunctions" } @@ -103,19 +121,21 @@ kotlin { } } - js(IR) { - useCommonJs() - nodejs { - testTask { - useKarma { - useChromeHeadless() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + nodejs { + testTask { + useKarma { + useChromeHeadless() + } } } - } - browser { - testTask { - useKarma { - useChromeHeadless() + browser { + testTask { + useKarma { + useChromeHeadless() + } } } } @@ -153,48 +173,22 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.functions) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.functions) + } } } - getByName("jvmMain") { - kotlin.srcDir("src/androidMain/kotlin") + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + getByName("jvmMain") { + kotlin.srcDir("src/androidMain/kotlin") + } } } } -if (project.property("firebase-functions.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-functions.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-functions.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-functions.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-functions.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - mavenPublishing { publishToMavenCentral(automaticRelease = true) signAllPublications() diff --git a/firebase-installations/build.gradle.kts b/firebase-installations/build.gradle.kts index b0ff65f9f..08108c15b 100644 --- a/firebase-installations/build.gradle.kts +++ b/firebase-installations/build.gradle.kts @@ -1,15 +1,17 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.supportsApple +import utils.toTargetPlatforms /* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-installations.version") as String +val supportedPlatforms = (project.property("firebase-installations.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -19,36 +21,36 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.installations" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.installations" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + testOptions.configureTestOptions(project) + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } -val supportAppleTarget = project.property("skipAppleTargets") != "true" - kotlin { explicitApi() @@ -69,28 +71,44 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() + } + if (supportedPlatforms.supportsApple()) { cocoapods { - ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() - tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() - osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + } framework { baseName = "FirebaseInstallations" } @@ -102,19 +120,21 @@ kotlin { } } - js(IR) { - useCommonJs() - nodejs { - testTask { - useKarma { - useChromeHeadless() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + nodejs { + testTask { + useKarma { + useChromeHeadless() + } } } - } - browser { - testTask { - useKarma { - useChromeHeadless() + browser { + testTask { + useKarma { + useChromeHeadless() + } } } } @@ -149,48 +169,22 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.installations) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.installations) + } } } - getByName("jvmMain") { - kotlin.srcDir("src/androidMain/kotlin") + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + getByName("jvmMain") { + kotlin.srcDir("src/androidMain/kotlin") + } } } } -if (project.property("firebase-installations.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-installations.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-installations.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-installations.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-installations.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - mavenPublishing { publishToMavenCentral(automaticRelease = true) signAllPublications() diff --git a/firebase-messaging/build.gradle.kts b/firebase-messaging/build.gradle.kts index 7ace765bd..0fdcf6396 100644 --- a/firebase-messaging/build.gradle.kts +++ b/firebase-messaging/build.gradle.kts @@ -1,15 +1,17 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.supportsApple +import utils.toTargetPlatforms /* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-messaging.version") as String +val supportedPlatforms = (project.property("firebase-messaging.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -19,36 +21,36 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.messaging" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.messaging" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + testOptions.configureTestOptions(project) + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } -val supportAppleTarget = project.property("skipAppleTargets") != "true" - kotlin { explicitApi() @@ -69,28 +71,44 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() + } + if (supportedPlatforms.supportsApple()) { cocoapods { - ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() - tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() - osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + } framework { baseName = "FirebaseMessaging" } @@ -102,19 +120,21 @@ kotlin { } } - js(IR) { - useCommonJs() - nodejs { - testTask { - useKarma { - useChromeHeadless() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + nodejs { + testTask { + useKarma { + useChromeHeadless() + } } } - } - browser { - testTask { - useKarma { - useChromeHeadless() + browser { + testTask { + useKarma { + useChromeHeadless() + } } } } @@ -151,44 +171,16 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.messaging) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.messaging) + } } } } } -if (project.property("firebase-messaging.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-messaging.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-messaging.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-messaging.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-messaging.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - mavenPublishing { publishToMavenCentral(automaticRelease = true) signAllPublications() diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index fb6ee6642..68878e197 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -1,15 +1,17 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.supportsApple +import utils.toTargetPlatforms /* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-perf.version") as String +val supportedPlatforms = (project.property("firebase-perf.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -19,37 +21,37 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.perf" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.perf" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - multiDexEnabled = true - } + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + multiDexEnabled = true + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + testOptions.configureTestOptions(project) + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } -val supportAppleTarget = project.property("skipAppleTargets") != "true" - kotlin { explicitApi() @@ -70,26 +72,46 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } + } + + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() } - jvm() - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + macosArm64() + macosX64() + } + if (supportedPlatforms.supportsApple()) { cocoapods { - ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() - tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + } framework { baseName = "FirebasePerformance" } @@ -101,12 +123,14 @@ kotlin { } } - js(IR) { - useCommonJs() - browser { - testTask { - useKarma { - useChromeHeadless() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + browser { + testTask { + useKarma { + useChromeHeadless() + } } } } @@ -141,9 +165,11 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.perf) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.perf) + } } } @@ -153,30 +179,6 @@ kotlin { } } -if (project.property("firebase-perf.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-perf.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-perf.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-perf.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - mavenPublishing { publishToMavenCentral(automaticRelease = true) signAllPublications() diff --git a/firebase-storage/build.gradle.kts b/firebase-storage/build.gradle.kts index b747a60c2..0222d4e91 100644 --- a/firebase-storage/build.gradle.kts +++ b/firebase-storage/build.gradle.kts @@ -1,15 +1,17 @@ -import org.gradle.kotlin.dsl.distribution import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree -import kotlin.text.set +import utils.TargetPlatform +import utils.supportsApple +import utils.toTargetPlatforms /* * Copyright (c) 2023 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ version = project.property("firebase-storage.version") as String +val supportedPlatforms = (project.property("firebase-perf.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -19,36 +21,36 @@ plugins { alias(libs.plugins.publish) } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.storage" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.storage" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - testOptions.configureTestOptions(project) - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + testOptions.configureTestOptions(project) + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } -val supportAppleTarget = project.property("skipAppleTargets") != "true" - kotlin { explicitApi() @@ -69,28 +71,45 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosArm64() tvosX64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() + } + + if (supportedPlatforms.supportsApple()) { cocoapods { - ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() - tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() - osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + osx.deploymentTarget = libs.versions.macos.deploymentTarget.get() + } framework { baseName = "FirebaseStorage" } @@ -102,19 +121,21 @@ kotlin { } } - js(IR) { - useCommonJs() - nodejs { - testTask { - useKarma { - useChromeHeadless() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + nodejs { + testTask { + useKarma { + useChromeHeadless() + } } } - } - browser { - testTask { - useKarma { - useChromeHeadless() + browser { + testTask { + useKarma { + useChromeHeadless() + } } } } @@ -149,48 +170,22 @@ kotlin { } } - getByName("androidMain") { - dependencies { - api(libs.google.firebase.storage) + if (supportedPlatforms.contains(TargetPlatform.Android)) { + getByName("androidMain") { + dependencies { + api(libs.google.firebase.storage) + } } } - getByName("jvmMain") { - kotlin.srcDir("src/androidMain/kotlin") + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + getByName("jvmMain") { + kotlin.srcDir("src/androidMain/kotlin") + } } } } -if (project.property("firebase-storage.skipIosTests") == "true") { - tasks.forEach { - if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-storage.skipMacosTests") == "true") { - tasks.forEach { - if (it.name.contains("macos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-storage.skipTvosTests") == "true") { - tasks.forEach { - if (it.name.contains("tvos", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-storage.skipJvmTests") == "true") { - tasks.forEach { - if (it.name.contains("jvm", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - -if (project.property("firebase-storage.skipJsTests") == "true") { - tasks.forEach { - if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false } - } -} - mavenPublishing { publishToMavenCentral(automaticRelease = true) signAllPublications() diff --git a/gradle.properties b/gradle.properties index dd6b8c81b..3b4f6452b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,88 +18,21 @@ testOptions.unitTests.isIncludeAndroidResources=true kotlin.mpp.enableCInteropCommonization=true kotlin.native.cacheKind=none -# Set to true to skip tests and even compilation of the iOS target. -skipAppleTargets=false - -# Skip iOS Tests -firebase-analytics.skipIosTests=true -firebase-app.skipIosTests=false -firebase-auth.skipIosTests=false -firebase-common-internal.skipIosTests=false -firebase-common.skipIosTests=false -firebase-config.skipIosTests=false -firebase-crashlytics.skipIosTests=false -firebase-database.skipIosTests=false -firebase-firestore.skipIosTests=false -firebase-functions.skipIosTests=false -firebase-installations.skipIosTests=false -firebase-messaging.skipIosTests=false -firebase-perf.skipIosTests=false -firebase-storage.skipIosTests=true - -# Skip Macos Tests -firebase-analytics.skipMacosTests=true -firebase-app.skipMacosTests=false -firebase-auth.skipMacosTests=true -firebase-common-internal.skipMacosTests=false -firebase-common.skipMacosTests=false -firebase-config.skipMacosTests=false -firebase-crashlytics.skipMacosTests=false -firebase-database.skipMacosTests=false -firebase-firestore.skipMacosTests=false -firebase-functions.skipMacosTests=false -firebase-installations.skipMacosTests=false -firebase-messaging.skipMacosTests=false -firebase-perf.skipMacosTests=true -firebase-storage.skipMacosTests=true - -# Skip Tvos Tests -firebase-analytics.skipTvosTests=true -firebase-app.skipTvosTests=false -firebase-auth.skipTvosTests=true -firebase-common-internal.skipTvosTests=false -firebase-common.skipTvosTests=false -firebase-config.skipTvosTests=false -firebase-crashlytics.skipTvosTests=false -firebase-database.skipTvosTests=false -firebase-firestore.skipTvosTests=false -firebase-functions.skipTvosTests=false -firebase-installations.skipTvosTests=false -firebase-messaging.skipTvosTests=false -firebase-perf.skipTvosTests=false -firebase-storage.skipTvosTests=true - -# We can have the functionality to skip jvm tests, due to compatibility issues. -firebase-analytics.skipJvmTests=true -firebase-app.skipJvmTests=false -firebase-auth.skipJvmTests=true -firebase-common-internal.skipJvmTests=false -firebase-common.skipJvmTests=false -firebase-config.skipJvmTests=true -firebase-crashlytics.skipJvmTests=true -firebase-database.skipJvmTests=false -firebase-firestore.skipJvmTests=false -firebase-functions.skipJvmTests=false -firebase-installations.skipJvmTests=false -firebase-messaging.skipJvmTests=false -firebase-perf.skipJvmTests=true -firebase-storage.skipJvmTests=true - -# We can have the functionality to skip js tests, due to compatibility issues. -firebase-analytics.skipJsTests=false -firebase-app.skipJsTests=false -firebase-auth.skipJsTests=false -firebase-common-internal.skipJsTests=false -firebase-common.skipJsTests=false -firebase-config.skipJsTests=false -firebase-crashlytics.skipJsTests=true -firebase-database.skipJsTests=false -firebase-firestore.skipJsTests=false -firebase-functions.skipJsTests=false -firebase-installations.skipJsTests=false -firebase-messaging.skipJsTests=false -firebase-perf.skipJsTests=false -firebase-storage.skipJsTests=false +# supportedTargets=ios,macos,tvos,jvm,js,android +firebase-analytics.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-app.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-auth.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-common-internal.supportedTargets=ios,macos,tvos,jvm,js +firebase-common.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-config.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-crashlytics.supportedTargets=ios,macos,tvos,jvm,js +firebase-database.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-firestore.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-functions.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-installations.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-messaging.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-perf.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-storage.supportedTargets=ios,macos,tvos,jvm,js,android # Versions: firebase-analytics.version=2.3.0 From 7dfa2c58d7b3fc83d6a3912c7587962a1fac592b Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 21 Sep 2025 21:25:22 +0100 Subject: [PATCH 14/29] Added check on plugins --- firebase-analytics/build.gradle.kts | 8 ++++++-- firebase-app/build.gradle.kts | 8 ++++++-- firebase-auth/build.gradle.kts | 8 ++++++-- firebase-common-internal/build.gradle.kts | 4 +++- firebase-common/build.gradle.kts | 4 +++- firebase-config/build.gradle.kts | 8 ++++++-- firebase-crashlytics/build.gradle.kts | 8 ++++++-- firebase-database/build.gradle.kts | 8 ++++++-- firebase-firestore/build.gradle.kts | 8 ++++++-- firebase-functions/build.gradle.kts | 8 ++++++-- firebase-installations/build.gradle.kts | 8 ++++++-- firebase-messaging/build.gradle.kts | 8 ++++++-- firebase-perf/build.gradle.kts | 8 ++++++-- firebase-storage/build.gradle.kts | 8 ++++++-- test-utils/build.gradle.kts | 4 +++- 15 files changed, 81 insertions(+), 27 deletions(-) diff --git a/firebase-analytics/build.gradle.kts b/firebase-analytics/build.gradle.kts index 9927eee74..6653955ee 100644 --- a/firebase-analytics/build.gradle.kts +++ b/firebase-analytics/build.gradle.kts @@ -14,8 +14,12 @@ version = project.property("firebase-analytics.version") as String val supportedPlatforms = (project.property("firebase-analytics.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") - kotlin("native.cocoapods") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + kotlin("native.cocoapods") + } kotlin("multiplatform") id("testOptionsConvention") alias(libs.plugins.publish) diff --git a/firebase-app/build.gradle.kts b/firebase-app/build.gradle.kts index aadde426c..360040057 100644 --- a/firebase-app/build.gradle.kts +++ b/firebase-app/build.gradle.kts @@ -14,8 +14,12 @@ version = project.property("firebase-app.version") as String val supportedPlatforms = (project.property("firebase-app.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") - kotlin("native.cocoapods") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + kotlin("native.cocoapods") + } kotlin("multiplatform") id("testOptionsConvention") alias(libs.plugins.publish) diff --git a/firebase-auth/build.gradle.kts b/firebase-auth/build.gradle.kts index 5afc9e2cb..e145c2d0e 100644 --- a/firebase-auth/build.gradle.kts +++ b/firebase-auth/build.gradle.kts @@ -16,9 +16,13 @@ version = project.property("firebase-auth.version") as String val supportedPlatforms = (project.property("firebase-auth.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } kotlin("multiplatform") - kotlin("native.cocoapods") + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + kotlin("native.cocoapods") + } id("testOptionsConvention") alias(libs.plugins.publish) } diff --git a/firebase-common-internal/build.gradle.kts b/firebase-common-internal/build.gradle.kts index a37f706c0..aa926f5aa 100644 --- a/firebase-common-internal/build.gradle.kts +++ b/firebase-common-internal/build.gradle.kts @@ -13,7 +13,9 @@ version = project.property("firebase-common-internal.version") as String val supportedPlatforms = (project.property("firebase-common-internal.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } kotlin("multiplatform") kotlin("plugin.serialization") id("testOptionsConvention") diff --git a/firebase-common/build.gradle.kts b/firebase-common/build.gradle.kts index ea151f115..750a4a9cc 100644 --- a/firebase-common/build.gradle.kts +++ b/firebase-common/build.gradle.kts @@ -13,7 +13,9 @@ version = project.property("firebase-common.version") as String val supportedPlatforms = (project.property("firebase-common.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } kotlin("multiplatform") kotlin("plugin.serialization") id("testOptionsConvention") diff --git a/firebase-config/build.gradle.kts b/firebase-config/build.gradle.kts index 00db5bf31..a864e1e91 100644 --- a/firebase-config/build.gradle.kts +++ b/firebase-config/build.gradle.kts @@ -14,9 +14,13 @@ version = project.property("firebase-config.version") as String val supportedPlatforms = (project.property("firebase-config.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } kotlin("multiplatform") - kotlin("native.cocoapods") + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + kotlin("native.cocoapods") + } id("testOptionsConvention") alias(libs.plugins.publish) } diff --git a/firebase-crashlytics/build.gradle.kts b/firebase-crashlytics/build.gradle.kts index 2824c666a..93f41ff3e 100644 --- a/firebase-crashlytics/build.gradle.kts +++ b/firebase-crashlytics/build.gradle.kts @@ -14,9 +14,13 @@ version = project.property("firebase-crashlytics.version") as String val supportedPlatforms = (project.property("firebase-crashlytics.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } kotlin("multiplatform") - kotlin("native.cocoapods") + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + kotlin("native.cocoapods") + } id("testOptionsConvention") alias(libs.plugins.publish) } diff --git a/firebase-database/build.gradle.kts b/firebase-database/build.gradle.kts index 3785b62f8..49a70ecd6 100644 --- a/firebase-database/build.gradle.kts +++ b/firebase-database/build.gradle.kts @@ -14,8 +14,12 @@ version = project.property("firebase-database.version") as String val supportedPlatforms = (project.property("firebase-database.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") - kotlin("native.cocoapods") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + kotlin("native.cocoapods") + } kotlin("multiplatform") kotlin("plugin.serialization") id("testOptionsConvention") diff --git a/firebase-firestore/build.gradle.kts b/firebase-firestore/build.gradle.kts index ef0817558..7374c3942 100644 --- a/firebase-firestore/build.gradle.kts +++ b/firebase-firestore/build.gradle.kts @@ -14,8 +14,12 @@ version = project.property("firebase-firestore.version") as String val supportedPlatforms = (project.property("firebase-firestore.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") - kotlin("native.cocoapods") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + kotlin("native.cocoapods") + } kotlin("multiplatform") kotlin("plugin.serialization") id("testOptionsConvention") diff --git a/firebase-functions/build.gradle.kts b/firebase-functions/build.gradle.kts index f8e60bc7a..d4f0dee70 100644 --- a/firebase-functions/build.gradle.kts +++ b/firebase-functions/build.gradle.kts @@ -14,8 +14,12 @@ version = project.property("firebase-functions.version") as String val supportedPlatforms = (project.property("firebase-functions.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") - kotlin("native.cocoapods") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + kotlin("native.cocoapods") + } kotlin("multiplatform") id("testOptionsConvention") alias(libs.plugins.publish) diff --git a/firebase-installations/build.gradle.kts b/firebase-installations/build.gradle.kts index 08108c15b..0326fa9d2 100644 --- a/firebase-installations/build.gradle.kts +++ b/firebase-installations/build.gradle.kts @@ -14,8 +14,12 @@ version = project.property("firebase-installations.version") as String val supportedPlatforms = (project.property("firebase-installations.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") - kotlin("native.cocoapods") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + kotlin("native.cocoapods") + } kotlin("multiplatform") id("testOptionsConvention") alias(libs.plugins.publish) diff --git a/firebase-messaging/build.gradle.kts b/firebase-messaging/build.gradle.kts index 0fdcf6396..a727e1623 100644 --- a/firebase-messaging/build.gradle.kts +++ b/firebase-messaging/build.gradle.kts @@ -14,9 +14,13 @@ version = project.property("firebase-messaging.version") as String val supportedPlatforms = (project.property("firebase-messaging.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } kotlin("multiplatform") - kotlin("native.cocoapods") + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + kotlin("native.cocoapods") + } id("testOptionsConvention") alias(libs.plugins.publish) } diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index 68878e197..6725d0e3c 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -14,9 +14,13 @@ version = project.property("firebase-perf.version") as String val supportedPlatforms = (project.property("firebase-perf.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } kotlin("multiplatform") - kotlin("native.cocoapods") + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + kotlin("native.cocoapods") + } id("testOptionsConvention") alias(libs.plugins.publish) } diff --git a/firebase-storage/build.gradle.kts b/firebase-storage/build.gradle.kts index 0222d4e91..7f9684e3c 100644 --- a/firebase-storage/build.gradle.kts +++ b/firebase-storage/build.gradle.kts @@ -14,8 +14,12 @@ version = project.property("firebase-storage.version") as String val supportedPlatforms = (project.property("firebase-perf.supportedTargets") as String).toTargetPlatforms() plugins { - id("com.android.library") - kotlin("native.cocoapods") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } + if (supportedPlatforms.contains(TargetPlatform.Ios)) { + kotlin("native.cocoapods") + } kotlin("multiplatform") id("testOptionsConvention") alias(libs.plugins.publish) diff --git a/test-utils/build.gradle.kts b/test-utils/build.gradle.kts index be2c05ef5..8b9a93a0d 100644 --- a/test-utils/build.gradle.kts +++ b/test-utils/build.gradle.kts @@ -12,7 +12,9 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree version = "0.0.1" plugins { - id("com.android.library") + if (supportedPlatforms.contains(TargetPlatform.Android)) { + id("com.android.library") + } kotlin("multiplatform") kotlin("plugin.serialization") } From 8e0c72b3d61d6faf4e612df9be50753d2f2aa18b Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 21 Sep 2025 21:27:49 +0100 Subject: [PATCH 15/29] adjusted check on plugins --- firebase-analytics/build.gradle.kts | 8 ++------ firebase-app/build.gradle.kts | 8 ++------ firebase-auth/build.gradle.kts | 8 ++------ firebase-common-internal/build.gradle.kts | 4 +--- firebase-common/build.gradle.kts | 4 +--- firebase-config/build.gradle.kts | 8 ++------ firebase-crashlytics/build.gradle.kts | 8 ++------ firebase-database/build.gradle.kts | 8 ++------ firebase-firestore/build.gradle.kts | 8 ++------ firebase-functions/build.gradle.kts | 8 ++------ firebase-installations/build.gradle.kts | 8 ++------ firebase-messaging/build.gradle.kts | 8 ++------ firebase-perf/build.gradle.kts | 8 ++------ firebase-storage/build.gradle.kts | 8 ++------ test-utils/build.gradle.kts | 4 +--- 15 files changed, 27 insertions(+), 81 deletions(-) diff --git a/firebase-analytics/build.gradle.kts b/firebase-analytics/build.gradle.kts index 6653955ee..9927eee74 100644 --- a/firebase-analytics/build.gradle.kts +++ b/firebase-analytics/build.gradle.kts @@ -14,12 +14,8 @@ version = project.property("firebase-analytics.version") as String val supportedPlatforms = (project.property("firebase-analytics.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } - if (supportedPlatforms.contains(TargetPlatform.Ios)) { - kotlin("native.cocoapods") - } + id("com.android.library") + kotlin("native.cocoapods") kotlin("multiplatform") id("testOptionsConvention") alias(libs.plugins.publish) diff --git a/firebase-app/build.gradle.kts b/firebase-app/build.gradle.kts index 360040057..aadde426c 100644 --- a/firebase-app/build.gradle.kts +++ b/firebase-app/build.gradle.kts @@ -14,12 +14,8 @@ version = project.property("firebase-app.version") as String val supportedPlatforms = (project.property("firebase-app.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } - if (supportedPlatforms.contains(TargetPlatform.Ios)) { - kotlin("native.cocoapods") - } + id("com.android.library") + kotlin("native.cocoapods") kotlin("multiplatform") id("testOptionsConvention") alias(libs.plugins.publish) diff --git a/firebase-auth/build.gradle.kts b/firebase-auth/build.gradle.kts index e145c2d0e..5afc9e2cb 100644 --- a/firebase-auth/build.gradle.kts +++ b/firebase-auth/build.gradle.kts @@ -16,13 +16,9 @@ version = project.property("firebase-auth.version") as String val supportedPlatforms = (project.property("firebase-auth.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } + id("com.android.library") kotlin("multiplatform") - if (supportedPlatforms.contains(TargetPlatform.Ios)) { - kotlin("native.cocoapods") - } + kotlin("native.cocoapods") id("testOptionsConvention") alias(libs.plugins.publish) } diff --git a/firebase-common-internal/build.gradle.kts b/firebase-common-internal/build.gradle.kts index aa926f5aa..a37f706c0 100644 --- a/firebase-common-internal/build.gradle.kts +++ b/firebase-common-internal/build.gradle.kts @@ -13,9 +13,7 @@ version = project.property("firebase-common-internal.version") as String val supportedPlatforms = (project.property("firebase-common-internal.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } + id("com.android.library") kotlin("multiplatform") kotlin("plugin.serialization") id("testOptionsConvention") diff --git a/firebase-common/build.gradle.kts b/firebase-common/build.gradle.kts index 750a4a9cc..ea151f115 100644 --- a/firebase-common/build.gradle.kts +++ b/firebase-common/build.gradle.kts @@ -13,9 +13,7 @@ version = project.property("firebase-common.version") as String val supportedPlatforms = (project.property("firebase-common.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } + id("com.android.library") kotlin("multiplatform") kotlin("plugin.serialization") id("testOptionsConvention") diff --git a/firebase-config/build.gradle.kts b/firebase-config/build.gradle.kts index a864e1e91..00db5bf31 100644 --- a/firebase-config/build.gradle.kts +++ b/firebase-config/build.gradle.kts @@ -14,13 +14,9 @@ version = project.property("firebase-config.version") as String val supportedPlatforms = (project.property("firebase-config.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } + id("com.android.library") kotlin("multiplatform") - if (supportedPlatforms.contains(TargetPlatform.Ios)) { - kotlin("native.cocoapods") - } + kotlin("native.cocoapods") id("testOptionsConvention") alias(libs.plugins.publish) } diff --git a/firebase-crashlytics/build.gradle.kts b/firebase-crashlytics/build.gradle.kts index 93f41ff3e..2824c666a 100644 --- a/firebase-crashlytics/build.gradle.kts +++ b/firebase-crashlytics/build.gradle.kts @@ -14,13 +14,9 @@ version = project.property("firebase-crashlytics.version") as String val supportedPlatforms = (project.property("firebase-crashlytics.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } + id("com.android.library") kotlin("multiplatform") - if (supportedPlatforms.contains(TargetPlatform.Ios)) { - kotlin("native.cocoapods") - } + kotlin("native.cocoapods") id("testOptionsConvention") alias(libs.plugins.publish) } diff --git a/firebase-database/build.gradle.kts b/firebase-database/build.gradle.kts index 49a70ecd6..3785b62f8 100644 --- a/firebase-database/build.gradle.kts +++ b/firebase-database/build.gradle.kts @@ -14,12 +14,8 @@ version = project.property("firebase-database.version") as String val supportedPlatforms = (project.property("firebase-database.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } - if (supportedPlatforms.contains(TargetPlatform.Ios)) { - kotlin("native.cocoapods") - } + id("com.android.library") + kotlin("native.cocoapods") kotlin("multiplatform") kotlin("plugin.serialization") id("testOptionsConvention") diff --git a/firebase-firestore/build.gradle.kts b/firebase-firestore/build.gradle.kts index 7374c3942..ef0817558 100644 --- a/firebase-firestore/build.gradle.kts +++ b/firebase-firestore/build.gradle.kts @@ -14,12 +14,8 @@ version = project.property("firebase-firestore.version") as String val supportedPlatforms = (project.property("firebase-firestore.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } - if (supportedPlatforms.contains(TargetPlatform.Ios)) { - kotlin("native.cocoapods") - } + id("com.android.library") + kotlin("native.cocoapods") kotlin("multiplatform") kotlin("plugin.serialization") id("testOptionsConvention") diff --git a/firebase-functions/build.gradle.kts b/firebase-functions/build.gradle.kts index d4f0dee70..f8e60bc7a 100644 --- a/firebase-functions/build.gradle.kts +++ b/firebase-functions/build.gradle.kts @@ -14,12 +14,8 @@ version = project.property("firebase-functions.version") as String val supportedPlatforms = (project.property("firebase-functions.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } - if (supportedPlatforms.contains(TargetPlatform.Ios)) { - kotlin("native.cocoapods") - } + id("com.android.library") + kotlin("native.cocoapods") kotlin("multiplatform") id("testOptionsConvention") alias(libs.plugins.publish) diff --git a/firebase-installations/build.gradle.kts b/firebase-installations/build.gradle.kts index 0326fa9d2..08108c15b 100644 --- a/firebase-installations/build.gradle.kts +++ b/firebase-installations/build.gradle.kts @@ -14,12 +14,8 @@ version = project.property("firebase-installations.version") as String val supportedPlatforms = (project.property("firebase-installations.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } - if (supportedPlatforms.contains(TargetPlatform.Ios)) { - kotlin("native.cocoapods") - } + id("com.android.library") + kotlin("native.cocoapods") kotlin("multiplatform") id("testOptionsConvention") alias(libs.plugins.publish) diff --git a/firebase-messaging/build.gradle.kts b/firebase-messaging/build.gradle.kts index a727e1623..0fdcf6396 100644 --- a/firebase-messaging/build.gradle.kts +++ b/firebase-messaging/build.gradle.kts @@ -14,13 +14,9 @@ version = project.property("firebase-messaging.version") as String val supportedPlatforms = (project.property("firebase-messaging.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } + id("com.android.library") kotlin("multiplatform") - if (supportedPlatforms.contains(TargetPlatform.Ios)) { - kotlin("native.cocoapods") - } + kotlin("native.cocoapods") id("testOptionsConvention") alias(libs.plugins.publish) } diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index 6725d0e3c..68878e197 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -14,13 +14,9 @@ version = project.property("firebase-perf.version") as String val supportedPlatforms = (project.property("firebase-perf.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } + id("com.android.library") kotlin("multiplatform") - if (supportedPlatforms.contains(TargetPlatform.Ios)) { - kotlin("native.cocoapods") - } + kotlin("native.cocoapods") id("testOptionsConvention") alias(libs.plugins.publish) } diff --git a/firebase-storage/build.gradle.kts b/firebase-storage/build.gradle.kts index 7f9684e3c..0222d4e91 100644 --- a/firebase-storage/build.gradle.kts +++ b/firebase-storage/build.gradle.kts @@ -14,12 +14,8 @@ version = project.property("firebase-storage.version") as String val supportedPlatforms = (project.property("firebase-perf.supportedTargets") as String).toTargetPlatforms() plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } - if (supportedPlatforms.contains(TargetPlatform.Ios)) { - kotlin("native.cocoapods") - } + id("com.android.library") + kotlin("native.cocoapods") kotlin("multiplatform") id("testOptionsConvention") alias(libs.plugins.publish) diff --git a/test-utils/build.gradle.kts b/test-utils/build.gradle.kts index 8b9a93a0d..be2c05ef5 100644 --- a/test-utils/build.gradle.kts +++ b/test-utils/build.gradle.kts @@ -12,9 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree version = "0.0.1" plugins { - if (supportedPlatforms.contains(TargetPlatform.Android)) { - id("com.android.library") - } + id("com.android.library") kotlin("multiplatform") kotlin("plugin.serialization") } From 345dd08ab8a2eba29ac7267eb1d34c0df18142e8 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 21 Sep 2025 21:40:09 +0100 Subject: [PATCH 16/29] Added platform filtering for test utils --- firebase-perf/build.gradle.kts | 1 + gradle.properties | 5 +- test-utils/build.gradle.kts | 95 ++++++++++++++++++++-------------- 3 files changed, 60 insertions(+), 41 deletions(-) diff --git a/firebase-perf/build.gradle.kts b/firebase-perf/build.gradle.kts index 68878e197..a1ebb97bd 100644 --- a/firebase-perf/build.gradle.kts +++ b/firebase-perf/build.gradle.kts @@ -146,6 +146,7 @@ kotlin { if (name.lowercase().contains("ios") || name.lowercase().contains("apple") || name.lowercase().contains("tvos") + || name.lowercase().contains("macos") ) { optIn("kotlinx.cinterop.ExperimentalForeignApi") } diff --git a/gradle.properties b/gradle.properties index 3b4f6452b..ff4a40878 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,10 +22,10 @@ kotlin.native.cacheKind=none firebase-analytics.supportedTargets=ios,macos,tvos,jvm,js,android firebase-app.supportedTargets=ios,macos,tvos,jvm,js,android firebase-auth.supportedTargets=ios,macos,tvos,jvm,js,android -firebase-common-internal.supportedTargets=ios,macos,tvos,jvm,js +firebase-common-internal.supportedTargets=ios,macos,tvos,jvm,js,android firebase-common.supportedTargets=ios,macos,tvos,jvm,js,android firebase-config.supportedTargets=ios,macos,tvos,jvm,js,android -firebase-crashlytics.supportedTargets=ios,macos,tvos,jvm,js +firebase-crashlytics.supportedTargets=ios,macos,tvos,jvm,js,android firebase-database.supportedTargets=ios,macos,tvos,jvm,js,android firebase-firestore.supportedTargets=ios,macos,tvos,jvm,js,android firebase-functions.supportedTargets=ios,macos,tvos,jvm,js,android @@ -33,6 +33,7 @@ firebase-installations.supportedTargets=ios,macos,tvos,jvm,js,android firebase-messaging.supportedTargets=ios,macos,tvos,jvm,js,android firebase-perf.supportedTargets=ios,macos,tvos,jvm,js,android firebase-storage.supportedTargets=ios,macos,tvos,jvm,js,android +test-utils.supportedTargets=ios,macos,tvos,jvm,js,android # Versions: firebase-analytics.version=2.3.0 diff --git a/test-utils/build.gradle.kts b/test-utils/build.gradle.kts index be2c05ef5..df64ce14c 100644 --- a/test-utils/build.gradle.kts +++ b/test-utils/build.gradle.kts @@ -2,6 +2,8 @@ import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree +import utils.TargetPlatform +import utils.toTargetPlatforms /* * Copyright (c) 2023 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. @@ -10,6 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree // this project is used only in tests to share common code. publishing is disabled in the root build.gradle.kts version = "0.0.1" +val supportedPlatforms = (project.property("test-utils.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") @@ -17,30 +20,32 @@ plugins { kotlin("plugin.serialization") } -android { - val minSdkVersion: Int by project - val compileSdkVersion: Int by project +if (supportedPlatforms.contains(TargetPlatform.Android)) { + android { + val minSdkVersion: Int by project + val compileSdkVersion: Int by project - compileSdk = compileSdkVersion - namespace = "dev.gitlive.firebase.testUtils" + compileSdk = compileSdkVersion + namespace = "dev.gitlive.firebase.testUtils" - defaultConfig { - minSdk = minSdkVersion - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } + defaultConfig { + minSdk = minSdkVersion + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - packaging { - resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") - resources.pickFirsts.add("META-INF/AL2.0") - resources.pickFirsts.add("META-INF/LGPL2.1") - } - lint { - abortOnError = false + packaging { + resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module") + resources.pickFirsts.add("META-INF/AL2.0") + resources.pickFirsts.add("META-INF/LGPL2.1") + } + lint { + abortOnError = false + } } } @@ -62,32 +67,40 @@ kotlin { } } - @Suppress("OPT_IN_USAGE") - androidTarget { - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) - publishAllLibraryVariants() + if (supportedPlatforms.contains(TargetPlatform.Android)) { + @Suppress("OPT_IN_USAGE") + androidTarget { + instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + publishAllLibraryVariants() + } } - jvm() - - val supportAppleTarget = project.property("skipAppleTargets") != "true" + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + jvm() + } - if (supportAppleTarget) { + if (supportedPlatforms.contains(TargetPlatform.Ios)) { iosArm64() iosX64() iosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { tvosX64() tvosArm64() tvosSimulatorArm64() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { macosArm64() macosX64() } - js(IR) { - useCommonJs() - nodejs() - browser() + if (supportedPlatforms.contains(TargetPlatform.Js)) { + js(IR) { + useCommonJs() + nodejs() + browser() + } } sourceSets { @@ -111,15 +124,19 @@ kotlin { } } - getByName("jsMain") { - dependencies { - implementation(kotlin("test-js")) + if (supportedPlatforms.contains(TargetPlatform.Js)) { + getByName("jsMain") { + dependencies { + implementation(kotlin("test-js")) + } } } - getByName("jvmMain") { - dependencies { - api(libs.kotlinx.coroutines.swing) + if (supportedPlatforms.contains(TargetPlatform.Jvm)) { + getByName("jvmMain") { + dependencies { + api(libs.kotlinx.coroutines.swing) + } } } } From 9cc1ae47d23166b569bd2cc1207f868fff6cb537 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Mon, 22 Sep 2025 09:43:05 +0100 Subject: [PATCH 17/29] Added platform filtering for test utils --- .../src/main/kotlin/EmulatorJobsMatrix.kt | 15 +++++---------- gradle.properties | 2 +- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt index 9044838f0..123c87583 100644 --- a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt +++ b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt @@ -34,8 +34,7 @@ class EmulatorJobsMatrix { fun getIosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - subProject.name == "test-utils" || - (rootProject.property("${subProject.name}.skipIosTests") == "true").not() + subProject.name == "test-utils" }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { "arm64", "arm-v8", "aarch64" -> "${subProject.path}:iosSimulatorArm64Test" @@ -45,8 +44,7 @@ class EmulatorJobsMatrix { fun getMacosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - subProject.name == "test-utils" || - (rootProject.property("${subProject.name}.skipMacosTests") == "true").not() + subProject.name == "test-utils" }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { "arm64", "arm-v8", "aarch64" -> "${subProject.path}:macosArm64Test" @@ -56,8 +54,7 @@ class EmulatorJobsMatrix { fun getTvosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - subProject.name == "test-utils" || - (rootProject.property("${subProject.name}.skipTvosTests") == "true").not() + subProject.name == "test-utils" }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { "arm64", "arm-v8", "aarch64" -> "${subProject.path}:tvosSimulatorArm64Test" @@ -67,16 +64,14 @@ class EmulatorJobsMatrix { fun getJsTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - subProject.name == "test-utils" || - (rootProject.property("${subProject.name}.skipJsTests") == "true").not() + subProject.name == "test-utils" }.map { subProject -> "${subProject.path}:jsTest" }.map { listOf("cleanTest", it) } fun getJvmTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - subProject.name == "test-utils" || - (rootProject.property("${subProject.name}.skipJvmTests") == "true").not() + subProject.name == "test-utils" }.map { subProject -> "${subProject.path}:jvmTest" }.map { listOf("cleanTest", it) } diff --git a/gradle.properties b/gradle.properties index ff4a40878..f950ff5b0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -31,7 +31,7 @@ firebase-firestore.supportedTargets=ios,macos,tvos,jvm,js,android firebase-functions.supportedTargets=ios,macos,tvos,jvm,js,android firebase-installations.supportedTargets=ios,macos,tvos,jvm,js,android firebase-messaging.supportedTargets=ios,macos,tvos,jvm,js,android -firebase-perf.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-perf.supportedTargets=ios,tvos,jvm,js,android firebase-storage.supportedTargets=ios,macos,tvos,jvm,js,android test-utils.supportedTargets=ios,macos,tvos,jvm,js,android From 5c7cf419e80d145c669bc8c966f21d2971e5a5e7 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 23 Sep 2025 20:11:31 +0100 Subject: [PATCH 18/29] Adjusted emulator matrix. --- .../src/main/kotlin/EmulatorJobsMatrix.kt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt index 123c87583..3c067712a 100644 --- a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt +++ b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt @@ -1,5 +1,7 @@ import com.google.gson.GsonBuilder import org.gradle.api.Project +import utils.TargetPlatform +import utils.toTargetPlatforms import java.io.File import java.util.Properties @@ -34,7 +36,8 @@ class EmulatorJobsMatrix { fun getIosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - subProject.name == "test-utils" + (subProject.property("${subProject.name}.supportedTargets") as String).toTargetPlatforms().contains( + TargetPlatform.Ios) || subProject.name == "test-utils" }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { "arm64", "arm-v8", "aarch64" -> "${subProject.path}:iosSimulatorArm64Test" @@ -44,7 +47,8 @@ class EmulatorJobsMatrix { fun getMacosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - subProject.name == "test-utils" + (subProject.property("${subProject.name}.supportedTargets") as String).toTargetPlatforms().contains( + TargetPlatform.Macos) || subProject.name == "test-utils" }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { "arm64", "arm-v8", "aarch64" -> "${subProject.path}:macosArm64Test" @@ -54,7 +58,8 @@ class EmulatorJobsMatrix { fun getTvosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - subProject.name == "test-utils" + (subProject.property("${subProject.name}.supportedTargets") as String).toTargetPlatforms().contains( + TargetPlatform.Tvos) || subProject.name == "test-utils" }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { "arm64", "arm-v8", "aarch64" -> "${subProject.path}:tvosSimulatorArm64Test" @@ -64,14 +69,16 @@ class EmulatorJobsMatrix { fun getJsTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - subProject.name == "test-utils" + (subProject.property("${subProject.name}.supportedTargets") as String).toTargetPlatforms().contains( + TargetPlatform.Js) || subProject.name == "test-utils" }.map { subProject -> "${subProject.path}:jsTest" }.map { listOf("cleanTest", it) } fun getJvmTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - subProject.name == "test-utils" + (subProject.property("${subProject.name}.supportedTargets") as String).toTargetPlatforms().contains( + TargetPlatform.Jvm) || subProject.name == "test-utils" }.map { subProject -> "${subProject.path}:jvmTest" }.map { listOf("cleanTest", it) } From 485c7e1fa5cee14ec6674384360443c5631084a1 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 23 Sep 2025 20:18:48 +0100 Subject: [PATCH 19/29] Adjusted emulator matrix. --- .../src/main/kotlin/EmulatorJobsMatrix.kt | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt index 3c067712a..55204670f 100644 --- a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt +++ b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt @@ -1,7 +1,5 @@ import com.google.gson.GsonBuilder import org.gradle.api.Project -import utils.TargetPlatform -import utils.toTargetPlatforms import java.io.File import java.util.Properties @@ -127,3 +125,20 @@ fun getSdkmanagerFile(rootDir: File): File? = println("sdkmanagerFile: $sdkmanagerFile") sdkmanagerFile } + +enum class TargetPlatform { + Android, Ios, Macos, Tvos, Jvm, Js +} + +fun String.toTargetPlatforms(): List = + split(",").map { + when (it.lowercase().trim()) { + "android" -> TargetPlatform.Android + "ios" -> TargetPlatform.Ios + "macos" -> TargetPlatform.Macos + "tvos" -> TargetPlatform.Tvos + "jvm" -> TargetPlatform.Jvm + "js" -> TargetPlatform.Js + else -> throw IllegalArgumentException("Unknown target platform: $it") + } + } \ No newline at end of file From 7cbffda2b599846c64d8bd6f1ab71ca6e1831e3b Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Wed, 24 Sep 2025 09:01:57 +0100 Subject: [PATCH 20/29] Updated Xcode version to 16.2 in CI configuration files and adjusted supported targets for Firebase Crashlytics --- .github/workflows/publish.yml | 2 +- .github/workflows/pull_request.yml | 6 +++--- .github/workflows/pull_request_target.yml | 2 +- gradle.properties | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 12c6adad0..1d7f8e560 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -31,7 +31,7 @@ jobs: run: chmod +x gradlew - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16.4' + xcode-version: '16.2' - name: Publish Firebase Analytics run: ./gradlew :firebase-analytics:publish - name: Publish Firebase App diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index baac108f7..f2b1355fa 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -125,7 +125,7 @@ jobs: key: cocoapods-cache-v2 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16.4' + xcode-version: '16.2' - name: Setup test environment uses: ./.github/actions/setup_test_action - name: Set Artifact Name @@ -164,7 +164,7 @@ jobs: key: cocoapods-cache-v2 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16.4' + xcode-version: '16.2' - name: Setup test environment uses: ./.github/actions/setup_test_action - name: Set Artifact Name @@ -203,7 +203,7 @@ jobs: key: cocoapods-cache-v2 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16.4' + xcode-version: '16.2' - name: Setup test environment uses: ./.github/actions/setup_test_action - name: Set Artifact Name diff --git a/.github/workflows/pull_request_target.yml b/.github/workflows/pull_request_target.yml index acd499d69..bbe991ab9 100644 --- a/.github/workflows/pull_request_target.yml +++ b/.github/workflows/pull_request_target.yml @@ -32,7 +32,7 @@ jobs: key: cocoapods-cache-v2 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16.4' + xcode-version: '16.2' - name: Format Kotlin run: ./gradlew formatKotlin - name: Api File Update diff --git a/gradle.properties b/gradle.properties index f950ff5b0..7162605a6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,7 +25,7 @@ firebase-auth.supportedTargets=ios,macos,tvos,jvm,js,android firebase-common-internal.supportedTargets=ios,macos,tvos,jvm,js,android firebase-common.supportedTargets=ios,macos,tvos,jvm,js,android firebase-config.supportedTargets=ios,macos,tvos,jvm,js,android -firebase-crashlytics.supportedTargets=ios,macos,tvos,jvm,js,android +firebase-crashlytics.supportedTargets=ios,macos,tvos,jvm,android firebase-database.supportedTargets=ios,macos,tvos,jvm,js,android firebase-firestore.supportedTargets=ios,macos,tvos,jvm,js,android firebase-functions.supportedTargets=ios,macos,tvos,jvm,js,android From aa8b3aba650cbbfc6f18c6cf5592d1123a4b39ec Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sat, 27 Sep 2025 21:12:10 +0100 Subject: [PATCH 21/29] Added fix for firebase storage --- firebase-storage/build.gradle.kts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/firebase-storage/build.gradle.kts b/firebase-storage/build.gradle.kts index 0222d4e91..0e1c01d85 100644 --- a/firebase-storage/build.gradle.kts +++ b/firebase-storage/build.gradle.kts @@ -1,3 +1,4 @@ +import org.gradle.kotlin.dsl.kotlin import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions @@ -11,7 +12,7 @@ import utils.toTargetPlatforms */ version = project.property("firebase-storage.version") as String -val supportedPlatforms = (project.property("firebase-perf.supportedTargets") as String).toTargetPlatforms() +val supportedPlatforms = (project.property("firebase-storage.supportedTargets") as String).toTargetPlatforms() plugins { id("com.android.library") From c200a855724401bed389850d4e7dcdb88f39e775 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 28 Sep 2025 18:52:56 +0100 Subject: [PATCH 22/29] Adjusted to xcode 16.4 --- .github/workflows/publish.yml | 2 +- .github/workflows/pull_request.yml | 6 +++--- .github/workflows/pull_request_target.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1d7f8e560..12c6adad0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -31,7 +31,7 @@ jobs: run: chmod +x gradlew - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16.2' + xcode-version: '16.4' - name: Publish Firebase Analytics run: ./gradlew :firebase-analytics:publish - name: Publish Firebase App diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index f2b1355fa..baac108f7 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -125,7 +125,7 @@ jobs: key: cocoapods-cache-v2 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16.2' + xcode-version: '16.4' - name: Setup test environment uses: ./.github/actions/setup_test_action - name: Set Artifact Name @@ -164,7 +164,7 @@ jobs: key: cocoapods-cache-v2 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16.2' + xcode-version: '16.4' - name: Setup test environment uses: ./.github/actions/setup_test_action - name: Set Artifact Name @@ -203,7 +203,7 @@ jobs: key: cocoapods-cache-v2 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16.2' + xcode-version: '16.4' - name: Setup test environment uses: ./.github/actions/setup_test_action - name: Set Artifact Name diff --git a/.github/workflows/pull_request_target.yml b/.github/workflows/pull_request_target.yml index bbe991ab9..acd499d69 100644 --- a/.github/workflows/pull_request_target.yml +++ b/.github/workflows/pull_request_target.yml @@ -32,7 +32,7 @@ jobs: key: cocoapods-cache-v2 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16.2' + xcode-version: '16.4' - name: Format Kotlin run: ./gradlew formatKotlin - name: Api File Update From 2c6cb394f196f7fe04bf24dcb884262fa76fbc08 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 28 Sep 2025 19:50:10 +0100 Subject: [PATCH 23/29] bumped kotlin --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ba2821923..17650163d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,7 +8,7 @@ firebase-bom = "33.15.0" gitlive-firebase-java-sdk = "0.6.1" gson = "2.13.1" junit = "4.13.2" -kotlin = "2.2.0" +kotlin = "2.2.20" kotlinx-coroutines = "1.10.2" kotlinx-serialization = "1.9.0" kotlinx-binarycompatibilityvalidator = "0.18.1" From 820beb3a91ca6587fa319498c134ad175fb7f813 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 5 Oct 2025 18:05:04 +0100 Subject: [PATCH 24/29] Added ability to skip test targets --- .../src/main/kotlin/EmulatorJobsMatrix.kt | 10 +++++----- gradle.properties | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt index 55204670f..ee1362711 100644 --- a/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt +++ b/convention-plugin-test-option/src/main/kotlin/EmulatorJobsMatrix.kt @@ -34,7 +34,7 @@ class EmulatorJobsMatrix { fun getIosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - (subProject.property("${subProject.name}.supportedTargets") as String).toTargetPlatforms().contains( + (subProject.property("${subProject.name}.supportedTestTargets") as String).toTargetPlatforms().contains( TargetPlatform.Ios) || subProject.name == "test-utils" }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { @@ -45,7 +45,7 @@ class EmulatorJobsMatrix { fun getMacosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - (subProject.property("${subProject.name}.supportedTargets") as String).toTargetPlatforms().contains( + (subProject.property("${subProject.name}.supportedTestTargets") as String).toTargetPlatforms().contains( TargetPlatform.Macos) || subProject.name == "test-utils" }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { @@ -56,7 +56,7 @@ class EmulatorJobsMatrix { fun getTvosTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - (subProject.property("${subProject.name}.supportedTargets") as String).toTargetPlatforms().contains( + (subProject.property("${subProject.name}.supportedTestTargets") as String).toTargetPlatforms().contains( TargetPlatform.Tvos) || subProject.name == "test-utils" }.map { subProject -> when (val osArch = System.getProperty("os.arch")) { @@ -67,7 +67,7 @@ class EmulatorJobsMatrix { fun getJsTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - (subProject.property("${subProject.name}.supportedTargets") as String).toTargetPlatforms().contains( + (subProject.property("${subProject.name}.supportedTestTargets") as String).toTargetPlatforms().contains( TargetPlatform.Js) || subProject.name == "test-utils" }.map { subProject -> "${subProject.path}:jsTest" @@ -75,7 +75,7 @@ class EmulatorJobsMatrix { fun getJvmTestTaskList(rootProject: Project): List> = rootProject.subprojects.filter { subProject -> - (subProject.property("${subProject.name}.supportedTargets") as String).toTargetPlatforms().contains( + (subProject.property("${subProject.name}.supportedTestTargets") as String).toTargetPlatforms().contains( TargetPlatform.Jvm) || subProject.name == "test-utils" }.map { subProject -> "${subProject.path}:jvmTest" diff --git a/gradle.properties b/gradle.properties index 7162605a6..d8985fab9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -35,6 +35,23 @@ firebase-perf.supportedTargets=ios,tvos,jvm,js,android firebase-storage.supportedTargets=ios,macos,tvos,jvm,js,android test-utils.supportedTargets=ios,macos,tvos,jvm,js,android +# supportedTestTargets=ios,macos,tvos,jvm,js,android +firebase-analytics.supportedTestTargets=js,android +firebase-app.supportedTestTargets=ios,macos,tvos,jvm,js,android +firebase-auth.supportedTestTargets=ios,macos,tvos,js,android +firebase-common-internal.supportedTestTargets=ios,macos,tvos,jvm,js,android +firebase-common.supportedTestTargets=ios,macos,tvos,jvm,js,android +firebase-config.supportedTestTargets=ios,macos,tvos,js,android +firebase-crashlytics.supportedTestTargets=ios,macos,tvos,jvm,android +firebase-database.supportedTestTargets=ios,macos,tvos,jvm,js,android +firebase-firestore.supportedTestTargets=ios,macos,tvos,jvm,js,android +firebase-functions.supportedTestTargets=ios,macos,tvos,jvm,js,android +firebase-installations.supportedTestTargets=ios,macos,tvos,jvm,js,android +firebase-messaging.supportedTestTargets=ios,macos,tvos,jvm,js,android +firebase-perf.supportedTestTargets=ios,tvos,js,android +firebase-storage.supportedTestTargets=js,android +test-utils.supportedTestTargets=ios,macos,tvos,jvm,js,android + # Versions: firebase-analytics.version=2.3.0 firebase-app.version=2.3.0 From 482043526129209891b1f6cd8e098f7377613e44 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Sun, 5 Oct 2025 20:21:15 +0100 Subject: [PATCH 25/29] Adjusted tests. --- gradle.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index d8985fab9..7abe76b57 100644 --- a/gradle.properties +++ b/gradle.properties @@ -37,12 +37,12 @@ test-utils.supportedTargets=ios,macos,tvos,jvm,js,android # supportedTestTargets=ios,macos,tvos,jvm,js,android firebase-analytics.supportedTestTargets=js,android -firebase-app.supportedTestTargets=ios,macos,tvos,jvm,js,android -firebase-auth.supportedTestTargets=ios,macos,tvos,js,android +firebase-app.supportedTestTargets=ios,tvos,jvm,js,android +firebase-auth.supportedTestTargets=ios,js,android firebase-common-internal.supportedTestTargets=ios,macos,tvos,jvm,js,android firebase-common.supportedTestTargets=ios,macos,tvos,jvm,js,android firebase-config.supportedTestTargets=ios,macos,tvos,js,android -firebase-crashlytics.supportedTestTargets=ios,macos,tvos,jvm,android +firebase-crashlytics.supportedTestTargets=ios,macos,tvos,android firebase-database.supportedTestTargets=ios,macos,tvos,jvm,js,android firebase-firestore.supportedTestTargets=ios,macos,tvos,jvm,js,android firebase-functions.supportedTestTargets=ios,macos,tvos,jvm,js,android From 1540ac66f9d5fb7581ab470519987bc70887ad8c Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Mon, 6 Oct 2025 15:19:09 +0100 Subject: [PATCH 26/29] Update firebase-database/build.gradle.kts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- firebase-database/build.gradle.kts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/firebase-database/build.gradle.kts b/firebase-database/build.gradle.kts index 3785b62f8..4238182de 100644 --- a/firebase-database/build.gradle.kts +++ b/firebase-database/build.gradle.kts @@ -188,11 +188,6 @@ kotlin { } } } - if (supportedPlatforms.contains(TargetPlatform.Jvm)) { - getByName("jvmMain") { - kotlin.srcDir("src/androidMain/kotlin") - } - } } } From edd653bec49fb770c9ffa2a19d8cf4f265d88c57 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Mon, 6 Oct 2025 15:19:35 +0100 Subject: [PATCH 27/29] Update firebase-auth/build.gradle.kts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- firebase-auth/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firebase-auth/build.gradle.kts b/firebase-auth/build.gradle.kts index 5afc9e2cb..7fad311d7 100644 --- a/firebase-auth/build.gradle.kts +++ b/firebase-auth/build.gradle.kts @@ -87,7 +87,7 @@ kotlin { } if (supportedPlatforms.contains(TargetPlatform.Ios)) { - iosArm64() + iosArm64().enableKeychainForTests() iosX64().enableKeychainForTests() iosSimulatorArm64().enableKeychainForTests() } From 0b977957c77cf50f0781d1f3886420a4f14645b1 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 7 Oct 2025 11:25:49 +0100 Subject: [PATCH 28/29] Update firebase-auth/build.gradle.kts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- firebase-auth/build.gradle.kts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/firebase-auth/build.gradle.kts b/firebase-auth/build.gradle.kts index 7fad311d7..92cd7deaa 100644 --- a/firebase-auth/build.gradle.kts +++ b/firebase-auth/build.gradle.kts @@ -91,6 +91,15 @@ kotlin { iosX64().enableKeychainForTests() iosSimulatorArm64().enableKeychainForTests() } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvosArm64().enableKeychainForTests() + tvosX64().enableKeychainForTests() + tvosSimulatorArm64().enableKeychainForTests() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + macosArm64().enableKeychainForTests() + macosX64().enableKeychainForTests() + } if (supportedPlatforms.supportsApple()) { cocoapods { From 956a834bf27d8f90cbd95a7814c43bc41c32e8c8 Mon Sep 17 00:00:00 2001 From: Andrew Reed Date: Tue, 7 Oct 2025 11:26:03 +0100 Subject: [PATCH 29/29] Update firebase-auth/build.gradle.kts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- firebase-auth/build.gradle.kts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/firebase-auth/build.gradle.kts b/firebase-auth/build.gradle.kts index 92cd7deaa..48c0e5930 100644 --- a/firebase-auth/build.gradle.kts +++ b/firebase-auth/build.gradle.kts @@ -106,6 +106,12 @@ kotlin { if (supportedPlatforms.contains(TargetPlatform.Ios)) { ios.deploymentTarget = libs.versions.ios.deploymentTarget.get() } + if (supportedPlatforms.contains(TargetPlatform.Tvos)) { + tvos.deploymentTarget = libs.versions.tvos.deploymentTarget.get() + } + if (supportedPlatforms.contains(TargetPlatform.Macos)) { + macos.deploymentTarget = libs.versions.macos.deploymentTarget.get() + } framework { baseName = "FirebaseAuth" }