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
CodePudding user response:
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.