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

Compose Multiplatform iOS端kmpnotifier依赖归档失败求助

问题:安装kmpnotifier 1.0.0后Xcode Archive失败

安装kmpnotifier 1.0.0后,执行Xcode的Product->Archive操作时触发错误:任务:composeApp:linkReleaseFrameworkIosArm64执行失败,提示releaseFramework二进制中导出的以下依赖未在对应source set中指定为API依赖:

  • /Users/romanmarinov/.gradle/caches/modules-2/files-2.1/io.github.mirzemehdi/kmpnotifier-iosarm64/1.0.0/18821243bb7c3b1672eb35600772bf6c81bc1ee2/kmpnotifier.klib
  • /Users/romanmarinov/.gradle/caches/modules-2/files-2.1/io.github.mirzemehdi/kmpnotifier-iosarm64/1.0.0/97a3e2ee90b003ad2ff0f6e7778c2efc735ce39e/kmpnotifier-cinterop-FirebaseMessaging.klib
解决方案

这个错误的核心是iOS框架配置和依赖声明不匹配:

  • 你之前注释掉了iOS框架的export(libs.kmpNotifier),这会导致框架无法导出kmpnotifier的API给Xcode使用,必须恢复这个配置。
  • 虽然iosMain里已经用api(libs.kmpNotifier),但结合export配置才能让依赖正确传递到最终的framework中。

另外,kmpnotifier的iOS实现依赖FirebaseMessaging,export配置会自动处理其cinterop依赖的导出,不需要额外手动配置。

修改后的关键配置

1. 恢复iOS框架的export配置

listOf(
    iosX64(),
    iosArm64(),
    iosSimulatorArm64()
).forEach { iosTarget ->
    iosTarget.binaries.framework {
        baseName = "ComposeApp"
        isStatic = true
        // 恢复export,确保框架导出kmpnotifier相关API
        export(libs.kmpNotifier)
        freeCompilerArgs += listOf(
            "-Xbinary=bundleId=XXX.XXX.XXXXXXXXXXX",
            "-Xopt-in=kotlin.RequiresOptIn",
            "-Xinline-classes"
        )
    }
}

2. 保持iOS依赖的api声明

iosMain {
    dependencies {
        implementation(libs.ktor.client.darwin)
        // 必须用api级别,让依赖能被框架导出
        api(libs.kmpNotifier)
    }
}

版本配置确认

确保libs.versions.toml中的kmpNotifier版本正确:

[versions]
kmpNotifier = "1.0.0"

[libraries]
kmpNotifier = { group = "io.github.mirzemehdi", name = "kmpnotifier", version.ref = "kmpNotifier" }

修改完成后,先执行./gradlew clean清理缓存,再重新构建iOS框架,之后在Xcode中重试Archive操作即可。

内容的提问来源于stack exchange,提问作者Роман Маринов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:17:04