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

Kotlin Multiplatform包在Swift Package Manager中无法识别的问题

KMP包接入SPM项目指定iOS模拟器构建时找不到模块的问题

问题场景

将Kotlin Multiplatform(KMP)包接入Swift Package Manager(SPM)管理的项目时,直接执行swift build能正常构建,但指定iOS模拟器目标构建时,出现no such module 'spm'错误;但相同包接入常规Xcode项目(iOS 16.4模拟器目标)可正常运行。

核心原因

  1. KMP包的架构产物缺失:你的KMP包可能未生成arm64-apple-ios16.4-simulator架构的产物,仅默认构建了macOS或其他通用架构。Xcode会自动触发KMP的跨平台构建流程,生成对应模拟器架构的产物;但手动通过-Xswiftc传递参数时,SPM无法识别目标平台,只会查找默认架构的产物,导致找不到模块。
  2. SPM构建参数传递方式错误:直接用-Xswiftc传递SDK和target参数,属于底层编译参数传递,没有让SPM感知到当前是iOS模拟器构建目标,因此不会去拉取/构建KMP包对应的iOS平台产物。

解决方案

方案1:修复KMP项目的多平台构建配置

修改KMP项目的build.gradle.kts,确保包含iOS模拟器arm64目标,并配置SPM插件正确导出多平台产物:

kotlin {
    // 添加iOS模拟器arm64目标
    iosSimulatorArm64 {
        binaries.framework {
            baseName = "spm"
            isStatic = true // 静态框架更适配SPM
        }
    }
    iosX64() // 兼容旧版Intel模拟器

    swiftPackage {
        platforms {
            ios("16.4") // 指定最低iOS版本
        }
        product {
            name = "spm"
            targets = ["iosSimulatorArm64", "iosX64"] // 导出需要的目标架构
        }
    }
}

重新构建并发布KMP包(或本地构建后用于测试)。

方案2:使用SPM官方的--destination参数指定目标平台

放弃手动传递-Xswiftc参数,改用SPM提供的--destination来指定iOS模拟器目标,让SPM自动处理平台适配:

# 具体模拟器设备版本
swift build --destination 'platform=iOS Simulator,name=iPhone 14 Pro,OS=16.4'

# 通用模拟器目标
swift build --destination "generic/platform=iOS Simulator"

这种方式会让SPM正确识别构建平台,自动拉取对应架构的KMP包产物,解决模块找不到的问题。

方案3:本地开发时直接引用KMP本地构建产物

如果是本地调试,无需发布包,可在SPM项目的Package.swift中直接指向KMP项目的本地路径:

let package = Package(
    name: "TestSPM",
    dependencies: [
        .package(path: "../kmp-spm-example") // 替换为你的KMP项目本地路径
    ],
    targets: [
        .target(
            name: "TestSPM",
            dependencies: [.product(name: "spm", package: "kmp-spm-example")]
        )
    ]
)

然后执行swift build --destination "generic/platform=iOS Simulator",SPM会自动构建KMP包的iOS模拟器目标并完成链接。

内容的提问来源于stack exchange,提问作者Arsenius

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:33:20