Closed kkoshin closed 1 year ago
本地下载下这个 xcframework,然后拆分处对应的 framework ,最后单独导入?
破案了,因为 pod 里的 name 是带 -iOS,但实际的 xcframework 里的 framework 名称是不带这个的,所以按照 cocoapods 的默认实现规则去实现 cinterop 会失败。
xcframework 看上去似乎只是给多个 framework 做了一次打包,并且按照一定的命名约定去区分不同的平台,本身也没做什么魔法
为了修复这个问题,比较原始的方式是,自己下载这个 xcframework,然后自己声明 def 文件,以及修改对应的 gradle 配置。 更优雅一点的做法是,声明 moduleName 来帮助默认实现work。
pod("MicrosoftCognitiveServicesSpeech-iOS") {
version = "~> 1.25"
packageName = "MicrosoftCognitiveServicesSpeech"
// 这个moduleName一定要和 framework 的名称一致,或者说与 def 里的一致,不然,无法正确的完成 cinterop
moduleName = "MicrosoftCognitiveServicesSpeech"
}
//pod("TXIMSDK_Plus_iOS"){
// version = libs.versions.tencent.imsdk.get()
// packageName = "ImSDK_Plus"
// moduleName = "ImSDK_Plus"
//}
// xcframework 无法正常导入
pod("TXIMSDK_Plus_iOS_XCFramework") {
version = libs.versions.tencent.imsdk.get()
packageName = "ImSDK_Plus" // 定义导出的kotlin包名,不写就会变成cocoapods.${moduleName}.xxx
// 这个moduleName一定要和 framework 的名称一致,或者说与 def 里的一致,不然,无法正确的完成 cinterop
moduleName = "ImSDK_Plus" // 参考/build/shared/cocoapods/defs/里面的modules名称,没有后缀
}
就算定义了XCFramework的moduleName也不可以,大佬你有解决方案吗?
目前遇到点困难,azure-speech 的库是以 xcframework 的方式以 cocoapods 分发的,但尝试集成的过程中,没办法生成对应的 klib,以实现在 kotlin 端调用。
造成这个原因有以下几个猜想: