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

嵌入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框架的二进制到主框架中:

  1. 分别编译KMM框架和主框架的全架构版本(arm64、x86_64等)。
  2. 使用lipo命令合并对应架构的二进制文件:
    lipo -create 主框架二进制路径 KMM框架二进制路径 -output 合并后的二进制路径
    
  3. 用合并后的二进制替换主框架中的原始二进制,同时将KMM框架的资源文件(若存在)合并到主框架的资源目录下。

方法3:打包为单一XCFramework

利用Apple官方的XCFramework格式,将主框架与KMM框架打包为一个统一的XCFramework,规避嵌套检测:

  1. 先将KMM框架编译为XCFramework:
    xcodebuild -create-xcframework -framework KMM框架路径 -output KMM.xcframework
    
  2. 主iOS框架依赖KMM.xcframework完成编译,之后将主框架也打包为XCFramework。最终产物是单一的XCFramework包,内部包含主框架与KMM的各架构切片,而非嵌套bundle。

关键注意事项

  • 无论采用哪种方法,需确保主框架的Info.plist中未包含KMM框架的bundle相关条目,避免被App Store检测到嵌套结构。
  • 提交前用xcodebuild archive和xcodebuild exportArchive命令模拟App Store提交流程,提前验证打包产物是否符合规范。

内容的提问来源于stack exchange,提问作者Matt.M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:45:17