如何在Kotlin多平台项目共享功能中添加Cocoa Pod依赖?
在Kotlin多平台共享模块中添加Cocoa Pod依赖并实现expect-actual
步骤1:配置Gradle构建脚本
在共享模块的build.gradle.kts(或build.gradle)中,找到kotlin块下的iOS目标配置,添加cocoapods块声明Pod依赖:
kotlin { // 声明iOS目标架构 iosX64() iosArm64() iosSimulatorArm64() cocoapods { // 基础必填配置 summary = "你的共享模块功能描述" homepage = "项目主页链接" version = "1.0.0" ios.deploymentTarget = "14.0" // 适配最低iOS版本 podfile = project.file("../iosApp/Podfile") // 关联iOS App的Podfile路径 // 添加目标Cocoa Pod依赖 pod("Alamofire") { // 替换为你需要的Pod名称 version = "5.8.1" // 指定Pod版本 isStatic = false // 根据Pod类型调整,静态库设为true } } }
如果是私有Pod,需额外添加源地址:
cocoapods { // ... 其他配置 source = "https://你的私有Pod源地址.git" }
步骤2:同步项目生成绑定
点击Android Studio右上角的Sync Now按钮,或在终端执行:
./gradlew sync
Gradle会自动下载Pod依赖并生成Kotlin与OC/Swift类的绑定代码,之后就能在iOS源码集中直接调用Pod的API。
步骤3:定义expect接口(Common源码集)
在commonMain源码集中声明跨平台需要实现的类或函数:
// commonMain/.../NetworkClient.kt expect class NetworkClient { suspend fun fetchData(url: String): String }
步骤4:实现actual逻辑(iOS源码集)
在iosMain源码集中导入Pod类,完成actual实现:
// iosMain/.../NetworkClient.kt import Alamofire import kotlinx.coroutines.suspendCancellableCoroutine actual class NetworkClient { actual suspend fun fetchData(url: String): String = suspendCancellableCoroutine { continuation -> AF.request(url).responseString { response -> response.error?.let { continuation.resumeWithException(it) } ?: run { continuation.resume(response.value ?: "") } } } }
常见问题排查
- 找不到Pod类:先检查Gradle同步是否成功,若仍报错,执行
./gradlew clean build清理后重新构建;确认Pod名称和版本与CocoaPods官方一致。 - 异步API适配问题:iOS端多数API是回调式异步,建议用Kotlin协程的
suspendCancellableCoroutine包装,避免阻塞线程,保证跨平台协程一致性。 - 静态/动态库冲突:若Pod是静态库,需将
isStatic设为true;部分Pod仅支持动态库,需确保useFrameworks = true(默认已开启)。
内容的提问来源于stack exchange,提问作者AndCode
相关产品推荐
相关产品推荐

