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,提问作者Роман Маринов
相关产品推荐
相关产品推荐

