Search code examples
kotlin-multiplatformkotlin-native

Importing GoogleWebRTC pod fails: module 'GoogleWebRTC' not found


I am currently working on a Kotlin multiplatform and am trying to interface with the GoogleWebRTC pod.

The pod exists, I was able to import it in a separate project (without Kotlin multiplatform). I can see the .framework is created in my build directory, however when doing a gradle sync or building from Xcode, I get the following error:

Exception in thread "main" java.lang.Error: /var/folders/hv/9cx28nxx4gz9hj_m86bp5rx40000gn/T/tmp362966650322311128.m:1:9: fatal error: module 'GoogleWebRTC' not found
    at org.jetbrains.kotlin.native.interop.indexer.UtilsKt.ensureNoCompileErrors(Utils.kt:152)
    at org.jetbrains.kotlin.native.interop.indexer.ModuleSupportKt.getModulesASTFiles(ModuleSupport.kt:67)
    at org.jetbrains.kotlin.native.interop.indexer.ModuleSupportKt.getModulesInfo(ModuleSupport.kt:13)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.buildNativeLibrary(main.kt:499)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.processCLib(main.kt:264)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.interop(main.kt:72)
    at org.jetbrains.kotlin.cli.utilities.InteropCompilerKt.invokeInterop(InteropCompiler.kt:45)
    at org.jetbrains.kotlin.cli.utilities.MainKt.mainImpl(main.kt:19)
    at org.jetbrains.kotlin.cli.utilities.MainKt.main(main.kt:37)

Execution failed for task ':shared:cinteropGoogleWebRTCIosArm64'.
> Process 'command '/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

AFNetworking seems to work fine, but adding the WebRTC pod seems to break the project.

Am I missing a limitation of Kotlin multiplatform or something?

This is my build.gradle.kts:

    cocoapods {
        // Configure fields required by CocoaPods.
        summary = "Some description for a Kotlin/Native module"
        homepage = "Link to a Kotlin/Native module homepage"

        // You can change the name of the produced framework.
        // By default, it is the name of the Gradle project.
        frameworkName = "shared"
        ios.deploymentTarget = "10.0"

        pod("GoogleWebRTC", "~> 1.1")
        pod("AFNetworking", "~> 4.0.0")
    }

Solution

  • I was able to reproduce this issue but I didn't figure out the reason why.

    It seems a there's something wrong with GoogleWebRTC pod and the Kotlin-native/cocoapods integration.

    I've opened an issue here.

    We have an official help.

    It seems that the frameworks name is different from the pod name. So a possible solution could be that:

    kotlin {
        cocoapods {
            [...]
            pod("GoogleWebRTC", moduleName = "WebRTC", version = "~> 1.1")
            [...]
        }
        [...]
    }
    

    I tried it and it works.