SDK 21.0 splits the Scene/layout rendering engine out of AirshipCore into new modules, removes CocoaPods support, requires Xcode 27, brings on-device AI to Scenes and in-app experiences, includes a broad set of Scene layout fixes, and tightens the public API surface across modules. See the Migration Guide for details.
Changes
- Xcode 27 is now required to build the SDK.
- Removed CocoaPods support, ahead of Trunk's specs repo going read-only in December. Integrate via Swift Package Manager (recommended) or the prebuilt XCFrameworks.
- Tightened the public API surface across modules with
@_spi(AirshipInternal)/internal, and Swift Package targets now use internal imports by default. - Marked
AirshipUtils@_spi(AirshipInternal)and removed its unused public helper methods. - Removed the background-fetch app-integration method
AppIntegration.application(_:performFetchWithCompletionHandler:)and itsUAAppIntegrationObjective-C equivalent.
On-Device AI
- Added on-device AI support for three usages: in-app message suppression, embedded view selection, and Scene text-input inference.
- Added an optional
AirshipFoundationModelsmodule that wires a built-in on-device model into those usages. - Added the
AirshipFeature.onDeviceAIprivacy manager feature gating on-device AI.
Scenes
- Split the Scene rendering engine out of
AirshipCoreinto newAirshipSceneRendererandAirshipScenesmodules. Embedded views and custom views now requireimport AirshipScenes. - Added six
AirshipPermissioncases for the Composer's system-permission action. - Fixed a broad set of Scene layout and sizing issues. Verify your live Scenes after upgrading.
- Fixed in-app message banners clipping or oscillating in width on rotation.
- Fixed background media cropping instead of filling behind an auto-height layout.
- Fixed a label's end icon pulling its
[icon, text, icon]group off-center. - Fixed Scene text line height to consistently use the scaled-font-size approximation.
- Fixed a Pager crash when a page list emptied out or restored state drifted from it.
Embedded Views
- Added
AirshipEmbeddedCarousel, a carousel container for embedded content. - Ordered
AirshipEmbeddedViewStyleConfiguration.pendingby selection preference. - Added
filterInstances, a closure to exclude specific pending instances from selection. - Let
.instanceselection take an ordered list of instance IDs instead of just one. - Fixed embedded views not reacting to a changed
embeddedIDorselection.
Message Center
- Removed
MessageCenterUser,MessageCenterInbox.user, andMessageCenterNativeBridgeExtensionfrom the public API, along with their Objective-C equivalents. Use the providedMessageCenterMessageView/MessageCenterMessageContentViewUI instead.
Preference Center
- Marked
ChannelTextField,ErrorLabel, andAddChannelStateinternal.
Feature Flags
- Changed
FeatureFlagManager.featureFlagStatusUpdatesto emitFeatureFlagUpdateStatusinstead ofany Sendable.
Other Fixes
- Fixed
AirshipPrivacyManager.enableFeatures/disableFeaturespermanently baking a server-side feature disable into local storage. - Fixed a crash handling malformed native-bridge
run-action-cbURLs. - Fixed a regex range mismatch that could misparse non-ASCII audience matches, device tokens, or URL allow-list patterns.
- Fixed the Core Data store's
-waland-shmfiles being left behind when the store file is deleted.