Yogi Wannabe
Yogi Wannabe

Reputation: 171

Flutter AdMob works on Android but not on iOS

I have a Flutter project that uses AdMob. This works fine in Android and I'm able to view the test ads. But when I try to build for iOS, the build fails. I've googled for this and tried out various suggestions I found online but nothing helped. Hope someone can help with this issue.

snippets from my pub spec.yaml file environment: sdk: ">=2.7.0 <3.0.0"

firebase_core: ^0.7.0 firebase_admob: ^0.11.0+1

In ios/Flutter/AppFrameworkInfo.plist MinimumOSVersion is set to 10.1. And finally here are my build errors

Xcode's output:
↳
    In file included from /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTFirebaseAdMobPlugin.m:5:
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTFirebaseAdMobPlugin.h:28:4: error: expected a type
    - (GADUnifiedNativeAdView *)createNativeAd:(GADUnifiedNativeAd *)nativeAd
       ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTFirebaseAdMobPlugin.h:28:45: error: expected a type
    - (GADUnifiedNativeAdView *)createNativeAd:(GADUnifiedNativeAd *)nativeAd
                                                ^
    In file included from /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTFirebaseAdMobPlugin.m:9:
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.h:39:45: error: no type or protocol named 'GADInterstitialDelegate'
    @interface FLTInterstitialAd : FLTMobileAd <GADInterstitialDelegate>
                                                ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.h:44:28: error: no type or protocol named 'GADUnifiedNativeAdLoaderDelegate'
        : FLTMobileAdWithView <GADUnifiedNativeAdLoaderDelegate, GADUnifiedNativeAdDelegate>
                               ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTFirebaseAdMobPlugin.m:138:16: warning: 'kGADAdSizeSmartBannerPortrait' is deprecated: Use GADPortraitAnchoredAdaptiveBannerAdSizeWithWidth. [-Wdeprecated-declarations]
          adSize = kGADAdSizeSmartBannerPortrait;
                   ^
    In module 'GoogleMobileAds' imported from /Users/lk/files/projects/flutter/vocab_master/ios/Pods/Headers/Public/Firebase/Firebase.h:125:
    /Users/lk/files/projects/flutter/vocab_master/build/ios/Debug-iphonesimulator/XCFrameworkIntermediates/GoogleMobileAds/GoogleMobileAds.framework/Headers/GADAdSize.h:126:5: note: 'kGADAdSizeSmartBannerPortrait' has been explicitly marked deprecated here
        GAD_DEPRECATED_MSG_ATTRIBUTE("Use GADPortraitAnchoredAdaptiveBannerAdSizeWithWidth.");
        ^
    In module 'GoogleMobileAds' imported from /Users/lk/files/projects/flutter/vocab_master/ios/Pods/Headers/Public/Firebase/Firebase.h:125:
    /Users/lk/files/projects/flutter/vocab_master/build/ios/Debug-iphonesimulator/XCFrameworkIntermediates/GoogleMobileAds/GoogleMobileAds.framework/Headers/GoogleMobileAdsDefines.h:25:56: note: expanded from macro 'GAD_DEPRECATED_MSG_ATTRIBUTE'
    #define GAD_DEPRECATED_MSG_ATTRIBUTE(s) __attribute__((deprecated(s)))
                                                           ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTFirebaseAdMobPlugin.m:140:16: warning: 'kGADAdSizeSmartBannerLandscape' is deprecated: Use GADLandscapeAnchoredAdaptiveBannerAdSizeWithWidth [-Wdeprecated-declarations]
          adSize = kGADAdSizeSmartBannerLandscape;
                   ^
    In module 'GoogleMobileAds' imported from /Users/lk/files/projects/flutter/vocab_master/ios/Pods/Headers/Public/Firebase/Firebase.h:125:
    /Users/lk/files/projects/flutter/vocab_master/build/ios/Debug-iphonesimulator/XCFrameworkIntermediates/GoogleMobileAds/GoogleMobileAds.framework/Headers/GADAdSize.h:131:5: note: 'kGADAdSizeSmartBannerLandscape' has been explicitly marked deprecated here
        GAD_DEPRECATED_MSG_ATTRIBUTE("Use GADLandscapeAnchoredAdaptiveBannerAdSizeWithWidth");
        ^
    In module 'GoogleMobileAds' imported from /Users/lk/files/projects/flutter/vocab_master/ios/Pods/Headers/Public/Firebase/Firebase.h:125:
    /Users/lk/files/projects/flutter/vocab_master/build/ios/Debug-iphonesimulator/XCFrameworkIntermediates/GoogleMobileAds/GoogleMobileAds.framework/Headers/GoogleMobileAdsDefines.h:25:56: note: expanded from macro 'GAD_DEPRECATED_MSG_ATTRIBUTE'
    #define GAD_DEPRECATED_MSG_ATTRIBUTE(s) __attribute__((deprecated(s)))
                                                           ^
    2 warnings and 4 errors generated.
    In file included from /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:5:
    In file included from /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.h:6:
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTFirebaseAdMobPlugin.h:28:4: error: expected a type
    - (GADUnifiedNativeAdView *)createNativeAd:(GADUnifiedNativeAd *)nativeAd
       ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTFirebaseAdMobPlugin.h:28:45: error: expected a type
    - (GADUnifiedNativeAdView *)createNativeAd:(GADUnifiedNativeAd *)nativeAd
                                                ^
    In file included from /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:5:
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.h:39:45: error: no type or protocol named 'GADInterstitialDelegate'
    @interface FLTInterstitialAd : FLTMobileAd <GADInterstitialDelegate>
                                                ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.h:44:28: error: no type or protocol named 'GADUnifiedNativeAdLoaderDelegate'
        : FLTMobileAdWithView <GADUnifiedNativeAdLoaderDelegate, GADUnifiedNativeAdDelegate>
                               ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:39:17: error: no known class method for selector 'configureWithApplicationID:'
      [GADMobileAds configureWithApplicationID:appId];
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:97:79: warning: implicit conversion loses integer precision: 'FLTMobileAdStatus' to 'int' [-Wshorten-64-to-32]
      NSString *statusString = (NSString *)statusToString[[NSNumber numberWithInt:_status]];
                                                          ~                       ^~~~~~~
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:211:69: error: expected a type
    - (void)adView:(GADBannerView *)adView didFailToReceiveAdWithError:(GADRequestError *)error {
                                                                        ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:242:3: error: unknown type name 'GADInterstitial'; did you mean 'GADInterstitialAd'?
      GADInterstitial *_interstitial;
      ^~~~~~~~~~~~~~~
      GADInterstitialAd
    In module 'GoogleMobileAds' imported from /Users/lk/files/projects/flutter/vocab_master/ios/Pods/Headers/Public/Firebase/Firebase.h:125:
    /Users/lk/files/projects/flutter/vocab_master/build/ios/Debug-iphonesimulator/XCFrameworkIntermediates/GoogleMobileAds/GoogleMobileAds.framework/Headers/GADInterstitialAd.h:28:12: note: 'GADInterstitialAd' declared here
    @interface GADInterstitialAd : NSObject <GADFullScreenPresentingAd>
               ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:271:35: error: expected a type
    - (void)interstitialDidReceiveAd:(GADInterstitial *)ad {
                                      ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:278:23: error: expected a type
    - (void)interstitial:(GADInterstitial *)ad didFailToReceiveAdWithError:(GADRequestError *)error {
                          ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:278:73: error: expected a type
    - (void)interstitial:(GADInterstitial *)ad didFailToReceiveAdWithError:(GADRequestError *)error {
                                                                            ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:284:40: error: expected a type
    - (void)interstitialWillPresentScreen:(GADInterstitial *)ad {
                                           ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:288:40: error: expected a type
    - (void)interstitialWillDismissScreen:(GADInterstitial *)ad {
                                           ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:292:39: error: expected a type
    - (void)interstitialDidDismissScreen:(GADInterstitial *)ad {
                                          ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:296:43: error: expected a type
    - (void)interstitialWillLeaveApplication:(GADInterstitial *)ad {
                                              ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:255:21: error: unknown receiver 'GADInterstitial'; did you mean 'GADInterstitialAd'?
      _interstitial = [[GADInterstitial alloc] initWithAdUnitID:adUnitId];
                        ^~~~~~~~~~~~~~~
                        GADInterstitialAd
    In module 'GoogleMobileAds' imported from /Users/lk/files/projects/flutter/vocab_master/ios/Pods/Headers/Public/Firebase/Firebase.h:125:
    /Users/lk/files/projects/flutter/vocab_master/build/ios/Debug-iphonesimulator/XCFrameworkIntermediates/GoogleMobileAds/GoogleMobileAds.framework/Headers/GADInterstitialAd.h:28:12: note: 'GADInterstitialAd' declared here
    @interface GADInterstitialAd : NSObject <GADFullScreenPresentingAd>
               ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:255:44: error: no visible @interface for 'GADInterstitialAd' declares the selector 'initWithAdUnitID:'
      _interstitial = [[GADInterstitial alloc] initWithAdUnitID:adUnitId];
                       ~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:256:17: error: property 'delegate' not found on object of type 'GADInterstitialAd *'
      _interstitial.delegate = self;
                    ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:258:18: error: no visible @interface for 'GADInterstitialAd' declares the selector 'loadRequest:'
      [_interstitial loadRequest:[factory createRequest]];
       ~~~~~~~~~~~~~ ^~~~~~~~~~~
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTMobileAd.m:313:3: error: unknown type name 'GADUnifiedNativeAdView'; did you mean 'GADNativeAdView'?
      GADUnifiedNativeAdView *_nativeAd;
      ^~~~~~~~~~~~~~~~~~~~~~
      GADNativeAdView
    In module 'GoogleMobileAds' imported from /Users/lk/files/projects/flutter/vocab_master/ios/Pods/Headers/Public/Firebase/Firebase.h:125:
    /Users/lk/files/projects/flutter/vocab_master/build/ios/Debug-iphonesimulator/XCFrameworkIntermediates/GoogleMobileAds/GoogleMobileAds.framework/Headers/GADNativeAd.h:114:12: note: 'GADNativeAdView' declared here
    @interface GADNativeAdView : UIView
               ^
    fatal error: too many errors emitted, stopping now [-ferror-limit=]
    1 warning and 20 errors generated.
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTRewardedVideoAdWrapper.m:61:5: error: use of undeclared identifier 'GADRewardBasedVideoAd'
      [[GADRewardBasedVideoAd sharedInstance]
        ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTRewardedVideoAdWrapper.m:66:5: error: use of undeclared identifier 'GADRewardBasedVideoAd'
      [[GADRewardBasedVideoAd sharedInstance] setUserIdentifier:userIdentifier];
        ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTRewardedVideoAdWrapper.m:70:5: error: use of undeclared identifier 'GADRewardBasedVideoAd'
      [[GADRewardBasedVideoAd sharedInstance] setCustomRewardString:customRewardString];
        ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTRewardedVideoAdWrapper.m:75:66: warning: implicit conversion loses integer precision: 'FLTRewardedVideoAdStatus' to 'int' [-Wshorten-64-to-32]
          (NSString *)rewardedStatusToString[[NSNumber numberWithInt:_rewardedStatus]];
                                             ~                       ^~~~~~~~~~~~~~~
    1 warning and 16 errors generated.
    In file included from /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTRequestFactory.m:6:
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTFirebaseAdMobPlugin.h:28:4: error: expected a type
    - (GADUnifiedNativeAdView *)createNativeAd:(GADUnifiedNativeAd *)nativeAd
       ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTFirebaseAdMobPlugin.h:28:45: error: expected a type
    - (GADUnifiedNativeAdView *)createNativeAd:(GADUnifiedNativeAd *)nativeAd
                                                ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTRequestFactory.m:71:13: error: property 'testDevices' not found on object of type 'GADRequest *'
        request.testDevices = testDevices;
                ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTRequestFactory.m:91:15: error: property 'birthday' not found on object of type 'GADRequest *'
          request.birthday =
                  ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTRequestFactory.m:106:19: error: property 'gender' not found on object of type 'GADRequest *'
              request.gender = genderValue;
                      ^
    /Users/lk/programs/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.11.0+1/ios/Classes/FLTRequestFactory.m:116:14: error: no visible @interface for 'GADRequest' declares the selector 'tagForChildDirectedTreatment:'
        [request tagForChildDirectedTreatment:childDirected.boolValue];
         ~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    6 errors generated.

Upvotes: 2

Views: 986

Answers (1)

Alexey Tropin
Alexey Tropin

Reputation: 21

Add to Podfile:

target 'Runner' do
  use_frameworks!
  use_modular_headers!

  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))

  # TODO: remove this once this issue is resolved:
  # https://github.com/FirebaseExtended/flutterfire/issues/4931
  pod 'Google-Mobile-Ads-SDK', '~> 7.69.0' # this line
end

Upvotes: 1

Related Questions