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

如何通过CocoaPods为iOS App集成带私有Modulemap的XCFramework?

问题分析与解决方案

问题根源

CocoaPods处理含Swift代码的框架时,会自动生成MySDK.Swift子模块,但你的自定义modulemap仅定义了MySDK_Private私有模块,未显式声明顶层MySDK主模块,导致子模块找不到父模块,触发No module named 'MySDK' found报错。

修正步骤

1. 更新自定义Modulemap

修改module.modulemap,先声明顶层MySDK主模块,再包含私有模块和CocoaPods自动生成的Swift子模块结构:

// 声明顶层主模块
framework module MySDK {
    // 预留Swift子模块位置,CocoaPods会自动填充内容
    module Swift {
        header "MySDK-Swift.h"
        requires objc
    }

    // 你的私有模块
    module MySDK_Private {
        header "./Path/To/My/Internal/ObjC/Header/FileName.h"
        export *
    }

    // 导出主模块对外暴露的内容(按需调整)
    export *
}

注:若XCFramework本身已有公开模块定义,只需确保顶层MySDK模块存在即可,无需重复定义公开内容。

2. 调整Podspec配置

确保podspec正确指向自定义modulemap,同时按需配置公开头文件路径:

Pod::Spec.new do |s|
  s.name = 'MySDK'
  s.version = '1.0.0'
  s.platform = :ios, '13.0'
  s.summary = '你的SDK简介'
  s.license = { :type => 'MIT', :file => 'LICENSE' }
  s.author = { '你的名称' => 'your@email.com' }
  
  # 指定XCFramework路径
  s.vendored_frameworks = 'MySDK.xcframework'
  
  # 绑定自定义modulemap
  s.module_map = 'module.modulemap'
  
  # 若有公开头文件,设置对应路径(根据实际情况修改)
  # s.public_header_files = 'MySDK.xcframework/ios-arm64/Headers/*.h'
end

3. 清理并重做集成

  • 执行pod deintegrate清理现有集成残留
  • 删除Podfile.lock和Pods目录
  • 重新执行pod install

额外注意点

  • 确保私有头文件的路径在modulemap中正确,建议使用相对于XCFramework内部的路径,避免因集成路径变化导致找不到文件
  • 若XCFramework为多架构包,需保证各架构下的头文件结构一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:32:36