我目前正在做一个Kotlin多平台项目。我们正在使用Moko (https://github.com/icerockdev/moko-resources)创建一个资源共享目录。这对于FAT框架非常有用,但是我们有一个使用XCFrameworks的需求。我不太熟悉iOS和框架环境,所以请原谅我的无知。
现在,当我们构建XCFramework时,似乎出现了一些问题,因为运行该应用程序显示commainMain.MR不可用,所以我认为我们的包没有被正确复制。
下面是我们的fatFramework Gradle任务:
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()
}
}
}我不太确定需要改变什么才能使它正常工作。感谢你的帮助!
发布于 2022-10-25 08:14:32
正如注释中所提到的@ArtyomDegtyarev,您可以通过在Xcode的构建阶段添加一个运行脚本来直接构建XCFramework。
为此:
选择第一个文件(YourApp.xcodeproj).的
$SRCROOT/./gradlew“-p”$SRCROOT/./“共享:copyFrameworkResourcesToApp\ -Pmoko.resources.PLATFORM_NAME=$PLATFORM_NAME \ -Pmoko.resources.CONFIGURATION=$CONFIGURATION \ -Pmoko.resources.CONTENTS_FOLDER_PATH=$CONTENTS_FOLDER_PATH\ -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \ -Pkotlin.native.cocoapods.configuration=$CONFIGURATION \ -Pkotlin.native.cocoapods.cflags="$OTHER_CFLAGS”\-Pkotlin.native。cocoapods.paths.headers="$HEADER_SEARCH_PATHS“\ -Pkotlin.native.cocoapods.paths.frameworks="$FRAMEWORK_SEARCH_PATHS"
现在构建和运行,您应该能够访问您的共享资源。
https://stackoverflow.com/questions/66739111
复制相似问题