我正在尝试在 Kotlin Multiplatform 项目中使用 cocoapods 框架。
所以我
.def
文件 cinterop
配置在 build.gradle
./gradlew cinteropFirebaseIos
运行成功。它生成 .klib
所以我可以在 kotlin 代码中看到类。但是当我尝试运行 iOS 应用程序构建失败并显示以下消息时:
Showing Recent Messages
> Task :app:linkDebugFrameworkIos
ld: framework not found FirebaseDatabase
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld invocation reported errors
这是我在
build.gradle
中的配置 fromPreset(presets.iosX64, 'ios') {
compilations.main {
outputKinds('FRAMEWORK')
cinterops {
firebase {
def proj = "${System.getProperty("user.home")}/Projects/kmpp"
def pods = "${proj}/iosApp/Pods"
defFile "${proj}/app/src/iosMain/c_interop/libfirebase.def"
includeDirs "${pods}/Firebase",
"${pods}/Firebase/CoreOnly/Sources",
"${pods}/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers"
}
}
}
}
这是我的 .def
文件:language = Objective-C
headers = /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseCore/Firebase/Core/Public/FIRApp.h /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabase.h /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseCore/Firebase/Core/Public/FirebaseCore.h
compilerOpts = -framework FirebaseDatabase
linkerOpts = -framework FirebaseDatabase
我怎样才能弄清楚出了什么问题?我在
.def
中错过了什么吗?文件 ?在 build.gradle
?
最佳答案
这里有两个问题时刻:
.def
中 C 头文件的完整路径文件通常是不可取的,而是通过 includeDirs
到 Firebase 安装,如 https://github.com/JetBrains/kotlin-native/blob/c7c566ce0f12221088a8908b6dc8e116c56a931b/samples/gtk/build.gradle#L22会有所帮助compilations.main.linkerOpts
有点喜欢 -F /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseCore/
应该会有所帮助,例如参见 https://github.com/JetBrains/kotlin-native/blob/c7c566ce0f12221088a8908b6dc8e116c56a931b/samples/videoplayer/build.gradle#L15 关于Kotlin native 互操作链接器找不到框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54047711/