You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KMM项目集成libPhoneNumber-iOS Pod遇阻,求正确配置方案

KMM集成libPhoneNumber-iOS的正确配置方案

问题原因分析

  1. 仅在Podfile添加Pod:KMM的C-Interop绑定由Gradle的cocoapods插件生成,直接在Xcode的Podfile中加依赖,不会触发KMM生成对应的Kotlin绑定代码,因此shared>iOSMain里无法访问该库。
  2. 仅在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:46:30