如何通过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
相关产品推荐
相关产品推荐

