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

KMP Moko-Resources XCFramework异常:找不到MR标识符Bundle,iOS无法获取共享字符串

解决iOS端通过KMP moko-resources获取共享字符串资源时的Bundle找不到问题

针对iOS应用与KMP模块分仓,使用moko-resources时抛出kotlin.IllegalArgumentException: bundle with identifier com.example.shared.MR not found的问题,可尝试以下解决方案:

1. 显式指定资源Bundle的加载路径

动态Framework环境下,默认的Bundle加载逻辑可能无法定位到KMP模块内的MR资源Bundle。修改iOS端调用代码,通过KMP类的Class对象获取正确的Framework Bundle:

// 替换原有的Strings()初始化方式,显式传入正确的Bundle
val frameworkBundle = NSBundle.bundleForClass(SharedRes::class.java)
Strings(frameworkBundle).get(SharedRes.strings().string_resId)

2. 调整KMP Framework的依赖配置

将原配置中的export(libs.moko.shared.resources)替换为api,避免资源Bundle被隔离:

listOf(
    iosX64(),
    iosArm64(),
    iosSimulatorArm64()
).forEach {
    it.binaries.framework {
        baseName = SHARE_BINARY_NAME
        api(libs.moko.shared.resources) // 替换export为api
    }
}

3. 验证XCFramework的资源完整性

  • 检查构建后的XCFramework包内,Resources目录下是否存在shared.bundle,且bundle内包含strings.xml等资源文件
  • iOS项目导入Framework后,确认shared.bundle已被添加到Copy Bundle Resources构建阶段(Xcode项目 -> Target -> Build Phases -> Copy Bundle Resources)

4. 确认Bundle标识符与KMP模块包名匹配

检查KMP模块的根包名是否为com.example.shared(与报错中的Bundle ID对应)。若包名不一致,需同步调整代码中依赖的资源引用,或确保moko-resources生成的Bundle ID与实际包名一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:01:17