【发布时间】:2019-05-29 01:11:30
【问题描述】:
我正在尝试在多平台项目中从 Kotlin 调用 Swift/Objective-C 代码。调用平台代码没有问题。但是,当我尝试调用某个库(或框架,由于我不是 iOS 开发人员而不确定如何正确调用它)时,它会失败。 Docs 表示,如果正确导出,可以调用 Objective-C 代码和 Swift:
Kotlin/Native 提供与 Objective-C 的双向互操作性。如果将 Objective-C 框架和库正确导入构建(默认导入系统框架),则可以在 Kotlin 代码中使用 Objective-C 框架和库。参见例如Gradle 插件文档中的“使用 cinterop”。如果使用 @objc 将 Swift 库的 API 导出到 Objective-C,则可以在 Kotlin 代码中使用 Swift 库。尚不支持纯 Swift 模块。
但它没有说明如何正确导入它们。它只指向描述旧版本 gradle 插件的gradle plugin description。所以它对我不起作用。最后我想出了一些可能是导入Objective-C代码的方法:
fromPreset(presets.iosX64, 'ios') {
compilations.main.outputKinds('FRAMEWORK')
compilations.main {
cinterops {
firebase {
def pods = '${System.getProperty("user.home")}/Projects/kmpp/iosApp/Pods/'
includeDirs '${pods}Firebase/CoreOnly/Sources',
'${pods}FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers'
}
}
}
}
构建运行没有失败,但它不导入任何东西。我究竟做错了什么?是否可以导入这样的库?
更新:
here 我找到了一个使用cinterop 工具的示例,如下所示:
cd samples/gitchurn
../../dist/bin/cinterop -def src/main/c_interop/libgit2.def \
-compilerOpts -I/usr/local/include -o libgit2
看起来cinterop 工具应该在我的项目中的/dist/bin/ 文件夹中,但没有这样的文件夹。我在哪里可以得到cinterop 工具?
【问题讨论】:
标签: kotlin kotlin-interop kotlin-native kotlin-multiplatform