#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()
}
}
}
Я не слишком уверен, что нужно изменить, чтобы это работало правильно.
Ценю любую помощь!