Skip to content

[iOS] SMLListenersBridge crashes when FLTBannerAd is not wrapped as SMLDelegate #3

Description

@nodrift

Summary

We are seeing an intermittent production crash on iOS while loading or displaying an AdMob banner.

SMLListenersBridge expects an SMLDelegate, but receives the original FLTBannerAd. The resulting NSInvalidArgumentException is not caught and terminates the application.

Environment

  • IronSourceAdQualitySDK: 9.9.0

  • IronSourceSDK: 9.5.0

  • Google Mobile Ads iOS SDK: 13.8.0

  • google_mobile_ads Flutter plugin: 9.1.0

  • UnityAds: 4.19.0

  • iOS version/device: iOS26.6.2
    IronSourceAdQualitySDK is included through both dependency paths:

  • IronSourceSDK/AdQuality

  • UnityAds

Exception

Argument <FLTBannerAd: 0x14519c870> is not of class SMLDelegate

The crash is an uncaught NSInvalidArgumentException on the main thread.

Investigation

Binary inspection maps the exception to:

-[SMLNativeBridge getArg:atIndex:ofType:]

The failing caller appears to be one of:

-[SMLListenersBridge getMember:]
-[SMLListenersBridge setMemberValue:]

Both methods validate argument 0 as SMLDelegate, but the actual object is an unwrapped FLTBannerAd.

SMLAdMobBridge swizzles GADBannerView setDelegate: and its implementation calls:

wrapDelegate:forKey:withDelegateName:

The Google Mobile Ads Flutter plugin normally sets:

self.bannerView.delegate = self;

where self is FLTBannerAd.

This is longstanding upstream behavior:

Our application does not access GADBannerView.delegate or any SML classes directly.

Expected Behavior

SMLAdMobBridge should consistently wrap the original FLTBannerAd delegate as an SMLDelegate before passing it to SMLListenersBridge.

Actual Behavior

An unwrapped FLTBannerAd reaches SMLListenersBridge, fails the SMLDelegate type check, and crashes the application.

Reproduction Status

We have not yet produced a deterministic local reproduction. The issue is observed intermittently in production during the Banner lifecycle.

A sanitized crash report is attached.

Questions

  1. Is this a known compatibility issue between IronSourceAdQualitySDK 9.9.0 and Google Mobile Ads SDK 13.8.0?
  2. How can an unwrapped FLTBannerAd reach SMLListenersBridge after the setDelegate: swizzle?
  3. Can this be caused by an Ad Quality remote connector or listener configuration?
  4. Is a patched SDK, remote configuration fix, compatible version combination, or temporary workaround available?
  5. How can we collect connectorName, listenerName, remoteStackTrace, and the related SML file/method/line?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions