如何为依赖其他Pod的闭源CocoaPod创建XCFramework
闭源XCFramework形式CocoaPod打包找不到依赖的解决方案
报错根因为直接对独立的Framework项目执行archive操作时,项目未配置对应的第三方依赖,无法找到对应模块。此前在App主Workspace中可以正常使用,是因为主项目的CocoaPods配置已经为整个Workspace注入了依赖,单独编译Framework项目时没有这套环境自然会报错。
正确处理流程
1. 为Framework项目单独配置依赖
在你的Framework项目根目录创建Podfile,添加所有你用到的第三方依赖,示例如下:
platform :ios, '12.0' # 和你框架支持的最低版本保持一致 target 'MyFramework' do use_frameworks! # 所有依赖和对应版本都要写在这里,和后续podspec配置保持完全一致 pod 'Kingfisher', '~> 7.0' end
执行pod install后,关闭原有的xcodeproj文件,使用生成的MyFramework.xcworkspace进行后续所有打包操作。
2. 调整archive命令
在原有命令基础上添加workspace参数,指定使用Framework的xcworkspace进行编译:
xcodebuild archive \ -workspace 'MyFramework.xcworkspace' \ -scheme MyFramework \ -configuration Release \ -destination 'generic/platform=iOS' \ -archivePath './build/MyFramework.framework-iphoneos.xcarchive' \ SKIP_INSTALL=NO \ BUILD_LIBRARIES_FOR_DISTRIBUTION=YES
用同样的逻辑生成模拟器架构的archive包,最后合并为XCFramework即可。这个流程下第三方依赖只会参与编译链接,不会被打包进你生成的XCFramework中,和你之前调研的结论完全一致。
3. 配置Podspec确保用户侧自动安装依赖
在你的podspec文件中添加对应依赖声明,示例如下:
Pod::Spec.new do |s| # 其他基础配置省略 s.vendored_frameworks = 'MyFramework.xcframework' # 所有依赖和版本和Framework项目的Podfile保持完全一致 s.dependency 'Kingfisher', '~> 7.0' end
用户执行pod install时,CocoaPods会自动将你的框架和所有依赖一起集成到项目中,运行时可以正常找到对应模块。
验证注意事项
- 打包完成后可以执行
nm MyFramework.xcframework/ios-arm64/MyFramework.framework/MyFramework | grep Kingfisher,如果没有输出内容就说明第三方依赖没有被打进你的XCFramework中 - 发布前可以本地执行
pod lib lint --allow-warnings验证podspec配置是否合法
内容的提问来源于stack exchange,提问作者Jordan H
相关产品推荐
相关产品推荐

