依赖 CoreLocation 的 Kotlin Native cinterop 框架

问题描述

我正在尝试为框架添加 cinterop。

我的 def 文件看起来像

language = Objective-C
modules = ModuleName
linkerOpts = -framework ModuleName

失败并显示错误消息找不到 CLLocationManagerDelegate 的协议声明

我尝试添加 -framework CoreLocation 作为编译器选项,但仍然没有找到。

如何为依赖于 CoreLocation 的框架创建 cinterop?

我注意到头文件

@class CLLocationManager;
@class CLLocation;
@class CLheading;

但是没有 CLLocationManagerDelegate 的前言声明,但我对 Swift 和 Objective-C 的了解不够,无法判断这是否是一个损坏的头文件

我尝试手动添加前向声明,但收到相同的错误消息。

我还从头文件删除了对 CoreLocation 的所有引用,它进入了另一个部分,它依赖于另一个框架中的类。该代码是必需的,无法删除

文件包含了这个框架和 CoreLocation 的导入,但它仍然找不到符号。导入没有错误

尝试添加 -framework 选项作为编译器选项,但仍然找不到符号。框架搜索路径有 -F 选项。

        val architecturePath = when(targetName) {
            "iosX64" -> "ios-x86_64-simulator"
            "iosArm64" -> "ios-arm64"
            else -> throw IllegalStateException("UnkNown architecture,$targetName")
        }
        val mapboxcoreMaps = File(projectDir,"libs/MapboxcoreMaps.xcframework/$architecturePath").absolutePath
        val mapBoxMaps = File(projectDir,"libs/MapBoxMaps.xcframework/$architecturePath").absolutePath
        compilations {
            @Suppress("UNUSED_VARIABLE")
            val main by getting {
                cinterops {
                    val mapBox by creating {
                        defFile = File("$projectDir/libs/mapBox.def")
                        packageName("com.mapBox")
                        compilerOpts("-F$mapboxcoreMaps","-F$mapBoxMaps","-framework","MapboxcoreMaps")
                    }
                }
            }
        }

MapBox.def

language = Objective-C
modules = MapBoxMaps
linkerOpts = -framework MapboxcoreMaps -framework MapBoxMaps

解决方法

我认为您需要将depends 部分添加到.def 文件中。例如,查看它是如何完成的at the Kotlin/Native repository,其中 CoreData 框架被定义为平台库。我会说它应该看起来像

depends =CoreLocation
language = Objective-C
modules = MapboxMaps

compilerOpts = -framework MapboxCoreMaps -framework MapboxMaps
linkerOpts = -framework MapboxCoreMaps -framework MapboxMaps

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...