🆕 Changelog
Security
- Hardened
unsetChannelagainst unauthorized channel changes.unsetChannelnow respects theallowSetDefaultChannelsetting. Calls that would clear a channel are rejected when the channel guard is locked, preventing accidental or malicious removal of a configured channel. - Surfaced
disabled_by_configrejection reason for blocked channel operations. Channel change rejections now include a cleardisabled_by_configreason, making it easier to detect and handle configuration-driven restrictions.
Fixed
- Restored iOS error code mapping for
setChannelrejections.setChannelrejection errors on iOS now return the correct mapped error codes again, improving diagnostic clarity when channel assignments fail. - Fixed an example-app race condition between stats URL validation and latest-version probing. Stats URL verification is no longer tied to
probeLatest, removing flakiness and ensuring runtime URLs are validated in the correct order. - Updated example-app channel guard expectations to match the new rejection behavior. Tests now assert that
unsetChannelis rejected while the channel guard is locked, withdisabled_by_configreturned in the rejection data.
🔗 Full Changelog: 8.51.24...8.51.25