链接 iOS 框架时,在 Kotlin Multiplatform 中无法 运行 "linkDebugFrameworkIos"

Fail to run "linkDebugFrameworkIos" in Kotlin Multiplatform when linking iOS Framework

我正在尝试 link 一个 iOS .framework 到 Kotlin Multiplatform/Native 以便我可以在 Kotlin 中使用它。我成功地 link 将框架 Multiplatform/Native 成功地 Multiplatform/Native 并且正确的包包含我 link 编辑的 headers 。

但是 Undefined symbols for architecture 每当我尝试构建项目时都会发生。

我已经尝试为 iPhone 模拟器在 iosX64 预设和 iPhone iosArm64 预设上编译不同的体系结构。

并且我尝试将 .framework 本身添加到普通 XCode 项目中,它在模拟器和 iPhone.

上都运行良好

这是 .def 文件

// engine.def
language = Objective-C

package = org.djinnihello
headers = DjinniHelloLib2.h
headerFilter = **

这里是 build.gradle 文件的一部分

//build.gradle
targets {
    fromPreset(presets.android, 'android')
    // This preset is for iPhone emulator
    // Switch here to presets.iosArm64 (or iosArm32) to build library for iPhone device
    fromPreset(presets.iosArm64, 'ios') {
        compilations.main {
            outputKinds('FRAMEWORK')
            cinterops {
                def productsDir = rootProject.file("iosApp/iosApp/Framework").absolutePath
                println(productsDir)
                hello {
                    defFile project.file("src/engine.def")
                    compilerOpts "-F${productsDir} -framework DjinniHelloLib2"
                    linkerOpts "-F${productsDir} -framework DjinniHelloLib2"
                    includeDirs "$productsDir/DjinniHelloLib2.framework/Headers"
                }
            }
        }
    }
}

这是我尝试在 XCode 或 运行 ./gradlew linkDebugFrameworkIos

中构建它时弹出的错误消息
> Task :app:cinteropHelloIos UP-TO-DATE

> Task :app:linkDebugFrameworkIos FAILED
Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_HWHelloWorld", referenced from:
     objc-class-ref in combined.o
       ld: symbol(s) not found for architecture arm64

找到答案:

从 Kotlin Multiplatform 开始,1.1.1 linkerOptsbuild.gradle 中的 compilerOpts 什么也不做。它们必须在 .def 文件中才能编译和 运行.

language = Objective-C

package = org.djinnihello
headers = DjinniHelloLib2.h
headerFilter = **

compilerOpts = -F/absolute/path/to/Framework -framework DjinniHelloLib2
linkerOpts = -F/absolute/path/to/Framework -framework DjinniHelloLib2