Swift xcframework嵌入CocoaPod(GoogleMap)编译成功使用时报模块构建失败
问题描述
我正在尝试创建内部集成第三方CocoaPod组件(如GoogleMap等)的.xcframework,已通过以下终端命令成功构建.xcframework:
xcodebuild archive \ -workspace CustomXCFramework.xcworkspace \ -scheme CustomXCFramework \ -archivePath ./archives/ios.xcarchive \ -sdk iphoneos \ -SKIP_INSTALL=NO \ -BUILD_LIBRARY_FOR_DISTRIBUTION=YES xcodebuild archive \ -workspace CustomXCFramework.xcworkspace \ -scheme CustomXCFramework \ -archivePath ./archives/ios-sim.xcarchive \ -sdk iphonesimulator \ -SKIP_INSTALL=NO \ -BUILD_LIBRARY_FOR_DISTRIBUTION=YES xcodebuild -create-xcframework \ -framework ./archives/ios-sim.xcarchive/Products/Library/Frameworks/CustomXCFramework.framework \ -framework ./archives/ios.xcarchive/Products/Library/Frameworks/CustomXCFramework.framework \ -output ./builds/CustomXCFramework.xcframework
但将该框架接入Demo项目使用时,出现如下报错:
Failed to build module 'CustomXCFramework' from its module interface; it may have been damaged or it may have triggered a bug in the Swift compiler when it was produced
附件包含两张截图:一张为框架项目配置截图,一张为Demo项目报错截图。
解决方案
- 首先处理第三方依赖的构建配置:由于你集成了第三方CocoaPod组件,仅开启自身框架的
BUILD_LIBRARY_FOR_DISTRIBUTION配置是不够的,需要强制所有依赖的Pod组件同时开启该配置。在框架项目的Podfile末尾添加如下代码,重新执行pod install后再走xcframework构建流程即可:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES' end end end
- 检查构建使用的scheme配置,确保你执行archive操作时使用的是Release模式,不要用Debug模式打对外分发的xcframework。
- 如果你框架内公开(public/open)层级的API用到了第三方Pod的类型,需要明确在你的framework代码中
@_exported导入对应依赖模块,或者在modulemap文件中显式声明依赖,避免编译器依赖隐式导入导致模块接口生成不完整。 - 检查Demo项目的构建设置,确保Demo项目使用的Swift版本与你构建framework时的Swift版本完全一致,同时Demo项目的最低iOS部署版本不要低于framework设置的最低部署版本。
- 清理旧构建缓存后重试:Xcode按
Command+Shift+K清理项目,删除~/Library/Developer/Xcode/DerivedData目录下的对应缓存,再重新构建Demo项目。
内容的提问来源于stack exchange,提问作者Ly Boung
相关产品推荐
相关产品推荐

