我正在尝试使用 Kotlin Multiplatform 实现一个库以在我的 iOS 项目中使用,因此我下载了官方库模板,它实现了斐波那契数列。
我在这个项目中只做了 2 处更改:
library/build.gradle.kts
中,我更新了目标 iosSimulatorArm64()
以输出 .framework
,这样我就可以在我的 Xcode iOS 项目上使用它,如下所示: iosSimulatorArm64() {
binaries {
framework {
baseName = "TestLibrary"
}
}
}
然后我运行命令
./gradlew iosSimulatorArm64Binaries
并为我正确生成了 TestLibrary.framework
。
但是,在我将这个
.framework
包含在我的项目中之后,我的应用程序在尝试运行它时就会崩溃(Xcode 项目构建没有任何问题;它仅在我实际尝试运行应用程序时崩溃),并抛出此错误:
我什至还没有尝试在 iOS 项目中运行斐波那契代码;只需添加框架并尝试运行应用程序,应用程序就会崩溃。知道这里发生了什么吗?
当我创建
.framework
并在 Xcode 中使用它时,我找不到应用程序崩溃的原因,但是我找到了一个不同的解决方案,可以让我实现与最初想做的相同的事情:在Kotlin Multiplatform 并使用 Swift 在我的 iOS 项目中调用此代码。
因此,我决定创建一个
.framework
,而不是创建 .xcframework
文件。然后,当我在 iOS 项目中添加 xcframework
时,应用程序不再崩溃。
要使您的 KMP 库输出
.xcframework
,您只需更新您的 build.gradle.kts 文件并添加以下内容:
val frameworkName = "TestLibrary"
val xcf = XCFramework(frameworkName)
val iosTargets = listOf(iosSimulatorArm64()) // Include more targets here if you want
iosTargets.forEach {
it.binaries.framework {
baseName = frameworkName
xcf.add(this)
}
}