Search code examples
androidioskotlin-multiplatformkotlin-multiplatform-mobile

What's the replacement of `./gradlew packForXcode` in latest KMM with Cocoapod?


I'm working as per the KMM tutorial in https://kotlinlang.org/docs/mobile/integrate-in-existing-app.htm. When I reach the the step ./gradlew packForXcode, it will fail with

* What went wrong:
Task 'packForXcode' not found in root project 'Simple Login'.

I suspect the reason is the old KMM has packForXcxode for it's iOS framework. enter image description here

However, the new one is now with Cocoapod instead enter image description here

What's the equivalent ./gradlew packForXcode for KMM with Cocoapod

(FYI, the KMM version I use is 0.2.5(202-1.5.10-834-IJ)-3 Plugin)


Solution

  • packForXcode has been removed from the latest plugin versions, you could use this snippet:

    val packForXcode by tasks.creating(Sync::class) {
        group = "build"
        val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
        val target = if(System.getenv("SDK_NAME").orEmpty().startsWith("macosx")) "macOS" else "ios"
        val framework =
            kotlin.targets.getByName<KotlinNativeTarget>(target).binaries.getFramework(mode)
        inputs.property("mode", mode)
        dependsOn(framework.linkTask)
        val targetDir = File(buildDir, "xcode-frameworks")
        from({ framework.outputDirectory })
        into(targetDir)
    }
    

    (It might need some tweaks for your project)