I have created this sample Swift framework which has GoogleMobileAds
in it integrated through Cocoapods. I have a class NativeAdView
which inherits from GADNativeAdView
.
import GoogleMobileAds
@objc public class NativeAdView: GADNativeAdView {
}
I also have a sample target which is an Objective-C app. I import the framework header as below in my AppDelegate.m.
#import <SampleFramework/SampleFramework-Swift.h>
Now when I run the Objective-C target it throws an error inside the file SampleFramework-Swift.h
@import GoogleMobileAds; -------- Module 'GoogleMobileAds' not found.
However, if I change the parent class of NativeAdView
to anything other than a Google ad class the error goes away and the build compiles and runs successfully.
Also @import GoogleMobileAds;
line goes away from SampleFramework-Swift.h file
I can't figure out what is happening.
Github link - https://github.com/rishabdutta/FrameworkSample
First, update bundle identifiers of your targets SampleFramework, SampleSwift, SampleObjc to be different.
Try updating Podfile as follows. Cocoapods works this way that in your setup you have to specify 'Google-Mobile-Ads-SDK' for every target which uses it, but to avoid copying that line, you can use abstract_target
so the dependency is automatically added to all targets inside:
use_frameworks!
abstract_target 'Common' do
pod 'Google-Mobile-Ads-SDK'
target 'SampleFramework' do
end
target 'SampleObjc' do
end
target 'SampleSwift' do
end
end
But this way you will face a runtime warning "Class APMAdExposureReporter is implemented in both ...", but the app will work, the warning doesn't cause real problems - it's discussed here, but personally I don't know the best practice how to deal with it.