Не удается запустить "linkDebugFrameworkIos" в Kotlin Multiplatform при связывании iOS Framework

Я пытаюсь связать.framework iOS с Kotlin Multiplatform/Native, чтобы я мог использовать его в Kotlin. Я успешно связываю Framework с Kotlin Multiplatform/Native, и соответствующие пакеты содержат заголовки, которые я связал.

тем не мение Undefined symbols for architecture происходит всякий раз, когда я пытался построить проект.

Я пытался компилировать на другую архитектуру для iPhone Simulator на iosX64 предустановка и для iPhone iosArm64 предустановки.

И я попытался добавить сам.framework в проект vanilla 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

1 ответ

Решение

Нашел ответ:

На мультиплатформенный Kotlin 1.1.1linkerOpts а также compilerOpts в build.gradle ничего не делать. Они должны быть в .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
Другие вопросы по тегам