Swift框架集成GoogleMobileAds后OC引用时-Swift.h报模块未找到错误
问题诱因
- 当Swift框架中被
@objc public修饰的公开类继承自第三方模块(GoogleMobileAds)的类型时,Swift编译器生成Objective-C兼容头SampleFramework-Swift.h的过程中,会自动在头部插入@import GoogleMobileAds;语句,用于声明父类的所属模块。 - 你的Objective-C主Target没有直接依赖GoogleMobileAds,也没有获取到该模块的可见性,编译时就会触发模块找不到的错误。
- 当父类修改为非GoogleMobileAds相关的类型时,兼容头不会插入对应@import语句,错误自然消失。
解决方案
方案1(推荐,无需暴露依赖给主项目)
使用Swift 5.1及以上版本支持的@_implementationOnly声明导入GoogleMobileAds,告诉编译器该依赖仅在框架内部实现使用,不需要暴露给外部:
@_implementationOnly import GoogleMobileAds @objc public class NativeAdView: GADNativeAdView { }
修改后重新编译,生成的SampleFramework-Swift.h不会再出现@import GoogleMobileAds;语句,主项目不需要额外配置即可正常编译。
方案2(通过CocoaPods传递依赖)
在你的Swift框架的podspec文件中显式声明依赖和模块配置:
# 框架podspec添加以下配置 s.dependency 'GoogleMobileAds' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
修改后在主项目目录重新执行pod install,CocoaPods会自动配置依赖传递,主项目可以间接获取GoogleMobileAds的模块可见性。
方案3(直接给主项目添加依赖)
直接在主项目的Podfile中给Objective-C的Target添加GoogleMobileAds依赖,重新执行pod install即可解决报错。
内容的提问来源于stack exchange,提问作者Rishab
相关产品推荐
相关产品推荐

