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

归档含Pod依赖的Kotlin Multiplatform项目时模块找不到的问题

问题分析与解决方案

这个问题仅在归档时出现,核心原因是Xcode的Release归档配置与Debug运行配置的依赖解析逻辑存在差异——Debug模式下Xcode会自动处理很多Pod模块的路径和映射,但Release归档时会启用更严格的编译优化和路径检查,导致KMM生成的静态框架无法正确关联Pod模块。

下面是针对性的解决步骤:

1. 给所有Pod添加模块编译选项

你目前只给PurchasesHybridCommon加了-fmodules选项,归档时所有依赖的Pod都需要启用模块支持。修改Gradle的CocoaPods配置:

cocoapods {
    // 其他原有配置保持不变
    pod("GoogleSignIn") {
        extraOpts += listOf("-compiler-option", "-fmodules")
    }
    pod("PurchasesHybridCommon") {
        version = libs.versions.purchases.common.get()
        extraOpts += listOf("-compiler-option", "-fmodules")
    }
}

2. 配置KMM框架导出Pod依赖

静态框架模式下,需要明确告诉Kotlin/Native要导出Pod依赖的模块,确保归档时能正确关联。在framework块中添加exportedPods:

framework {
    baseName = "composeApp"
    isStatic = true
    exportedPods = listOf("GoogleSignIn", "PurchasesHybridCommon")
}

3. 调整Xcode Release构建配置

打开iOS项目的Xcode Build Settings,确保Release配置下:

  • CLANG_ENABLE_MODULES 设置为 YES
  • HEADER_SEARCH_PATHS 包含Pods的头文件路径(通常是$(inherited)和${PODS_ROOT}/**)
  • FRAMEWORK_SEARCH_PATHS 包含Pods的框架路径($(inherited)和${PODS_CONFIGURATION_BUILD_DIR}/**)

如果手动配置麻烦,可以在Podfile的post_install块中自动设置:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['CLANG_ENABLE_MODULES'] = 'YES'
      config.build_settings['HEADER_SEARCH_PATHS'] = '$(inherited) ${PODS_ROOT}/**'
    end
  end
end

修改后重新执行pod install。

4. 清理归档相关缓存

归档缓存可能残留旧的配置,执行以下命令清理:

# 清理Xcode派生数据
rm -rf ~/Library/Developer/Xcode/DerivedData
# 清理KMM构建缓存
./gradlew clean
# 重新安装Pods
cd iosApp && pod install && cd ..

5. 尝试切换动态框架(可选)

如果静态框架的问题无法解决,可以临时将isStatic改为false,测试是否能正常归档:

framework {
    baseName = "composeApp"
    isStatic = false
}

注意动态框架需要在Xcode中配置Embed & Sign,但能快速验证是否是静态框架的模块关联问题。


内容的提问来源于stack exchange,提问作者Hossam Zaabl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:04:51