diff --git a/CHANGELOG.md b/CHANGELOG.md
index eab1ed28..a6d145b0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
---
+## Magnite adapter 1.0.0.2 - 2026-09-16
+
+Install: `pod 'CloudXMagniteAdapterV2', '~> 1.0.0.2'`
+
+### Added
+
+- **Magnite Native ads** — Adds standalone Native auction and waterfall support with MagniteSDK 1.0.0. Banner, MREC, Interstitial, and Rewarded support is unchanged. Requires `CloudXCore >= 3.9.0`.
+
+### Fixed
+
+- **Rejected fullscreen shows no longer report a display** — Prevents Interstitial and Rewarded from emitting `didDisplay` after Magnite synchronously rejects the show.
+
+---
+
## Unity Ads adapter 4.20.1.0 - 2026-09-15
Install: `pod 'CloudXUnityAdsAdapter', '~> 4.20.1.0'`
diff --git a/adapter-magnite/CloudXMagniteAdapterV2.podspec b/adapter-magnite/CloudXMagniteAdapterV2.podspec
index 925af8cb..aed2eeaa 100644
--- a/adapter-magnite/CloudXMagniteAdapterV2.podspec
+++ b/adapter-magnite/CloudXMagniteAdapterV2.podspec
@@ -1,8 +1,8 @@
Pod::Spec.new do |s|
s.name = 'CloudXMagniteAdapterV2'
- s.version = '1.0.0.1'
+ s.version = '1.0.0.2'
s.summary = 'CloudX Magnite Adapter (independent versioning) - Static Framework'
- s.description = 'Magnite adapter for CloudX iOS SDK - binary distribution. Supports Banner, MREC, Interstitial, and Rewarded formats via MagniteSDK. Independent-versioned successor to CloudXMagniteAdapter, which remains on the legacy unified version line.'
+ s.description = 'Magnite adapter for CloudX iOS SDK - binary distribution. Supports Banner, MREC, Interstitial, Rewarded, and Native formats via MagniteSDK. Independent-versioned successor to CloudXMagniteAdapter, which remains on the legacy unified version line.'
s.homepage = 'https://github.com/cloudx-io/cloudx-ios'
s.license = { :type => 'Business Source License 1.1' }
s.author = { 'CloudX' => 'support@cloudx.io' }
@@ -18,7 +18,7 @@ Pod::Spec.new do |s|
s.vendored_frameworks = 'adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework'
# Dependencies
- s.dependency 'CloudXCore', '>= 3.5.0'
+ s.dependency 'CloudXCore', '>= 3.9.0'
s.dependency 'MagniteSDK', '= 1.0.0'
s.frameworks = ['Foundation', 'UIKit', 'WebKit', 'AVFoundation', 'CoreMedia', 'CoreGraphics', 'CoreTelephony', 'SystemConfiguration', 'StoreKit', 'AdSupport', 'JavaScriptCore', 'QuartzCore', 'CoreFoundation', 'CoreAudio']
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework.zip b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework.zip
index 3be13d3e..921c4e3d 100644
Binary files a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework.zip and b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework.zip differ
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/Info.plist b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/Info.plist
index dbf083fc..35e37c4c 100644
--- a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/Info.plist
+++ b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/Info.plist
@@ -8,32 +8,32 @@
BinaryPath
CloudXMagniteAdapter.framework/CloudXMagniteAdapter
LibraryIdentifier
- ios-arm64_x86_64-simulator
+ ios-arm64
LibraryPath
CloudXMagniteAdapter.framework
SupportedArchitectures
arm64
- x86_64
SupportedPlatform
ios
- SupportedPlatformVariant
- simulator
BinaryPath
CloudXMagniteAdapter.framework/CloudXMagniteAdapter
LibraryIdentifier
- ios-arm64
+ ios-arm64_x86_64-simulator
LibraryPath
CloudXMagniteAdapter.framework
SupportedArchitectures
arm64
+ x86_64
SupportedPlatform
ios
+ SupportedPlatformVariant
+ simulator
CFBundlePackageType
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXMagniteAdapter b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXMagniteAdapter
index 1e3540a6..30afa156 100644
Binary files a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXMagniteAdapter and b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXMagniteAdapter differ
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXRendererResources.bundle/Info.plist b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXRendererResources.bundle/Info.plist
index a7628075..8975d751 100644
Binary files a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXRendererResources.bundle/Info.plist and b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXRendererResources.bundle/Info.plist differ
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/Info.plist b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/Info.plist
index 15e1fc77..746666ae 100644
Binary files a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/Info.plist and b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/Info.plist differ
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/cloudx_vast_video.html b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/cloudx_vast_video.html
index ffe95a30..9bbfbe14 100644
--- a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/cloudx_vast_video.html
+++ b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/cloudx_vast_video.html
@@ -136,12 +136,16 @@
nativePauseRequested = false;
playGuarded(video.play());
},
+ setMuted: function (muted) {
+ video.muted = !!muted;
+ },
/* Introspection for the SDK's device test suite; never creative-reachable (SDK-authored page). */
state: function () {
return JSON.stringify({
t: video.currentTime,
r: video.playbackRate,
p: video.paused,
+ m: video.muted,
lp: lastPlayhead,
sk: video.seeking,
sl: video.seekable.length
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteBanner.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteBanner.h
deleted file mode 100644
index 32a7067d..00000000
--- a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteBanner.h
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// CLXMagniteBanner.h
-// CloudXMagniteAdapter
-//
-
-#import
-
-#if __has_include()
-#import
-#else
-@import CloudXCore;
-#endif
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * Magnite banner adapter implementing CloudX adapter protocol.
- * Manages the lifecycle of Magnite banner/MREC ads including loading, showing, and cleanup.
- * Supports standard banner (320x50) and MREC (300x250).
- */
-@interface CLXMagniteBanner : CLXAdapterBanner
-
-/**
- * CloudX adapter delegate for receiving ad events.
- * Strong to keep the callback chain alive through the ad lifecycle. Cycle is broken in destroy.
- */
-/**
- * The underlying Magnite banner view
- */
-/**
- * SDK version of the Magnite SDK
- */
-/**
- * Magnite placement ID for this ad
- */
-@property (nonatomic, copy, readonly) NSString *placementID;
-
-/**
- * CloudX ad unit name for error messages and logging.
- */
-@property (nonatomic, copy, readonly, nullable) NSString *adUnitName;
-
-/**
- * Banner type (size)
- */
-@property (nonatomic, assign, readonly) CLXBannerType bannerType;
-
-/**
- * Initializes a new Magnite banner adapter
- * @param bidPayload Ad markup from bid response (nil for waterfall, non-nil for bidding)
- * @param placementID The Magnite placement ID (nullable - validation deferred to load())
- * @param adUnitName The CloudX placement name for error messages (nullable)
- * @param type The banner type/size
- * @param delegate The CloudX adapter delegate
- * @return Initialized banner adapter
- */
-- (instancetype)initWithBidPayload:(nullable NSString *)bidPayload
- placementID:(nullable NSString *)placementID
- adUnitName:(nullable NSString *)adUnitName
- type:(CLXBannerType)type;
-
-/**
- * Loads the banner ad
- */
-/**
- * Shows the banner ad from the given view controller
- * @param viewController The view controller to show from
- */
-/**
- * Destroys the banner ad and cleans up resources
- */
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteBannerFactory.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteBannerFactory.h
deleted file mode 100644
index de210064..00000000
--- a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteBannerFactory.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// CLXMagniteBannerFactory.h
-// CloudXMagniteAdapter
-//
-
-#import
-
-#if __has_include()
-#import
-#else
-@import CloudXCore;
-#endif
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * Factory for creating Magnite banner adapters.
- * Implements the CloudX adapter factory protocol for banner/MREC ads.
- */
-@interface CLXMagniteBannerFactory : CLXAdapterBannerFactory
-
-/**
- * Factory method to create a new factory instance
- * @return New factory instance
- */
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteBidTokenSource.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteBidTokenSource.h
deleted file mode 100644
index ed0ee68d..00000000
--- a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteBidTokenSource.h
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// CLXMagniteBidTokenSource.h
-// CloudXMagniteAdapter
-//
-
-#import
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * @class CLXMagniteBidTokenSource
- * @brief Provides Magnite bidding tokens for server-side bid requests
- */
-@interface CLXMagniteBidTokenSource : CLXBidTokenSource
-
-+ (instancetype)sharedInstance;
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteNative.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteNative.h
new file mode 100644
index 00000000..ef728cf0
--- /dev/null
+++ b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteNative.h
@@ -0,0 +1,57 @@
+//
+// CLXMagniteNative.h
+// CloudXMagniteAdapter
+//
+
+#import
+
+#import
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Magnite native adapter implementing the CloudX CLXAdapterNative contract.
+ * Manages the lifecycle of a Magnite native ad load, including impression/click
+ * fan-out and view-registration cleanup.
+ */
+@interface CLXMagniteNative : CLXAdapterNative
+
+/**
+ * Magnite placement ID for this ad.
+ */
+@property (nonatomic, copy, readonly, nullable) NSString *placementID;
+
+/**
+ * CloudX ad unit name for error messages and logging.
+ */
+@property (nonatomic, copy, readonly, nullable) NSString *adUnitName;
+
+/// Whether the requested native template requires a primary media asset.
+@property (nonatomic, assign, readonly) BOOL requiresMainMedia;
+
+/**
+ * Initializes a new Magnite native adapter.
+ * @param bidPayload Ad markup from bid response (nil for waterfall, non-nil for bidding)
+ * @param placementID The Magnite placement ID (nullable - validation deferred to load)
+ * @param adUnitName The CloudX placement name for error messages (nullable)
+ * @param localExtraParameters Publisher-supplied local extras (e.g. native video options)
+ * @param logger The CloudX adapter logger
+ * @return Initialized native adapter
+ */
+- (instancetype)initWithBidPayload:(nullable NSString *)bidPayload
+ placementID:(nullable NSString *)placementID
+ adUnitName:(nullable NSString *)adUnitName
+ localExtraParameters:(nullable NSDictionary *)localExtraParameters
+ logger:(id)logger;
+
+- (instancetype)initWithBidPayload:(nullable NSString *)bidPayload
+ placementID:(nullable NSString *)placementID
+ adUnitName:(nullable NSString *)adUnitName
+ localExtraParameters:(nullable NSDictionary *)localExtraParameters
+ requiresMainMedia:(BOOL)requiresMainMedia
+ logger:(id)logger;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteNativeAd.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteNativeAd.h
new file mode 100644
index 00000000..95703f92
--- /dev/null
+++ b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteNativeAd.h
@@ -0,0 +1,84 @@
+//
+// CLXMagniteNativeAd.h
+// CloudXMagniteAdapter
+//
+
+#import
+#import
+
+#import
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Abstraction over the subset of Magnite's `MGNINativeAdDetails` the adapter consumes.
+ *
+ * `MGNINativeAdDetails` ships as a concrete SDK class whose `mediaView`,
+ * `videoAspectRatio`, and `isVideo` accessors are read-only and populated
+ * internally by the SDK, so they cannot be stubbed on a real instance in a unit
+ * test. Depending on this protocol (which `MGNINativeAdDetails` satisfies via
+ * the category below) lets the adapter be exercised with a deterministic test
+ * double while keeping the dependency inverted on the abstraction rather than
+ * the concrete SDK type.
+ */
+@protocol CLXMagniteNativeAdapting
+
+@property (nonatomic, copy, nullable) NSString *title;
+@property (nonatomic, copy, nullable) NSString *description;
+@property (nonatomic, copy, nullable) NSString *callToAction;
+@property (nonatomic, copy, nullable) NSString *clickToInstall;
+@property (nonatomic, copy, nullable) NSNumber *rating;
+@property (nonatomic, copy, nullable) NSString *imageUrl;
+@property (nonatomic, copy, nullable) NSString *secondaryImageUrl;
+@property (nonatomic, copy, nullable) UIImage *imageBitmap;
+@property (nonatomic, copy, nullable) UIImage *secondaryImageBitmap;
+@property (nonatomic, copy, readonly, nullable) UIImage *policyImage;
+@property (nonatomic, copy, readonly, nullable) NSString *eulaUrl;
+@property (nonatomic, readonly, nullable) UIView *mediaView;
+@property (nonatomic, readonly) CGFloat videoAspectRatio;
+@property (nonatomic, readonly) BOOL isVideo;
+@property (nonatomic, assign) BOOL videoMuted;
+
+- (void)registerViewForImpression:(UIView *)view andViewsForClick:(NSArray *)clickableViews;
+- (void)unregisterViews;
+
+@end
+
+/// `MGNINativeAdDetails` already implements every member of
+/// `CLXMagniteNativeAdapting`, so this category only declares the conformance —
+/// letting the adapter hold the SDK object behind the protocol without a
+/// wrapper.
+///
+/// The compiler verifies only that `MGNINativeAdDetails` responds to each
+/// selector, not that property attributes or return types match. A future
+/// `MagniteSDK` bump that changes one of these signatures compiles silently
+/// here and can surface as a runtime crash at the call site. Re-validate this
+/// protocol against `MGNINativeAdDetails` on every `MagniteSDK` upgrade (see
+/// the `DEBUG`-only runtime check in `CLXMagniteNative.m`).
+@interface MGNINativeAdDetails (CLXMagniteNativeAdapting)
+@end
+
+/**
+ * Concrete `CLXNativeAd` wrapping a Magnite native ad details handle.
+ *
+ * Registers the rendered container and clickable views for impression/click
+ * tracking via `registerViewForImpression:andViewsForClick:` in
+ * `prepareForInteractionClickableViews:withContainer:`. Holds the SDK object
+ * behind `CLXMagniteNativeAdapting` so it can be unit-tested with a fake.
+ */
+@interface CLXMagniteNativeAd : CLXNativeAd
+
+@property (nonatomic, strong, nullable) id magniteNativeAdDetails;
+
+- (instancetype)initWithNativeAdDetails:(id)nativeAdDetails
+ localExtraParameters:(nullable NSDictionary *)localExtraParameters
+ logger:(id)logger;
+
+/// Stops Magnite's impression/click tracking. Called when the native ad is
+/// replaced or destroyed.
+- (void)stopTracking;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteNativeFactory.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteNativeFactory.h
new file mode 100644
index 00000000..a3f29bc4
--- /dev/null
+++ b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CLXMagniteNativeFactory.h
@@ -0,0 +1,14 @@
+//
+// CLXMagniteNativeFactory.h
+// CloudXMagniteAdapter
+//
+
+#import
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CLXMagniteNativeFactory : CLXAdapterNativeFactory
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CloudXMagniteAdapter.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CloudXMagniteAdapter.h
index dcda0e46..9546faad 100644
--- a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CloudXMagniteAdapter.h
+++ b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Headers/CloudXMagniteAdapter.h
@@ -31,3 +31,8 @@ __attribute__((visibility("default"))) void CloudXMagniteAdapterRegister(void);
// Public headers - Banner
#import "CLXMagniteAdView.h"
#import "CLXMagniteAdViewFactory.h"
+
+// Public headers - Native
+#import "CLXMagniteNative.h"
+#import "CLXMagniteNativeAd.h"
+#import "CLXMagniteNativeFactory.h"
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Info.plist b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Info.plist
index 635f74f5..1f86891a 100644
Binary files a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Info.plist and b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64/CloudXMagniteAdapter.framework/Info.plist differ
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXMagniteAdapter b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXMagniteAdapter
index af59939c..864d79a0 100644
Binary files a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXMagniteAdapter and b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXMagniteAdapter differ
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXRendererResources.bundle/Info.plist b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXRendererResources.bundle/Info.plist
index eb482049..afdaca21 100644
Binary files a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXRendererResources.bundle/Info.plist and b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXRendererResources.bundle/Info.plist differ
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/Info.plist b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/Info.plist
index b814a45f..511842b1 100644
Binary files a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/Info.plist and b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/Info.plist differ
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/cloudx_vast_video.html b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/cloudx_vast_video.html
index ffe95a30..9bbfbe14 100644
--- a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/cloudx_vast_video.html
+++ b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/CloudXVASTResources.bundle/cloudx_vast_video.html
@@ -136,12 +136,16 @@
nativePauseRequested = false;
playGuarded(video.play());
},
+ setMuted: function (muted) {
+ video.muted = !!muted;
+ },
/* Introspection for the SDK's device test suite; never creative-reachable (SDK-authored page). */
state: function () {
return JSON.stringify({
t: video.currentTime,
r: video.playbackRate,
p: video.paused,
+ m: video.muted,
lp: lastPlayhead,
sk: video.seeking,
sl: video.seekable.length
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteBanner.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteBanner.h
deleted file mode 100644
index 32a7067d..00000000
--- a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteBanner.h
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// CLXMagniteBanner.h
-// CloudXMagniteAdapter
-//
-
-#import
-
-#if __has_include()
-#import
-#else
-@import CloudXCore;
-#endif
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * Magnite banner adapter implementing CloudX adapter protocol.
- * Manages the lifecycle of Magnite banner/MREC ads including loading, showing, and cleanup.
- * Supports standard banner (320x50) and MREC (300x250).
- */
-@interface CLXMagniteBanner : CLXAdapterBanner
-
-/**
- * CloudX adapter delegate for receiving ad events.
- * Strong to keep the callback chain alive through the ad lifecycle. Cycle is broken in destroy.
- */
-/**
- * The underlying Magnite banner view
- */
-/**
- * SDK version of the Magnite SDK
- */
-/**
- * Magnite placement ID for this ad
- */
-@property (nonatomic, copy, readonly) NSString *placementID;
-
-/**
- * CloudX ad unit name for error messages and logging.
- */
-@property (nonatomic, copy, readonly, nullable) NSString *adUnitName;
-
-/**
- * Banner type (size)
- */
-@property (nonatomic, assign, readonly) CLXBannerType bannerType;
-
-/**
- * Initializes a new Magnite banner adapter
- * @param bidPayload Ad markup from bid response (nil for waterfall, non-nil for bidding)
- * @param placementID The Magnite placement ID (nullable - validation deferred to load())
- * @param adUnitName The CloudX placement name for error messages (nullable)
- * @param type The banner type/size
- * @param delegate The CloudX adapter delegate
- * @return Initialized banner adapter
- */
-- (instancetype)initWithBidPayload:(nullable NSString *)bidPayload
- placementID:(nullable NSString *)placementID
- adUnitName:(nullable NSString *)adUnitName
- type:(CLXBannerType)type;
-
-/**
- * Loads the banner ad
- */
-/**
- * Shows the banner ad from the given view controller
- * @param viewController The view controller to show from
- */
-/**
- * Destroys the banner ad and cleans up resources
- */
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteBannerFactory.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteBannerFactory.h
deleted file mode 100644
index de210064..00000000
--- a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteBannerFactory.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// CLXMagniteBannerFactory.h
-// CloudXMagniteAdapter
-//
-
-#import
-
-#if __has_include()
-#import
-#else
-@import CloudXCore;
-#endif
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * Factory for creating Magnite banner adapters.
- * Implements the CloudX adapter factory protocol for banner/MREC ads.
- */
-@interface CLXMagniteBannerFactory : CLXAdapterBannerFactory
-
-/**
- * Factory method to create a new factory instance
- * @return New factory instance
- */
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteBidTokenSource.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteBidTokenSource.h
deleted file mode 100644
index ed0ee68d..00000000
--- a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteBidTokenSource.h
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// CLXMagniteBidTokenSource.h
-// CloudXMagniteAdapter
-//
-
-#import
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * @class CLXMagniteBidTokenSource
- * @brief Provides Magnite bidding tokens for server-side bid requests
- */
-@interface CLXMagniteBidTokenSource : CLXBidTokenSource
-
-+ (instancetype)sharedInstance;
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteNative.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteNative.h
new file mode 100644
index 00000000..ef728cf0
--- /dev/null
+++ b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteNative.h
@@ -0,0 +1,57 @@
+//
+// CLXMagniteNative.h
+// CloudXMagniteAdapter
+//
+
+#import
+
+#import
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Magnite native adapter implementing the CloudX CLXAdapterNative contract.
+ * Manages the lifecycle of a Magnite native ad load, including impression/click
+ * fan-out and view-registration cleanup.
+ */
+@interface CLXMagniteNative : CLXAdapterNative
+
+/**
+ * Magnite placement ID for this ad.
+ */
+@property (nonatomic, copy, readonly, nullable) NSString *placementID;
+
+/**
+ * CloudX ad unit name for error messages and logging.
+ */
+@property (nonatomic, copy, readonly, nullable) NSString *adUnitName;
+
+/// Whether the requested native template requires a primary media asset.
+@property (nonatomic, assign, readonly) BOOL requiresMainMedia;
+
+/**
+ * Initializes a new Magnite native adapter.
+ * @param bidPayload Ad markup from bid response (nil for waterfall, non-nil for bidding)
+ * @param placementID The Magnite placement ID (nullable - validation deferred to load)
+ * @param adUnitName The CloudX placement name for error messages (nullable)
+ * @param localExtraParameters Publisher-supplied local extras (e.g. native video options)
+ * @param logger The CloudX adapter logger
+ * @return Initialized native adapter
+ */
+- (instancetype)initWithBidPayload:(nullable NSString *)bidPayload
+ placementID:(nullable NSString *)placementID
+ adUnitName:(nullable NSString *)adUnitName
+ localExtraParameters:(nullable NSDictionary *)localExtraParameters
+ logger:(id)logger;
+
+- (instancetype)initWithBidPayload:(nullable NSString *)bidPayload
+ placementID:(nullable NSString *)placementID
+ adUnitName:(nullable NSString *)adUnitName
+ localExtraParameters:(nullable NSDictionary *)localExtraParameters
+ requiresMainMedia:(BOOL)requiresMainMedia
+ logger:(id)logger;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteNativeAd.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteNativeAd.h
new file mode 100644
index 00000000..95703f92
--- /dev/null
+++ b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteNativeAd.h
@@ -0,0 +1,84 @@
+//
+// CLXMagniteNativeAd.h
+// CloudXMagniteAdapter
+//
+
+#import
+#import
+
+#import
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Abstraction over the subset of Magnite's `MGNINativeAdDetails` the adapter consumes.
+ *
+ * `MGNINativeAdDetails` ships as a concrete SDK class whose `mediaView`,
+ * `videoAspectRatio`, and `isVideo` accessors are read-only and populated
+ * internally by the SDK, so they cannot be stubbed on a real instance in a unit
+ * test. Depending on this protocol (which `MGNINativeAdDetails` satisfies via
+ * the category below) lets the adapter be exercised with a deterministic test
+ * double while keeping the dependency inverted on the abstraction rather than
+ * the concrete SDK type.
+ */
+@protocol CLXMagniteNativeAdapting
+
+@property (nonatomic, copy, nullable) NSString *title;
+@property (nonatomic, copy, nullable) NSString *description;
+@property (nonatomic, copy, nullable) NSString *callToAction;
+@property (nonatomic, copy, nullable) NSString *clickToInstall;
+@property (nonatomic, copy, nullable) NSNumber *rating;
+@property (nonatomic, copy, nullable) NSString *imageUrl;
+@property (nonatomic, copy, nullable) NSString *secondaryImageUrl;
+@property (nonatomic, copy, nullable) UIImage *imageBitmap;
+@property (nonatomic, copy, nullable) UIImage *secondaryImageBitmap;
+@property (nonatomic, copy, readonly, nullable) UIImage *policyImage;
+@property (nonatomic, copy, readonly, nullable) NSString *eulaUrl;
+@property (nonatomic, readonly, nullable) UIView *mediaView;
+@property (nonatomic, readonly) CGFloat videoAspectRatio;
+@property (nonatomic, readonly) BOOL isVideo;
+@property (nonatomic, assign) BOOL videoMuted;
+
+- (void)registerViewForImpression:(UIView *)view andViewsForClick:(NSArray *)clickableViews;
+- (void)unregisterViews;
+
+@end
+
+/// `MGNINativeAdDetails` already implements every member of
+/// `CLXMagniteNativeAdapting`, so this category only declares the conformance —
+/// letting the adapter hold the SDK object behind the protocol without a
+/// wrapper.
+///
+/// The compiler verifies only that `MGNINativeAdDetails` responds to each
+/// selector, not that property attributes or return types match. A future
+/// `MagniteSDK` bump that changes one of these signatures compiles silently
+/// here and can surface as a runtime crash at the call site. Re-validate this
+/// protocol against `MGNINativeAdDetails` on every `MagniteSDK` upgrade (see
+/// the `DEBUG`-only runtime check in `CLXMagniteNative.m`).
+@interface MGNINativeAdDetails (CLXMagniteNativeAdapting)
+@end
+
+/**
+ * Concrete `CLXNativeAd` wrapping a Magnite native ad details handle.
+ *
+ * Registers the rendered container and clickable views for impression/click
+ * tracking via `registerViewForImpression:andViewsForClick:` in
+ * `prepareForInteractionClickableViews:withContainer:`. Holds the SDK object
+ * behind `CLXMagniteNativeAdapting` so it can be unit-tested with a fake.
+ */
+@interface CLXMagniteNativeAd : CLXNativeAd
+
+@property (nonatomic, strong, nullable) id magniteNativeAdDetails;
+
+- (instancetype)initWithNativeAdDetails:(id)nativeAdDetails
+ localExtraParameters:(nullable NSDictionary *)localExtraParameters
+ logger:(id)logger;
+
+/// Stops Magnite's impression/click tracking. Called when the native ad is
+/// replaced or destroyed.
+- (void)stopTracking;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteNativeFactory.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteNativeFactory.h
new file mode 100644
index 00000000..a3f29bc4
--- /dev/null
+++ b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CLXMagniteNativeFactory.h
@@ -0,0 +1,14 @@
+//
+// CLXMagniteNativeFactory.h
+// CloudXMagniteAdapter
+//
+
+#import
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CLXMagniteNativeFactory : CLXAdapterNativeFactory
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CloudXMagniteAdapter.h b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CloudXMagniteAdapter.h
index dcda0e46..9546faad 100644
--- a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CloudXMagniteAdapter.h
+++ b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Headers/CloudXMagniteAdapter.h
@@ -31,3 +31,8 @@ __attribute__((visibility("default"))) void CloudXMagniteAdapterRegister(void);
// Public headers - Banner
#import "CLXMagniteAdView.h"
#import "CLXMagniteAdViewFactory.h"
+
+// Public headers - Native
+#import "CLXMagniteNative.h"
+#import "CLXMagniteNativeAd.h"
+#import "CLXMagniteNativeFactory.h"
diff --git a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Info.plist b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Info.plist
index f8fbd0b7..a32a19d6 100644
Binary files a/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Info.plist and b/adapter-magnite/CloudXMagniteAdapterV2/CloudXMagniteAdapter.xcframework/ios-arm64_x86_64-simulator/CloudXMagniteAdapter.framework/Info.plist differ