我正在尝试为一个框架添加一个cinterop。
我的def文件看起来像这样
language = Objective-C
modules = ModuleName
linkerOpts = -framework ModuleName它失败了,错误消息是找不到CLLocationManagerDelegate的协议声明
我尝试添加-framework CoreLocation作为编译器选项,但仍然找不到它。
如何为依赖于CoreLocation的框架创建协同操作
我注意到头文件中有
@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发布于 2021-01-26 16:00:26
我认为您需要在.def文件中添加depends部分。例如,看看CoreData框架是如何被定义为平台库的。我想说它应该看起来像是
depends =CoreLocation
language = Objective-C
modules = MapboxMaps
compilerOpts = -framework MapboxCoreMaps -framework MapboxMaps
linkerOpts = -framework MapboxCoreMaps -framework MapboxMapshttps://stackoverflow.com/questions/65675071
复制相似问题