iOS SDK Changelog
| Version | Date | Description |
|---|---|---|
| 3.4.8 | 2026.10.30 | Budget-source template rendering hardening (paired with UjuAdExt 3.5.9; the podspec now requires UjuAdCore ~> 3.4.8): ① UjuAdExt 3.5.9 restores the Adx28 resource bundle — the 14 template UI assets that DSP loads by name (close button / mute / play button / swipe hints / ad badge, etc.) had never shipped with the package, so they silently went missing during template rendering; the bundle now ships, and the packaging step gained a resource-integrity audit (scans each vendored binary's bundle/asset references and cross-checks them against the shipped bundles and the podspec declarations, so this class of defect is now caught at build time); ② unified feed/banner template mounting geometry: once the template view's size is ready it is mounted through an aspect-scaling host instead of pinning the height captured at show time with a required constraint (which could be stale/zero when rendering completes asynchronously); banner templates whose real height mismatches the container slot keep their true aspect ratio and report it via FeedAdObjectListener.onAdSizeChanged (no longer stretched/clipped by four-edge fill), while matched ratios behave exactly as before; ③ material failures are no longer silent: a failed main-image download in the core self-render path now logs an error and retries once, and the Adx32 budget source gained observability logs for multi-image truncation, icon download failures and video-to-image degradation |
| 3.4.7 | 2026.10.28 | UjuAdExt 3.5.8: Adx22 budget source removed (its third-party SDK's static library exports unprefixed global symbols that conflict — duplicate symbol — with certain third-party SDKs the host app may also integrate; when the SDK cannot find that adapter via reflection it simply skips it, other budget sources are unaffected). The Vendor/ directory now contains 5 DSPs (Adx21 / Adx24 / Adx28 / Adx32 / Adx33), the zip is ~123 MB, and Adx33_Core is the only remaining dynamic library; placements still using Adx22 should switch to other budget sources or stay on UjuAdExt 3.5.7 |
| 3.4.7 | 2026.10.28 | Self-healing when the initial app-strategy fetch fails (paired with UjuAdExt 3.5.7; the podspec now requires UjuAdCore ~> 3.4.7): ① when the first app-strategy fetch fails the SDK applies the default strategy immediately and finishes initialization without blocking for seconds, then re-fetches in the background with 3s / 10s / 30s backoff; account configs that arrive late now initialize their budget-source adapters directly (previously they could be left pending, showing up as strategies never updating after install and every budget source reporting "adapter not initialized"); ② the interstitial bid-request slot and the display media box now share one geometry (0.82 × window width, 3:4) so creatives are no longer cropped by aspect mismatch, the card is kept inside the window so the close button / ad badge stay visible, and oversized H5 templates shrink to fit; ③ more diagnostic logs for strategy loading / periodic refresh. UjuAdExt 3.5.7 is a paired release (no functional change; now requires UjuAdCore ~> 3.4.7) |
| 3.4.7 | 2026.10.28 | UjuRevGromoreAdapter 3.4.7: the native (feed) adapter now implements FeedAdObjectListener.onAdSizeChanged and resizes the GroMore express view when a foldable device folds / unfolds; new debug bid-multiplier switch (UserDefaults key uju.debug.gromoreEcpmMultiplier, default 1 = off, for diagnosing lost auctions only); verified on CSJ Mediation SDK 7.9.0.0 — podspec dependency relaxed to Ads-CN-Beta ~> 7.8 and tightened to UjuAdCore ~> 3.4.7 |
| 3.4.6 | 2026.10.27 | iOS 27.1 / iPhone Duo foldable adaptation (paired with UjuAdExt 3.5.6; the podspec now requires UjuAdCore ~> 3.4.6): ① screen size / scale / orientation are now read live from the host's current window scene (no more init-time snapshot, no dependency on the deprecated UIScreen.main), so bid slot sizes and every budget source's template load size follow fold / unfold / Split View / rotation; ② UjuAdConfig.adViewSize now takes effect (in points; used as the banner / native bid slot and template load size, width capped at the window width); ③ new FeedAdObjectListener.onAdSizeChanged(width:height:) (default empty) fires when a rendered banner / native ad changes size; ④ interstitial card capped at 420pt in regular width, and the constraint-priority issue that could push the card off-screen in wide / landscape windows is fixed; the rewarded page centers its content column with a max width in regular width and responds to size-class changes; ⑤ UjuAdExt 3.5.6: budget-source template views now re-scale automatically with the container width (instead of staying at the first show-time scale), splash views resize with the window, and portrait-normalized request sizes are removed. See FAQ Q21 |
| 3.4.5 | 2026.10.22 | Bid floors now honored: per-source bid floors delivered in the placement strategy are now passed along with each budget source's bid request (requires UjuAdExt 3.5.5; the podspec now requires UjuAdCore ~> 3.4.5). UjuAdExt 3.5.5 also fixes the dSYM directory layout inside the 3.5.4 zip (affects XCFramework manual integration only; CocoaPods integration is unaffected) |
| 3.4.5 | 2026.10.22 | UjuRevGromoreAdapter 3.4.5: fixes adapter callback loss (the bridge is now strongly retained; previously, after GroMore released the loader, callbacks could be lost — manifesting as successful ad loads with no fill recorded at the aggregation layer and bidding not taking effect); mediatedAdStatus aligned with the official reference implementation (only returns valid); the native feed adapter gains a deinit fallback teardown; added bridge callback dispatch logging. Integrators on 3.4.3 are advised to upgrade |
| 3.4.4 | 2026.10.22 | SDK stability hardening (no changes to integration or public APIs): ① crash capture no longer touches SIGPIPE, and saves/restores crash handlers the host app registered before the SDK (no longer overriding Bugly/Crashlytics etc.); ② background-entry analytics reporting now runs on a background queue (previously it synchronously waited on the network for up to 30s on the main thread, which could trigger the iOS watchdog and terminate the host app on weak networks); ③ server-delivered bid prices are uniformly sanitized (NaN/Infinity/out-of-range values no longer cause crashes). UjuAdExt 3.5.4 podspec now requires UjuAdCore ~> 3.4.4 — all integrators are advised to upgrade |
| 3.4.3 | 2026.10.22 | UjuAdExt 3.5.4: ships dSYMs for the two dynamic-library third-party SDKs (Adx22_SSL / Adx33_Core, in a sibling .dSYMs directory plus embedded inside the xcframeworks), fixing App Store Connect "Upload Symbols Failed / missing dSYM" on symbol upload; CocoaPods integration automatically includes the dSYMs in archives — for manual integration see FAQ Q19 |
| 3.4.3 | 2026.10.21 | UjuAdExt 3.5.3: fixes runtime loading failures on device of two dynamic-library third-party SDKs in 3.5.2; integration is identical to 3.5.2. Integrators on 3.5.2 are advised to upgrade to 3.5.3 as soon as possible |
| 3.4.3 | 2026.10.21 | Error code normalization: ad no-fill (UjuAd ADX no bid, or aggregated budget sources returning no ad) now uniformly calls back code=102 / message="No fill" in onLoadError; other load failures remain code=100; released alongside UjuAdExt 3.5.1 (budget package), fixing ad display issues of some aggregated budget sources. UjuAdExt 3.5.1 must be used with UjuAdCore ≥ 3.4.3 |
| 3.4.3 | 2026.10.21 | Added UjuRevGromoreAdapter 3.4.3 (CSJ GroMore reverse aggregation adapter, custom ADN, Client Bidding supported, automatically depends on Ads-CN-Beta 7.8.x); UjuRevToBidAdapter 5.7.4 / UjuCsjAdapter 1.0.0 now automatically depend on their third-party SDKs |
| 3.4.3 | 2026.10.21 | CocoaPods integration fixes: all component podspecs now inject -force_load / SWIFT_INCLUDE_PATHS uniformly (both device and simulator link correctly), deployment target unified to iOS 15.0; UjuAdExt 3.5.1 did not support CocoaPods integration — use manual integration for that version |
| 3.4.3 | 2026.10.21 | UjuAdExt 3.5.2: inner framework names of third-party DSP SDKs now match the outer neutral names; CocoaPods integration available (simulator must be built as x86_64 via the documented post_install); manual integration unchanged |
| 3.4.2 | 2026.8.15 | Added UjuAdExt budget package: expanding ad fill sources; added UjuAdExt.podspec + build script (supports on-demand compilation); integration docs updated with UjuAdExt integration guide. |
| 3.4.2 | 2026.8.9 | Integration revision: Added -force_load and ENABLE_DEBUG_DYLIB=NO as required Build Settings entries; fixed Xcode 26 ManagedAtomic.__allocating_init EXC_BAD_ACCESS crash (see FAQ Q12); UjuGRPCStatic re-merged into UjuAdCore.xcframework (single xcframework distribution). |
| 3.4.2 | 2026.7.26 | Initial release: Supports 5 ad formats (splash / rewarded video / interstitial / banner / native); XCFramework + CocoaPods dual integration methods; symbol obfuscation (strip -x); built-in ADX self-owned ad sources; region configuration (.domestic / .singapore). |
Contact Us
- Technical Support: marco@ujuad.com
