aidanvii
07/19/2024, 11:48 AMhafiz
07/19/2024, 10:44 PMF
07/20/2024, 10:16 AMaidanvii
07/23/2024, 9:06 AMkotlin.sourceSets
block:
val firebaseSdkDefinition: File = project.file("src/nativeInterop/cinterop/firebase.def")
val sourcePackagesRoot = File(project.projectDir.parentFile!!, "iosApp/DerivedData/iosApp/SourcePackages")
val firebaseIosSdkCheckoutsLocation = File(sourcePackagesRoot, "checkouts/firebase-ios-sdk")
val firebaseIosSdkArtifactsLocation = File(sourcePackagesRoot, "artifacts/firebase-ios-sdk")
val firebaseCoreHeader = File(firebaseIosSdkCheckoutsLocation, "FirebaseCore/Sources/Public/FirebaseCore/FirebaseCore.h")
val firebaseCrashlyticsHeader = File(firebaseIosSdkCheckoutsLocation, "Crashlytics/Crashlytics/Public/FirebaseCrashlytics/FirebaseCrashlytics.h")
val firebaseMessagingHeader = File(firebaseIosSdkCheckoutsLocation, "FirebaseMessaging/Sources/Public/FirebaseMessaging/FirebaseMessaging.h")
val firebaseAnalyticsHeaderArm64 = File(
firebaseIosSdkArtifactsLocation,
"FirebaseAnalytics/FirebaseAnalytics.xcframework/ios-arm64/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h"
)
val firebaseAnalyticsHeaderArm64x86Simulator = File(
firebaseIosSdkArtifactsLocation,
"FirebaseAnalytics/FirebaseAnalytics.xcframework/ios-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h"
)
targets
.filterIsInstance<KotlinNativeTarget>()
.filter { target: KotlinNativeTarget ->
target.konanTarget.family == Family.IOS
}
.forEach { target: KotlinNativeTarget ->
println("KotlinNativeTarget: ${target.name}")
target.compilations.getByName("main").cinterops.create("firebase") {
includeDirs(
firebaseCoreHeader.parentFile,
firebaseCrashlyticsHeader.parentFile,
firebaseMessagingHeader.parentFile,
when (val konanTarget: KonanTarget = target.konanTarget) {
KonanTarget.IOS_ARM64 -> firebaseAnalyticsHeaderArm64
KonanTarget.IOS_SIMULATOR_ARM64,
KonanTarget.IOS_X64 -> firebaseAnalyticsHeaderArm64x86Simulator
else -> TODO("Unsupported target: $konanTarget")
}.parentFile
)
definitionFile = firebaseSdkDefinition
compilerOpts("-DNS_FORMAT_ARGUMENT(A)=", "-D_Nullable_result=_Nullable")
}
}
The firebase.def file in the first line contains:
package = your.app.cinterop.generated.firebase
language = Objective-C
headers = FirebaseCore.h FirebaseCrashlytics.h FirebaseAnalytics.h FirebaseMessaging.h
aidanvii
07/23/2024, 9:08 AMaidanvii
07/23/2024, 9:12 AMaidanvii
07/23/2024, 9:17 AMaidanvii
07/23/2024, 9:53 AMCInteropSettings
DSL in the kotlin.sourceSets
block for iOS targets to generate the Kotlin Native bindings from the Firebase headersaidanvii
07/25/2024, 8:17 AM