嵌入KMM框架的iOS framework上传App Store遇“无效包”错误求助
解决KMM框架作为iOS私有依赖时App Store提交的嵌套Bundle问题
方法1:将KMM框架静态链接到主iOS框架
把KMM模块编译为静态框架,直接链接进主框架,从根源避免嵌套bundle:
- 修改KMM模块的
build.gradle.kts,在iOS目标配置中启用静态框架:ios { framework { isStatic = true // 保留原有其他配置 } } - 主iOS框架在编译阶段,将KMM的静态库(
.a文件或静态.framework)作为链接依赖引入,而非使用embed操作。最终主框架的二进制文件会直接包含KMM的代码逻辑,不会生成嵌套bundle结构。
方法2:合并KMM与主框架的二进制文件
如果主框架必须是动态类型,可通过lipo工具合并KMM框架的二进制到主框架中:
- 分别编译KMM框架和主框架的全架构版本(arm64、x86_64等)。
- 使用
lipo命令合并对应架构的二进制文件:lipo -create 主框架二进制路径 KMM框架二进制路径 -output 合并后的二进制路径 - 用合并后的二进制替换主框架中的原始二进制,同时将KMM框架的资源文件(若存在)合并到主框架的资源目录下。
方法3:打包为单一XCFramework
利用Apple官方的XCFramework格式,将主框架与KMM框架打包为一个统一的XCFramework,规避嵌套检测:
- 先将KMM框架编译为XCFramework:
xcodebuild -create-xcframework -framework KMM框架路径 -output KMM.xcframework - 主iOS框架依赖KMM.xcframework完成编译,之后将主框架也打包为XCFramework。最终产物是单一的XCFramework包,内部包含主框架与KMM的各架构切片,而非嵌套bundle。
关键注意事项
- 无论采用哪种方法,需确保主框架的
Info.plist中未包含KMM框架的bundle相关条目,避免被App Store检测到嵌套结构。 - 提交前用
xcodebuild archive和xcodebuild exportArchive命令模拟App Store提交流程,提前验证打包产物是否符合规范。
内容的提问来源于stack exchange,提问作者Matt.M
相关产品推荐
相关产品推荐

