导出到 .framework 的 Kotlin 多平台库在 Xcode 上崩溃

问题描述 投票:0回答:1

我正在尝试使用 Kotlin Multiplatform 实现一个库以在我的 iOS 项目中使用,因此我下载了官方库模板,它实现了斐波那契数列。

我在这个项目中只做了 2 处更改:

  1. 我将 Kotlin 版本从 1.9.0 更改为 1.9.21
  2. 在文件
    library/build.gradle.kts
    中,我更新了目标
    iosSimulatorArm64()
    以输出
    .framework
    ,这样我就可以在我的 Xcode iOS 项目上使用它,如下所示:
    iosSimulatorArm64() {
        binaries {
            framework {
                baseName = "TestLibrary"
            }
        }
    }

然后我运行命令

./gradlew iosSimulatorArm64Binaries
并为我正确生成了
TestLibrary.framework

但是,在我将这个

.framework
包含在我的项目中之后,我的应用程序在尝试运行它时就会崩溃(Xcode 项目构建没有任何问题;它仅在我实际尝试运行应用程序时崩溃),并抛出此错误:

我什至还没有尝试在 iOS 项目中运行斐波那契代码;只需添加框架并尝试运行应用程序,应用程序就会崩溃。知道这里发生了什么吗?

ios xcode kotlin kotlin-multiplatform kotlin-native
1个回答
0
投票

当我创建

.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)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.