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
- Is this a known compatibility issue between IronSourceAdQualitySDK 9.9.0 and Google Mobile Ads SDK 13.8.0?
- How can an unwrapped
FLTBannerAd reach SMLListenersBridge after the setDelegate: swizzle?
- Can this be caused by an Ad Quality remote connector or listener configuration?
- Is a patched SDK, remote configuration fix, compatible version combination, or temporary workaround available?
- How can we collect
connectorName, listenerName, remoteStackTrace, and the related SML file/method/line?
Summary
We are seeing an intermittent production crash on iOS while loading or displaying an AdMob banner.
SMLListenersBridgeexpects anSMLDelegate, but receives the originalFLTBannerAd. The resultingNSInvalidArgumentExceptionis 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
IronSourceAdQualitySDKis included through both dependency paths:IronSourceSDK/AdQualityUnityAdsException
The crash is an uncaught
NSInvalidArgumentExceptionon the main thread.Investigation
Binary inspection maps the exception to:
The failing caller appears to be one of:
Both methods validate argument 0 as
SMLDelegate, but the actual object is an unwrappedFLTBannerAd.SMLAdMobBridgeswizzlesGADBannerView setDelegate:and its implementation calls:The Google Mobile Ads Flutter plugin normally sets:
where
selfisFLTBannerAd.This is longstanding upstream behavior:
Our application does not access
GADBannerView.delegateor any SML classes directly.Expected Behavior
SMLAdMobBridgeshould consistently wrap the originalFLTBannerAddelegate as anSMLDelegatebefore passing it toSMLListenersBridge.Actual Behavior
An unwrapped
FLTBannerAdreachesSMLListenersBridge, fails theSMLDelegatetype 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
FLTBannerAdreachSMLListenersBridgeafter thesetDelegate:swizzle?connectorName,listenerName,remoteStackTrace, and the related SML file/method/line?