diff --git a/CHANGELOG.md b/CHANGELOG.md index 727361808..3f0cff864 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). - `IterableConfig.Builder.setExpiringAuthTokenRefreshPeriod(Long)` — use the `double` overload instead, which accepts fractional seconds. The `Long` overload delegates to it and remains fully supported. - `IterableConstants.BASE_URL_API` and `IterableConstants.BASE_URL_LINKS` — both are hardcoded to the US data region and are unused by the SDK, which resolves its endpoint from the configured `IterableDataRegion`. Use `IterableDataRegion.getEndpoint()` instead. They still resolve to the same values, so no action is required in this release. **They will be removed in 3.12.0** — if you reference either constant, switch to `IterableDataRegion.getEndpoint()` before upgrading to that version. +### Removed +- Removed the `encryptionEnforced` field from `IterableConfig`. **No action required.** 3.5.5 announced this option as removed and deleted its public setter, but a merge reinstated the field — without the setter — in 3.6.0, where it has sat unsettable and unread ever since. There has been no way to set it and no effect on SDK behaviour since 3.5.5, so no app can be affected. Storage behaviour is unchanged: use `setKeychainEncryption(boolean)` to control whether stored user data is encrypted, and `setDecryptionFailureHandler(...)` to be notified when the SDK cannot decrypt it. + ## [3.10.1] ### Fixed - Fixed a race in JWT auth refresh scheduling that could leave overlapping timers active and repeatedly call `IterableAuthHandler.onAuthTokenRequested()`. Refresh scheduling now has a single task owner, rejects stale or duplicate tasks, and logs each schedule, skip, fire, cancellation, and error with its refresh reason. diff --git a/iterableapi/src/main/java/com/iterable/iterableapi/IterableConfig.java b/iterableapi/src/main/java/com/iterable/iterableapi/IterableConfig.java index 1d61a8eb2..e2517c79e 100644 --- a/iterableapi/src/main/java/com/iterable/iterableapi/IterableConfig.java +++ b/iterableapi/src/main/java/com/iterable/iterableapi/IterableConfig.java @@ -103,8 +103,6 @@ public class IterableConfig { */ final boolean useInMemoryStorageForInApps; - final boolean encryptionEnforced; - /** * Enables unknown user activation */ @@ -199,7 +197,6 @@ private IterableConfig(Builder builder) { allowedProtocols = builder.allowedProtocols; dataRegion = builder.dataRegion; useInMemoryStorageForInApps = builder.useInMemoryStorageForInApps; - encryptionEnforced = builder.encryptionEnforced; enableUnknownUserActivation = builder.enableUnknownUserActivation; enableForegroundCriteriaFetch = builder.enableForegroundCriteriaFetch; enableEmbeddedMessaging = builder.enableEmbeddedMessaging; @@ -233,7 +230,6 @@ public static class Builder { private boolean keychainEncryption = true; private IterableAPIMobileFrameworkInfo mobileFrameworkInfo; private IterableDecryptionFailureHandler decryptionFailureHandler; - private boolean encryptionEnforced = false; private boolean enableUnknownUserActivation = false; private boolean enableForegroundCriteriaFetch = true; private boolean enableEmbeddedMessaging = false; diff --git a/iterableapi/src/test/java/com/iterable/iterableapi/IterableConfigTest.kt b/iterableapi/src/test/java/com/iterable/iterableapi/IterableConfigTest.kt index bc16005a1..1cfc0c53c 100644 --- a/iterableapi/src/test/java/com/iterable/iterableapi/IterableConfigTest.kt +++ b/iterableapi/src/test/java/com/iterable/iterableapi/IterableConfigTest.kt @@ -203,4 +203,20 @@ class IterableConfigTest { setter.invoke(builder, null) assertEquals(60_000L, builder.build().expiringAuthTokenRefreshPeriodMillis) } + + /** + * `encryptionEnforced` was removed in 3.5.5 and then silently reinstated by a merge in 3.6.0, + * where it sat unread for four minor versions. Nothing in the build detects a re-added member, + * so this asserts its absence directly. + */ + @Test + fun encryptionEnforcedIsNotPartOfTheConfiguration() { + val members = listOf(IterableConfig::class.java, IterableConfig.Builder::class.java) + .flatMap { type -> + type.declaredFields.map { it.name } + type.declaredMethods.map { it.name } + } + .filter { it.contains("encryptionEnforced", ignoreCase = true) } + + assertTrue("encryptionEnforced was reintroduced: $members", members.isEmpty()) + } }