'Swift Admob does not show Ad

I am trying to implement an Google AdMob banner ad in my swift application and it simply doesn't show up. I extended the plist to the following.

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-???</string>
<key>SKAdNetworkItems</key>
  <array>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>cstr6suwn9.skadnetwork</string>
    </dict>
    ...
  </array>

Edited AppDelegate.swift...

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    GADMobileAds.sharedInstance().start(completionHandler: nil)
    return true
}

And implemented the banner in my ViewController...

import UIKit
import GoogleMobileAds

class ViewController: UIViewController {

...

private let banner: GADBannerView = {
    let banner = GADBannerView()
    banner.adUnitID = "ca-app-pub-???/???"
    banner.load(GADRequest())
    banner.backgroundColor = .secondarySystemBackground
    return banner
}()

override func viewDidLoad() {
    super.viewDidLoad()
    banner.rootViewController = self
    view.addSubview(banner)
    ...
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    banner.frame = CGRect(x: 0, y: view.frame.size.height-50, width: view.frame.size.width, height: 50)
}
...
}

This code causes the following error and the banner doesn't show up:

    2022-02-18 19:12:45.453836+0100 TestApp[70970:5163578] <Google> To get test ads on this device, set:         
Objective-C        
    GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = @[ GADSimulatorID ];        
Swift        
    GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = [ GADSimulatorID ]        
2022-02-18 19:12:45.464778+0100 TestApp[70970:5163713]  - <Google>[I-ACS025031] AdMob App ID changed. Original, new: (nil), ca-app-pub-???        
2022-02-18 19:12:45.520401+0100 TestApp[70970:5163714] [Client] Synchronous remote object proxy returned error: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process." UserInfo={NSDebugDescription=The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process.}        
2022-02-18 19:12:45.520411+0100 TestApp[70970:5163713] [Client] Updating selectors failed with: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process." UserInfo={NSDebugDescription=The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process.}        
2022-02-18 19:12:45.520643+0100 TestApp[70970:5163714] [Client] Synchronous remote object proxy returned error: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process." UserInfo={NSDebugDescription=The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process.}        
2022-02-18 19:12:45.520657+0100 TestApp[70970:5163718] [Client] Updating selectors failed with: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process." UserInfo={NSDebugDescription=The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process.}        
2022-02-18 19:12:45.520824+0100 TestApp[70970:5163714] [Client] Synchronous remote object proxy returned error: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process." UserInfo={NSDebugDescription=The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process.}        
2022-02-18 19:12:45.520939+0100 TestApp[70970:5163718] [Client] Updating selectors failed with: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process." UserInfo={NSDebugDescription=The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process.}        
2022-02-18 19:12:45.522075+0100 TestApp[70970:5163718] [Client] Updating selectors failed with: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process." UserInfo={NSDebugDescription=The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process.}        
2022-02-18 19:12:45.522129+0100 TestApp[70970:5163718] [Client] Updating selectors after delegate addition failed with: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process." UserInfo={NSDebugDescription=The connection to service named com.apple.commcenter.coretelephony.xpc was invalidated: failed at lookup with error 3 - No such process.}        
2022-02-18 19:12:45.522084+0100 TestApp[70970:5163714]  - <Google>[I-ACS023007] Analytics v.81200000 started        
2022-02-18 19:12:45.522389+0100 TestApp[70970:5163714]  - <Google>[I-ACS023008] To enable debug logging set the following application argument: -APMAnalyticsDebugEnabled (see xxx)        
2022-02-18 19:12:45.552092+0100 TestApp[70970:5163578] Writing analzed variants.        
2022-02-18 19:12:45.588346+0100 TestApp[70970:5163718]  - <Google>[I-ACS800023] No pending snapshot to activate. SDK name: app_measurement        
2022-02-18 19:12:45.616229+0100 TestApp[70970:5163578] Writing analzed variants.        
2022-02-18 19:12:45.636629+0100 TestApp[70970:5163578] [plugin] AddInstanceForFactory: No factory registered for id <CFUUID 0x60000178d2c0> F8BB1C28-BAE8-???   
2022-02-18 19:12:45.692429+0100 TestApp[70970:5163721]  - <Google>[I-ACS023012] Analytics collection enabled        
2022-02-18 19:12:45.912031+0100 TestApp[70970:5163717] [boringssl] boringssl_metrics_log_metric_block_invoke(144) Failed to log metrics        


Solution 1:[1]

Initialisation of GADBannerView is might be wrong in your project as they need adSize as frame

this working fine on my application , I have working production ads,

class HomePageViewController: UIViewController {
    private var adMobBannerView1: GADBannerView!
    private var adMobBannerView2: GADBannerView!
    
    override func viewDidLoad() {
         setupAdMobBannerAD()
       }

    private func setupAdMobBannerAD() {
        let sizeForBanner = GADAdSizeFromCGSize(.init(width: view.frame.width, height: 50))

        // here you need to intilise GADBannerView with adSize of GADAdSizeFromCGSize

        adMobBannerView1 = GADBannerView(adSize: sizeForBanner)
        adMobBannerView2 = GADBannerView(adSize: sizeForBanner)
        
        adMobBannerView1.translatesAutoresizingMaskIntoConstraints = false
        adMobBannerView2.translatesAutoresizingMaskIntoConstraints = false
        
        view.addSubview(adMobBannerView1)
        view.addSubview(adMobBannerView2)
        
        adMobBannerView1.delegate = self
        adMobBannerView2.delegate = self
        
        NSLayoutConstraint.activate([
            adMobBannerView1.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
            adMobBannerView1.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor),
            
            adMobBannerView2.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor , constant: 20 ),
            adMobBannerView2.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor),
            
            
        ])
        
        adMobBannerView2.adUnitID = Constants.secondAdBannerString
       // I have saved my bannerID String in another class don't worry about this
        adMobBannerView2.rootViewController = self
        
        adMobBannerView1.adUnitID = Constants.firstAdBannerString
        // I have saved my bannerID String in another class don't worry about this
        adMobBannerView1.rootViewController = self
        
        adMobBannerView2.load(GADRequest())
        adMobBannerView1.load(GADRequest())
        }
    }

you want to add some delegate to get informed by admob if there is any problem with your ad account or something

extension HomePageViewController : GADBannerViewDelegate {
    
    func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
        print("admob banner ad failecd to show going to represent adolony \n")
        if DataModel.shared.showAdmobAd {
            self.requestAdColonyBanners()
            // any alternative method can be performed here as we this function will be called by admob incase you didn't get banner ad , in my case I m launching ads form another ad service called adcolony
        }
    }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1