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
相关产品推荐
相关产品推荐

