Kotlin Native cinterop框架依赖于CoreLocation



我正在尝试为框架添加一个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

我认为您需要将dependents部分添加到.def文件中。例如,请参阅如何在Kotlin/Native存储库中完成,在该存储库中,CoreData框架被定义为平台库。我想说它应该看起来像

depends =CoreLocation
language = Objective-C
modules = MapboxMaps
compilerOpts = -framework MapboxCoreMaps -framework MapboxMaps
linkerOpts = -framework MapboxCoreMaps -framework MapboxMaps

最新更新