KMP项目引入iOS库后通过SPM集成到Xcode运行崩溃求助
问题解决:KMP项目通过SPM导入后第三方库运行时加载失败
你在KMP项目中用原生CocoaPods Gradle插件引入纯iOS库(如FirebaseCrashlytics),shared模块的iosMain能正常使用,但通过multiplatform-swiftpackage构建共享framework并导入Xcode后,应用可构建但运行时崩溃,提示第三方库未加载。以下是遗漏的关键配置和解决步骤:
1. 让CocoaPods依赖嵌入到生成的Framework中
默认情况下,multiplatform-swiftpackage生成的SPM包不会自动包含CocoaPods依赖。需在CocoaPods配置中添加embed属性,强制将第三方库嵌入到最终输出的framework里:
cocoapods { ... pod("FirebaseCrashlytics") { version = "11.6.0" extraOpts = listOf("-compiler-option", "-fmodules") embed = true // 关键配置:将该Pod嵌入到生成的framework中 } }
2. 配置multiplatform-swiftpackage传递CocoaPods依赖
需要让生成的SPM包明确声明对CocoaPods依赖的依赖关系,在multiplatformSwiftPackage配置中添加podDependencies块:
multiplatformSwiftPackage { swiftToolsVersion("5.9") distributionMode { local() } buildConfiguration { debug() } outputDirectory(File(rootProject.projectDir, "swiftpackage")) targetPlatforms { iOS { v("16") } } // 传递CocoaPods依赖到SPM包 podDependencies { pod("FirebaseCrashlytics", "11.6.0") } }
3. 在Xcode中确认依赖的嵌入状态
导入SPM包后,进入Xcode项目设置:
- 选中你的iOS应用目标,切换到
Frameworks, Libraries, and Embedded Content选项卡 - 找到
FirebaseCrashlytics.framework,将其嵌入方式从Do Not Embed改为Embed & Sign
4. 清理缓存并重新构建
- 执行Gradle清理命令:
./gradlew clean - 重新生成SPM包:
./gradlew createSwiftPackage - 在Xcode中清理项目:按
Cmd+Shift+K清理,再按Cmd+Option+Shift+K清理构建文件夹,最后重新运行应用
内容的提问来源于stack exchange,提问作者Freesko
相关产品推荐
相关产品推荐

