Added
- Added
async/awaitvariants of the device-disabling methods:disableDeviceForCurrentUser() async throwsanddisableDeviceForAllUsers() async throws. These are additive — the existing completion-handler methods are unchanged. On failure they throw the publicSendRequestError. - Added a
logoutUser(withOnSuccess:onFailure:)overload toIterableAPI. Since logout is local-only, the handlers reflect thedisableDeviceForCurrentUsercall triggered whenautoPushRegistrationis enabled. The parameterlesslogoutUser()is unchanged. AuthFailureReasonnow conforms toCustomDebugStringConvertible, so theInt-backed enum prints readable case names (for example,authTokenExpired) in logs.
Fixed
- Fixed a crash showing out-of-the-box embedded messages on CocoaPods.
IterableEmbeddedView.xibmoved out ofResources/in 6.5.9, but the podspec only bundledResources/, so the nib was missing from the CocoaPods resource bundle andloadViewFromNib()crashed. The podspec now bundles the UI component XIBs too. SPM was not affected. - Fixed in-app message positioning in landscape on devices with a notch or Dynamic Island. The webview width and horizontal center now account for the left and right safe-area insets, so top, bottom, and center messages stay within the safe area instead of running under the notch. Full-screen messages are unchanged.
- Fixed a
String-length conflation (CWE-135) inDeepLinkManager.isIterableDeepLink. The regex search range is now built from the bridgedNSString.length(UTF-16) instead of the SwiftStringgrapheme-cluster count, so deep links containing non-BMP characters such as emoji are no longer missed.
Changed
IterableAPI.register(token:)is now routed through the offline queue, so a push token registration made while offline is automatically retried when connectivity returns instead of being dropped. The current user identity is captured at call time, so the queued request still targets the correct user after a logout or user switch. Callingregister(token:)without a current user identity now reportsonFailureinstead of silently sending the request.- Upgrade-then-downgrade hazard on UUA storage: the sessions blob in
UserDefaultsnow encodes withtotalUnknownSessionCount/lastUnknownSession/firstUnknownSession, and stored UUA events useeventTypeas the type discriminator. A customer who installs an SDK build with this change and later rolls back to a pre-SDK-412 build will hit a decode failure on the sessions blob (unknown user session counter resets to zero) and stored UUA events will be skipped on flush since the older SDK looks fordataType. Limited blast radius, but worth flagging for customers who pin or roll back versions.