KMP中用CocoaPods集成FirebaseFirestore后如何启用Xcode预览?
解决KMP项目集成FirebaseFirestore后的链接错误问题
核心解决方案
移除Firestore相关CocoaPods的linkOnly = true配置,确保动态框架能正确链接Firebase符号,同时保持主Podfile与GitLive依赖的版本兼容。
步骤1:修改Shared模块的Gradle配置
在shared/build.gradle.kts的cocoapods块中,将Firestore相关的linkOnly = true移除:
cocoapods { // ... 保留其他原有配置 pod("FirebaseCore", linkOnly = true) pod("FirebaseAuth", linkOnly = true) // 移除linkOnly,改为普通依赖 pod("FirebaseCoreExtension") pod("FirebaseSharedSwift") pod("FirebaseFirestore") }
同时确保commonMain中的Firestore依赖已启用:
commonMain.dependencies { // ... 其他依赖 implementation("dev.gitlive:firebase-firestore:1.10.4") }
步骤2:同步主Podfile的Firebase版本
在iosApp/Podfile中指定与GitLive依赖兼容的Firebase版本(GitLive 1.10.4对应Firebase 10.17.0,可根据实际情况调整):
target 'iosApp' do use_frameworks! platform :ios, '16.0' pod 'shared', :path => '../shared' pod 'KMPNativeCoroutinesCombine', '1.0.0-ALPHA-21' pod 'KMMViewModelSwiftUI', '1.0.0-ALPHA-15' # 指定兼容版本,避免版本不一致 pod 'FirebaseAuth', '10.17.0' pod 'FirebaseFirestore', '10.17.0' end
步骤3:清理并重新构建
- 执行Gradle清理:
./gradlew clean - 进入iOS目录,重新安装Pods:
cd iosApp pod deintegrate && pod install - 重启Xcode,清理Build Folder(快捷键
Cmd+Shift+K),然后重新构建项目。
问题原因
linkOnly = true会让CocoaPods仅在编译阶段检查依赖存在,不将Firebase的符号链接到动态框架中。但GitLive的Firestore库通过Cinterop调用原生Firestore API,需要这些符号在链接阶段就被解析,因此必须移除linkOnly配置,让动态框架正确关联Firebase的符号。由于使用的是动态框架,主App中的Firebase依赖会在运行时提供完整实现,不会出现重复符号问题。
内容的提问来源于stack exchange,提问作者MrKew
相关产品推荐
相关产品推荐

