我创建了一个 KMM 项目,以及一个 Xcode 项目,其构建阶段调用
./gradlew embedAndSignAppleFrameworkForXcode
。运行成功,但是生成的是.framework,而不是.xcframework;对于现代 Xcode,我们确实需要后者。
我错过了什么吗?我读到现代版本的 kotlin 可以直接生成 xcframework,但我不确定如何生成。有为此的 gradle 任务吗?
非常感谢:)
根据 Kdoctor 的说法,我有: Xcode 14.1 安卓工作室2021.3 Kotlin 插件:213-1.7.20 Kotlin MM 插件:0.5.1(213)-60
您应该声明您的XCFrameworks,然后它会为您注册三个任务。
assembleXCFramework
、assembleDebugXCFramework
和assembleReleaseXCFramework
。
这是 build.gradle 的示例:
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework
plugins {
kotlin("multiplatform")
}
kotlin {
val xcf = XCFramework()
val iosTargets = listOf(iosX64(), iosArm64(), iosSimulatorArm64())
iosTargets.forEach {
it.binaries.framework {
baseName = "shared"
xcf.add(this)
}
}
}
有关更多信息,请访问 kotlin 文档。
我不记得第一次发布这个问题时这个解决方案是否是一个选项,但我最近遇到了同样的问题,除了其他答案中的手动方式之外,还找到了另一个解决方案。
创建共享模块时,对话框会提供一个选项来选择iOS框架分发方法。它默认为
Regular framework
,我见过的所有多平台模块教程都使用这个,所以我暂时没有找到其他选项。
如果您在此处选择 XCFramework,生成的模块将自动在
assembleXCFramework
文件夹中提供 Tasks/build
gradle 任务。
执行该命令将为您生成 XCFramework,并且日志会将您指向目标路径。
它仍然有
embedAndSignAppleFrameworkForXcode
任务,尽管我不知道它是否会产生与为模块选择“常规框架”时不同的东西。
注意:再次执行
assembleXCFramework
任务似乎不会生成框架或显示结果路径,除非删除现有框架文件。