ios - 无法将 Google 的“NearbyMessages”Cocoapod 添加到 Kotlin/Native 项目
问题描述
我想知道是否有人可以帮助我将 cocoapod 添加到 kotlin 本机模块中,到目前为止运气不佳!该库是 Google 的 NearbyMessages API。 https://developers.google.com/nearby/messages/ios/get-started
到目前为止,我有:
- 使用 cocoapods 示例应用程序克隆了 KMM。https://github.com/Kotlin/kotlin-with-cocoapods-sample。(将 kotlin 插件版本号更改为 1.4.21,因为示例中引用的快照似乎不再可用)
- Gradle 同步并构建项目。一切顺利。
- 在 AFNetworking 行上方的 build.gradle.kts 中添加 NearbyMessages pod...
pod("NearbyMessages")
- 现在,当我 gradle sync 我收到以下错误。
> Task :kotlin-library:cinteropNearbyMessagesIosArm64 FAILED
Exception in thread "main" java.lang.Error: /var/folders/t7/gwvnk41x66g5kmr7s7y8thdw0000gn/T/6648793494349780018.m:1:9: fatal error: module 'NearbyMessages' not found
at org.jetbrains.kotlin.native.interop.indexer.UtilsKt.ensureNoCompileErrors(Utils.kt:152)
at org.jetbrains.kotlin.native.interop.indexer.ModuleSupportKt.getModulesASTFiles(ModuleSupport.kt:68)
at org.jetbrains.kotlin.native.interop.indexer.ModuleSupportKt.getModulesInfo(ModuleSupport.kt:14)
at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.buildNativeLibrary(main.kt:507)
at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.processCLib(main.kt:265)
at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.interop(main.kt:73)
at org.jetbrains.kotlin.cli.utilities.InteropCompilerKt.invokeInterop(InteropCompiler.kt:45)
at org.jetbrains.kotlin.cli.utilities.MainKt.mainImpl(main.kt:19)
at org.jetbrains.kotlin.cli.utilities.MainKt.main(main.kt:41)
Execution failed for task ':kotlin-library:cinteropNearbyMessagesIosArm64'.
> Process 'command '/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
我能够使用 podfile 和 pod install 安装 cocoapod。不涉及 KMM。除此之外,我还尝试了各种随机的东西,但这些步骤看起来应该可行。
这是 NearbyMessages 的 podspec 文件: https ://github.com/CocoaPods/Specs/blob/master/Specs/f/b/9/NearbyMessages/1.1.1/NearbyMessages.podspec.json
解决方案
JB伙计们已经在这里回答了你。
我在这里报告答案以获得更好的索引:
您好,Tom Pratt,感谢您的报告!据我所见,问题是由
NearbyMessages
pod 由静态 Objective-C 库组成,而不是框架引起的。它没有 module.modulemap,因此 cinterop 无法正确解释它。将 's content更改build/cocoapods/defs/NearbyMessages.def
为具有 headers 选项而不是 module 让我cinterop
可以手动执行,但我不确定它是否可以在 Cocoapods 集成中完成。
作为手动解决方法,他们建议:
此外,为了使此手动解决方法更有用,您可以尝试调整生成此
.def
文件的 Gradle 任务。只需添加
tasks.named<DefFileTask>("generateDefNearbyMessages").configure {
doLast {
outputFile.writeText("""
language = Objective-C
headers = GNSMessages.h
""")
}
}
推荐阅读
- google-cloud-firestore - sveltefire:如何在 svelte 中使用 sveltefire 链接 firestore where 查询
- ag-grid - 在 ag-grid 中单击单元格时显示工具提示
- javascript - 每次连接表的 mySQL 数据库发生更改时,如何生成仪表板表?
- python - 使用 pandas read_csv 指定 python 引擎时合并所有列
- visual-studio-code - VS Code:Cmake 扩展在侧边栏没有按钮
- python - 用户的独特日历 - Python
- javascript - 使用 Laravel 隐藏数据表中的行
- mysql - 创建表的更好方法是什么?
- javascript - 如何在 React Native 中将组件中的函数调用作为道具传递?
- cplex - 如何使 CPLEX 不输出到 Julia 中的终端窗口