From d25665b623719c2cb4f78e32f48abb6e7b957cd9 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Mon, 22 Jun 2026 13:39:12 -0700 Subject: [PATCH 1/8] [FSSDK-12804] update CHANGELOG for swift v5.4.0 --- CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 477d4058..00baeb58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Optimizely Swift SDK Changelog +## 5.4.0 +June 22, 2026 + +### New Features + +**Local Holdouts**: Added support for Local Holdouts, enabling holdout experiments +to be scoped to specific feature flags rather than applied globally. +Local Holdouts let you measure the true incremental impact of individual features +by holding out a subset of users from specific rollouts while still serving them other experiences. +See [Holdouts docs](https://support.optimizely.com/hc/en-us/articles/32370102322-Govern-Holdouts-in-Feature-Experimentation) for more information. + +- add localHoldouts to datafile for backward compatibility ([#638](https://github.com/optimizely/swift-sdk/pull/638)) +- Revert local holdout feature gate logic ([#637](https://github.com/optimizely/swift-sdk/pull/637)) +- Block ODP identify event for single identifier ([#636](https://github.com/optimizely/swift-sdk/pull/636)) + ## 5.3.0 May 4, 2026 From ec65f993e3742add5120e6e2d2b826a7755c3afe Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Mon, 22 Jun 2026 13:40:42 -0700 Subject: [PATCH 2/8] [FSSDK-12804] bump version to 5.4.0 --- OptimizelySwiftSDK.podspec | 2 +- Sources/Utils/SDKVersion.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OptimizelySwiftSDK.podspec b/OptimizelySwiftSDK.podspec index 086169e5..cb7357a2 100644 --- a/OptimizelySwiftSDK.podspec +++ b/OptimizelySwiftSDK.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "OptimizelySwiftSDK" s.module_name = "Optimizely" - s.version = "5.3.0" + s.version = "5.4.0" s.summary = "Optimizely experiment framework for iOS/tvOS/watchOS" s.homepage = "https://docs.developers.optimizely.com/experimentation/v4.0.0-full-stack/docs" s.license = { :type => "Apache License, Version 2.0", :file => "LICENSE" } diff --git a/Sources/Utils/SDKVersion.swift b/Sources/Utils/SDKVersion.swift index ae90730e..2bc70eb6 100644 --- a/Sources/Utils/SDKVersion.swift +++ b/Sources/Utils/SDKVersion.swift @@ -17,4 +17,4 @@ /// Do not edit this field. /// - It is auto updated (Scripts/updated_version.sh) to reflect the current version /// - Do not put underscores in the name (Swiftlint can modify unexpectedly) -let OPTIMIZELYSDKVERSION = "5.3.0" +let OPTIMIZELYSDKVERSION = "5.4.0" From 984fa024bc24a56a5f7a12a18400f25d46470aa0 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Mon, 22 Jun 2026 14:32:55 -0700 Subject: [PATCH 3/8] [FSSDK-12804] update CHANGELOG categorization for swift v5.4.0 --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00baeb58..db70bdf9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,9 @@ See [Holdouts docs](https://support.optimizely.com/hc/en-us/articles/32370102322 - add localHoldouts to datafile for backward compatibility ([#638](https://github.com/optimizely/swift-sdk/pull/638)) - Revert local holdout feature gate logic ([#637](https://github.com/optimizely/swift-sdk/pull/637)) + +### Functionality Enhancement + - Block ODP identify event for single identifier ([#636](https://github.com/optimizely/swift-sdk/pull/636)) ## 5.3.0 From 2688da80e9f76a3eb020700323ca83a5a8b817ca Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Mon, 22 Jun 2026 15:28:39 -0700 Subject: [PATCH 4/8] [FSSDK-12804] bump VERSION in swift.yml and README CocoaPods ref to 5.4.0 --- .github/workflows/swift.yml | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index 7acd8a4f..bd243a65 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -17,7 +17,7 @@ on: description: release env: - VERSION: 5.3.0 + VERSION: 5.4.0 jobs: diff --git a/README.md b/README.md index 6bdcd0be..08862bf2 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ If you have a name conflict with other swift packages when you add the Optimizel #### CocoaPods 1. Add the following lines to the _Podfile_:
 ```use_frameworks!```
-```pod 'OptimizelySwiftSDK', '~> 5.3.0'```
+```pod 'OptimizelySwiftSDK', '~> 5.4.0'```
 
2. Run the following command:
``` pod install ```
From eb31b32509a15b22a0d4d7291b8dc779d63c3f05 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Mon, 22 Jun 2026 15:51:20 -0700 Subject: [PATCH 5/8] [FSSDK-12804] revert SDKVersion.swift change (file is auto-managed by CI) --- Sources/Utils/SDKVersion.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Utils/SDKVersion.swift b/Sources/Utils/SDKVersion.swift index 2bc70eb6..ae90730e 100644 --- a/Sources/Utils/SDKVersion.swift +++ b/Sources/Utils/SDKVersion.swift @@ -17,4 +17,4 @@ /// Do not edit this field. /// - It is auto updated (Scripts/updated_version.sh) to reflect the current version /// - Do not put underscores in the name (Swiftlint can modify unexpectedly) -let OPTIMIZELYSDKVERSION = "5.4.0" +let OPTIMIZELYSDKVERSION = "5.3.0" From d151d252d4c25121060da8345b2a8447f875533c Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Mon, 22 Jun 2026 15:52:59 -0700 Subject: [PATCH 6/8] [FSSDK-12804] update Holdouts docs URL in CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db70bdf9..4d721977 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ June 22, 2026 to be scoped to specific feature flags rather than applied globally. Local Holdouts let you measure the true incremental impact of individual features by holding out a subset of users from specific rollouts while still serving them other experiences. -See [Holdouts docs](https://support.optimizely.com/hc/en-us/articles/32370102322-Govern-Holdouts-in-Feature-Experimentation) for more information. +See [Holdouts docs](https://support.optimizely.com/hc/en-us/articles/38941939408269-Global-holdouts) for more information. - add localHoldouts to datafile for backward compatibility ([#638](https://github.com/optimizely/swift-sdk/pull/638)) - Revert local holdout feature gate logic ([#637](https://github.com/optimizely/swift-sdk/pull/637)) From 4c790f8d9d7060c62b263bcfc584983bf1bad555 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Mon, 22 Jun 2026 15:56:19 -0700 Subject: [PATCH 7/8] clean up --- .claude/settings.json | 8 ++++++++ CHANGELOG.md | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 .claude/settings.json diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 00000000..6211c990 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,8 @@ +{ + "permissions": { + "allow": [ + "Bash(xcodebuild -project bugbash.xcodeproj -list)", + "Bash(xcodebuild -project bugbash.xcodeproj -scheme bugbash -destination 'platform=iOS Simulator,name=iPhone 16' build)" + ] + } +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d721977..aa5749fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ Local Holdouts let you measure the true incremental impact of individual feature by holding out a subset of users from specific rollouts while still serving them other experiences. See [Holdouts docs](https://support.optimizely.com/hc/en-us/articles/38941939408269-Global-holdouts) for more information. -- add localHoldouts to datafile for backward compatibility ([#638](https://github.com/optimizely/swift-sdk/pull/638)) +- Add localHoldouts to datafile for backward compatibility ([#638](https://github.com/optimizely/swift-sdk/pull/638)) - Revert local holdout feature gate logic ([#637](https://github.com/optimizely/swift-sdk/pull/637)) ### Functionality Enhancement From 033739dcb74cb1e9d165466bc97aa5022a98ff0f Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Mon, 22 Jun 2026 16:28:37 -0700 Subject: [PATCH 8/8] [FSSDK-12804] revert podspec bump and remove stray .claude/settings.json Per updated Swift prep rule: .podspec is auto-updated by the prepare-to-release GitHub workflow during the manual release flow, not by prep. Also remove .claude/settings.json that was accidentally included on the release branch. --- .claude/settings.json | 8 -------- OptimizelySwiftSDK.podspec | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) delete mode 100644 .claude/settings.json diff --git a/.claude/settings.json b/.claude/settings.json deleted file mode 100644 index 6211c990..00000000 --- a/.claude/settings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "permissions": { - "allow": [ - "Bash(xcodebuild -project bugbash.xcodeproj -list)", - "Bash(xcodebuild -project bugbash.xcodeproj -scheme bugbash -destination 'platform=iOS Simulator,name=iPhone 16' build)" - ] - } -} diff --git a/OptimizelySwiftSDK.podspec b/OptimizelySwiftSDK.podspec index cb7357a2..086169e5 100644 --- a/OptimizelySwiftSDK.podspec +++ b/OptimizelySwiftSDK.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "OptimizelySwiftSDK" s.module_name = "Optimizely" - s.version = "5.4.0" + s.version = "5.3.0" s.summary = "Optimizely experiment framework for iOS/tvOS/watchOS" s.homepage = "https://docs.developers.optimizely.com/experimentation/v4.0.0-full-stack/docs" s.license = { :type => "Apache License, Version 2.0", :file => "LICENSE" }