Пакет копирования iOS в XCFramework

#ios #kotlin #gradle #kotlin-multiplatform #xcframework

Вопрос:

В настоящее время я работаю над мультиплатформенным проектом Kotlin. Мы используем ресурсы Moko (https://github.com/icerockdev/moko-resources) для создания общего каталога ресурсов. Это отлично работает с фреймворками FAT, однако у нас есть требование использовать XCFrameworks. Я не очень хорошо знаком с iOS и ситуацией с фреймворком, так что простите мое невежество.

Прямо сейчас кажется, что что-то идет не так, когда мы создаем нашу XCFramework, так как запуск приложения показывает commainMain.MR недоступен, поэтому я думаю, что наш пакет копируется неправильно.

Вот наша задача по классификации fatFramework:

         register("buildFatFrameworkWithResources", TestFatFramework::class) {
        val debugMode = "DEBUG"
        val mode = System.getenv("CONFIGURATION") ?: debugMode
        destinationDir = buildDir.resolve("xcode-universal-framework")
        group = "Universal framework"
        description = "Builds a universal (fat) $mode framework"

        from(iosArm64Framework, iosX64Framework)
        dependsOn(iosArm64Framework.linkTask)
        dependsOn(iosX64Framework.linkTask)
    }
 

И наша задача XCFramework

         register("buildXcFrameworkWithResources") {
        dependsOn("deleteXcFramework")
        val mode = "DEBUG"
        val frameworks = arrayOf("iosArm64", "iosX64").map {
            kotlin.targets.getByName<KotlinNativeTarget>(it).binaries.getFramework(mode)
        }

        inputs.property("mode", mode)
        dependsOn(frameworks.map { it.linkTask })
        group = "Universal framework"
        description = "Builds a universal (xc) $mode framework"

        frameworks.first().outputFile.listFiles()
            ?.asSequence()
            ?.filter { it.name.contains(".bundle") }
            ?.forEach { bundleFile ->
                project.copy {
                    from(bundleFile)
                    into("$xcFrameworkPath/${bundleFile.name}")
                }
            }

        doLast {
            val buildArgs: () -> List<String> = {
                val arguments = mutableListOf("-create-xcframework")
                frameworks.forEach {
                    arguments  = "-framework"
                    arguments  = "${it.outputDirectory}/${project.name}.framework"
                }
                arguments  = "-output"
                arguments  = xcFrameworkPath
                arguments
            }

            exec {
                executable = "xcodebuild"
                args = buildArgs()
            }
        }
    }
 

Я не слишком уверен, что нужно изменить, чтобы это работало правильно.
Ценю любую помощь!