KMM项目集成libPhoneNumber-iOS Pod遇阻,求正确配置方案
KMM集成libPhoneNumber-iOS的正确配置方案
问题原因分析
- 仅在Podfile添加Pod:KMM的C-Interop绑定由Gradle的
cocoapods插件生成,直接在Xcode的Podfile中加依赖,不会触发KMM生成对应的Kotlin绑定代码,因此shared>iOSMain里无法访问该库。 - 仅在shared的build.gradle.kts中添加Pod:Gradle会生成包含该Pod依赖的
shared.podspec,但Xcode项目未安装这个依赖Pod,编译时找不到libPhoneNumber-iOS,进而引发所有依赖shared模块的代码报错。
正确配置步骤
1. 配置shared模块的Gradle脚本
在shared/build.gradle.kts的cocoapods代码块中添加Pod依赖,并调整框架配置:
plugins { kotlin("multiplatform") // 其他插件... } kotlin { iosX64() iosArm64() iosSimulatorArm64() cocoapods { summary = "Shared KMM module" homepage = "Your project homepage" ios.deploymentTarget = "14.0" // 添加libPhoneNumber-iOS依赖 pod("libPhoneNumber-iOS") { version = "~> 0.9.19" // 使用最新稳定版本 } framework { baseName = "shared" isStatic = false // 因libPhoneNumber-iOS是动态框架,此处设为false避免冲突 } } // 其他配置... }
2. 同步依赖并更新Xcode项目
- 执行Gradle命令生成并安装Pod依赖:
./gradlew podInstall - 打开Xcode项目的
.xcworkspace文件(必须用工作区而非单独项目文件),确认Pods目录已包含libPhoneNumber-iOS。若未自动同步,可手动执行:pod install
3. 在shared>iOSMain中使用库
现在可直接在iOSMain的Kotlin代码中调用库的API,示例:
import com.google.i18n.phonenumbers.PhoneNumberUtil fun parsePhoneNumber(number: String, region: String): Boolean { val util = PhoneNumberUtil.getInstance() return try { util.parse(number, region) true } catch (e: Exception) { false } }
额外注意事项
- 确保Kotlin Multiplatform插件与
cocoapods插件版本匹配,建议用最新稳定版Kotlin。 - 若遇静态/动态框架冲突,可调整
framework.isStatic取值,或在Podfile中添加use_frameworks! :linkage => :dynamic。 - 修改Gradle中的Pod依赖后,需重新执行
./gradlew podInstall和pod install同步配置。
内容的提问来源于stack exchange,提问作者Charlie Walker
相关产品推荐
相关产品推荐

