From fc1f839d7b32a5c67f4fcd64845c368061c09ce8 Mon Sep 17 00:00:00 2001 From: Muzahidul Islam <129880873+muzahidul-opti@users.noreply.github.com> Date: Wed, 5 Feb 2025 21:53:29 +0600 Subject: [PATCH 1/9] Update swift.yml --- .github/workflows/swift.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index 1fc4011b..49d57b81 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -96,7 +96,7 @@ jobs: BRANCH: ${{ github.ref_name }} GITHUB_TOKEN: ${{ secrets.CI_USER_TOKEN }} COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }} - COCOAPODS_VERSION: '1.12.1' + COCOAPODS_VERSION: '1.15.2' run: | gem install cocoapods -v $COCOAPODS_VERSION Scripts/run_release.sh From 4d81f12dc67935514e589215a4d24a4bb0d8e339 Mon Sep 17 00:00:00 2001 From: muzahidul-opti Date: Wed, 28 May 2025 17:23:46 +0600 Subject: [PATCH 2/9] wip: add experirment id and variation id to notification payload --- Sources/Implementation/DecisionInfo.swift | 10 ++++++- Sources/Utils/Constants.swift | 2 ++ .../DecisionListenerTests_Datafile.swift | 27 ++++++++++++++++++- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/Sources/Implementation/DecisionInfo.swift b/Sources/Implementation/DecisionInfo.swift index 72c38c30..b2c60b4e 100644 --- a/Sources/Implementation/DecisionInfo.swift +++ b/Sources/Implementation/DecisionInfo.swift @@ -140,9 +140,17 @@ struct DecisionInfo { decisionInfo[Constants.DecisionInfoKeys.variationKey] = variation?.key ?? NSNull() // keep key in the map even with nil value decisionInfo[Constants.DecisionInfoKeys.ruleKey] = ruleKey ?? NSNull() // decisionInfo[Constants.DecisionInfoKeys.reasons] = reasons - decisionInfo[Constants.DecisionInfoKeys.decisionEventDispatched] = decisionEventDispatched } + decisionInfo[Constants.DecisionInfoKeys.decisionEventDispatched] = decisionEventDispatched + + if let expId = experiment?.id { + decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] = expId + } + + if let varId = variation?.id { + decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] = varId + } return decisionInfo } diff --git a/Sources/Utils/Constants.swift b/Sources/Utils/Constants.swift index f60f6fdc..100a2e6e 100644 --- a/Sources/Utils/Constants.swift +++ b/Sources/Utils/Constants.swift @@ -88,7 +88,9 @@ struct Constants { } struct ExperimentDecisionInfoKeys { + static let experimentId = "experimentId" static let experiment = "experimentKey" + static let variationId = "variationId" static let variation = "variationKey" } diff --git a/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift b/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift index 708f8217..85f25b65 100644 --- a/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift +++ b/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift @@ -37,12 +37,16 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? + var expId: String? + var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String + expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String + varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -56,6 +60,8 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(variation, "all_traffic_variation") XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_empty_conditions") XCTAssertEqual(notificationVariation, "all_traffic_variation") + XCTAssertEqual(expId, "10390977723") + XCTAssertEqual(varId, "10416523170") XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) } @@ -63,12 +69,18 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? + var expId: String? + var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String + expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String + varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String + expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String + varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -81,6 +93,8 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2") XCTAssertEqual(notificationVariation, nil) + XCTAssertEqual(expId, "10390977714") + XCTAssertEqual(varId, nil) XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) notificationCenter.clearAllNotificationListeners() } @@ -93,12 +107,16 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? + var expId: String? + var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String + expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String + varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -111,6 +129,8 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_empty_conditions") XCTAssertEqual(notificationVariation, "all_traffic_variation") XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) + XCTAssertEqual(expId, "10390977723") + XCTAssertEqual(varId, "10416523170") notificationCenter.clearAllNotificationListeners() } @@ -118,12 +138,15 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? - + var expId: String? + var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String + expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String + varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -133,6 +156,8 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2") XCTAssertEqual(notificationVariation, nil) + XCTAssertEqual(expId, "10390977714") + XCTAssertEqual(varId, nil) XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) notificationCenter.clearAllNotificationListeners() } From 08d797e75297ca676ae8b3ef47f369f45f301a6f Mon Sep 17 00:00:00 2001 From: muzahidul-opti Date: Wed, 28 May 2025 17:35:19 +0600 Subject: [PATCH 3/9] update doc for 5.1.1 --- .github/workflows/swift.yml | 2 +- CHANGELOG.md | 6 ++++++ README.md | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index 49d57b81..d5de5b7a 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -17,7 +17,7 @@ on: description: release env: - VERSION: 5.1.0 + VERSION: 5.1.1 jobs: diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c9af189..9f4a5b54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Optimizely Swift SDK Changelog +## 5.1.1 +May 28th, 2025 + +### Functionality Enhancement +* Add experiment id and variation id added into decision notification payload ([#589](https://github.com/optimizely/swift-sdk/pull/589)). + ## 5.1.0 February 4th, 2025 diff --git a/README.md b/README.md index 2c89721e..19355a2d 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.1.0'```
+```pod 'OptimizelySwiftSDK', '~> 5.1.1'```
 
2. Run the following command:
``` pod install ```
From 19fd965d1def1461b5092a656bb0595cab8fa12e Mon Sep 17 00:00:00 2001 From: muzahidul-opti Date: Wed, 28 May 2025 17:50:48 +0600 Subject: [PATCH 4/9] Revert "wip: add experirment id and variation id to notification payload" This reverts commit 4d81f12dc67935514e589215a4d24a4bb0d8e339. --- Sources/Implementation/DecisionInfo.swift | 10 +------ Sources/Utils/Constants.swift | 2 -- .../DecisionListenerTests_Datafile.swift | 27 +------------------ 3 files changed, 2 insertions(+), 37 deletions(-) diff --git a/Sources/Implementation/DecisionInfo.swift b/Sources/Implementation/DecisionInfo.swift index b2c60b4e..72c38c30 100644 --- a/Sources/Implementation/DecisionInfo.swift +++ b/Sources/Implementation/DecisionInfo.swift @@ -140,17 +140,9 @@ struct DecisionInfo { decisionInfo[Constants.DecisionInfoKeys.variationKey] = variation?.key ?? NSNull() // keep key in the map even with nil value decisionInfo[Constants.DecisionInfoKeys.ruleKey] = ruleKey ?? NSNull() // decisionInfo[Constants.DecisionInfoKeys.reasons] = reasons + decisionInfo[Constants.DecisionInfoKeys.decisionEventDispatched] = decisionEventDispatched } - decisionInfo[Constants.DecisionInfoKeys.decisionEventDispatched] = decisionEventDispatched - - if let expId = experiment?.id { - decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] = expId - } - - if let varId = variation?.id { - decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] = varId - } return decisionInfo } diff --git a/Sources/Utils/Constants.swift b/Sources/Utils/Constants.swift index 100a2e6e..f60f6fdc 100644 --- a/Sources/Utils/Constants.swift +++ b/Sources/Utils/Constants.swift @@ -88,9 +88,7 @@ struct Constants { } struct ExperimentDecisionInfoKeys { - static let experimentId = "experimentId" static let experiment = "experimentKey" - static let variationId = "variationId" static let variation = "variationKey" } diff --git a/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift b/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift index 85f25b65..708f8217 100644 --- a/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift +++ b/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift @@ -37,16 +37,12 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? - var expId: String? - var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String - expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String - varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -60,8 +56,6 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(variation, "all_traffic_variation") XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_empty_conditions") XCTAssertEqual(notificationVariation, "all_traffic_variation") - XCTAssertEqual(expId, "10390977723") - XCTAssertEqual(varId, "10416523170") XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) } @@ -69,18 +63,12 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? - var expId: String? - var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String - expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String - varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String - expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String - varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -93,8 +81,6 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2") XCTAssertEqual(notificationVariation, nil) - XCTAssertEqual(expId, "10390977714") - XCTAssertEqual(varId, nil) XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) notificationCenter.clearAllNotificationListeners() } @@ -107,16 +93,12 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? - var expId: String? - var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String - expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String - varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -129,8 +111,6 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_empty_conditions") XCTAssertEqual(notificationVariation, "all_traffic_variation") XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) - XCTAssertEqual(expId, "10390977723") - XCTAssertEqual(varId, "10416523170") notificationCenter.clearAllNotificationListeners() } @@ -138,15 +118,12 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? - var expId: String? - var varId: String? + let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String - expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String - varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -156,8 +133,6 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2") XCTAssertEqual(notificationVariation, nil) - XCTAssertEqual(expId, "10390977714") - XCTAssertEqual(varId, nil) XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) notificationCenter.clearAllNotificationListeners() } From 6c3e277e75500af05b3beb1fb0ff842f5e8db95c Mon Sep 17 00:00:00 2001 From: muzahidul-opti Date: Wed, 28 May 2025 18:12:09 +0600 Subject: [PATCH 5/9] add experiment and variation id to decision notification payload --- Sources/Implementation/DecisionInfo.swift | 10 ++++++- Sources/Utils/Constants.swift | 2 ++ .../DecisionListenerTests_Datafile.swift | 27 ++++++++++++++++++- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/Sources/Implementation/DecisionInfo.swift b/Sources/Implementation/DecisionInfo.swift index 72c38c30..b2c60b4e 100644 --- a/Sources/Implementation/DecisionInfo.swift +++ b/Sources/Implementation/DecisionInfo.swift @@ -140,9 +140,17 @@ struct DecisionInfo { decisionInfo[Constants.DecisionInfoKeys.variationKey] = variation?.key ?? NSNull() // keep key in the map even with nil value decisionInfo[Constants.DecisionInfoKeys.ruleKey] = ruleKey ?? NSNull() // decisionInfo[Constants.DecisionInfoKeys.reasons] = reasons - decisionInfo[Constants.DecisionInfoKeys.decisionEventDispatched] = decisionEventDispatched } + decisionInfo[Constants.DecisionInfoKeys.decisionEventDispatched] = decisionEventDispatched + + if let expId = experiment?.id { + decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] = expId + } + + if let varId = variation?.id { + decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] = varId + } return decisionInfo } diff --git a/Sources/Utils/Constants.swift b/Sources/Utils/Constants.swift index f60f6fdc..100a2e6e 100644 --- a/Sources/Utils/Constants.swift +++ b/Sources/Utils/Constants.swift @@ -88,7 +88,9 @@ struct Constants { } struct ExperimentDecisionInfoKeys { + static let experimentId = "experimentId" static let experiment = "experimentKey" + static let variationId = "variationId" static let variation = "variationKey" } diff --git a/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift b/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift index 708f8217..85f25b65 100644 --- a/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift +++ b/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift @@ -37,12 +37,16 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? + var expId: String? + var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String + expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String + varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -56,6 +60,8 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(variation, "all_traffic_variation") XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_empty_conditions") XCTAssertEqual(notificationVariation, "all_traffic_variation") + XCTAssertEqual(expId, "10390977723") + XCTAssertEqual(varId, "10416523170") XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) } @@ -63,12 +69,18 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? + var expId: String? + var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String + expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String + varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String + expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String + varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -81,6 +93,8 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2") XCTAssertEqual(notificationVariation, nil) + XCTAssertEqual(expId, "10390977714") + XCTAssertEqual(varId, nil) XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) notificationCenter.clearAllNotificationListeners() } @@ -93,12 +107,16 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? + var expId: String? + var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String + expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String + varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -111,6 +129,8 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_empty_conditions") XCTAssertEqual(notificationVariation, "all_traffic_variation") XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) + XCTAssertEqual(expId, "10390977723") + XCTAssertEqual(varId, "10416523170") notificationCenter.clearAllNotificationListeners() } @@ -118,12 +138,15 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? - + var expId: String? + var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String + expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String + varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -133,6 +156,8 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2") XCTAssertEqual(notificationVariation, nil) + XCTAssertEqual(expId, "10390977714") + XCTAssertEqual(varId, nil) XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) notificationCenter.clearAllNotificationListeners() } From b8455e5874f523b75a8367301e66257e13570b47 Mon Sep 17 00:00:00 2001 From: muzahidul-opti Date: Thu, 29 May 2025 17:00:29 +0600 Subject: [PATCH 6/9] update version --- OptimizelySwiftSDK.podspec | 2 +- Package.swift | 2 +- Sources/Utils/SDKVersion.swift | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/OptimizelySwiftSDK.podspec b/OptimizelySwiftSDK.podspec index 14d38f88..22790261 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.1.0" + s.version = "5.1.1" 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/Package.swift b/Package.swift index 22653f4e..24b0467a 100644 --- a/Package.swift +++ b/Package.swift @@ -24,5 +24,5 @@ let package = Package( resources: [.copy("Supporting Files/PrivacyInfo.xcprivacy")] ) ], - swiftLanguageVersions: [.v5, .version("5.9")] + swiftLanguageVersions: [.v5] ) diff --git a/Sources/Utils/SDKVersion.swift b/Sources/Utils/SDKVersion.swift index 1caaec32..298c7227 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.1.0" +let OPTIMIZELYSDKVERSION = "5.1.1" From 2f3b6ee0aea35789a118c8e0a9fc42174b30ea96 Mon Sep 17 00:00:00 2001 From: muzahidul-opti Date: Thu, 29 May 2025 21:26:44 +0600 Subject: [PATCH 7/9] Revert "update version" This reverts commit b8455e5874f523b75a8367301e66257e13570b47. --- OptimizelySwiftSDK.podspec | 2 +- Package.swift | 2 +- Sources/Utils/SDKVersion.swift | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/OptimizelySwiftSDK.podspec b/OptimizelySwiftSDK.podspec index 22790261..14d38f88 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.1.1" + s.version = "5.1.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/Package.swift b/Package.swift index 24b0467a..22653f4e 100644 --- a/Package.swift +++ b/Package.swift @@ -24,5 +24,5 @@ let package = Package( resources: [.copy("Supporting Files/PrivacyInfo.xcprivacy")] ) ], - swiftLanguageVersions: [.v5] + swiftLanguageVersions: [.v5, .version("5.9")] ) diff --git a/Sources/Utils/SDKVersion.swift b/Sources/Utils/SDKVersion.swift index 298c7227..1caaec32 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.1.1" +let OPTIMIZELYSDKVERSION = "5.1.0" From be6e381ca43f20ebab9769054a7d37f816db03e9 Mon Sep 17 00:00:00 2001 From: muzahidul-opti Date: Thu, 29 May 2025 21:27:33 +0600 Subject: [PATCH 8/9] Revert "add experiment and variation id to decision notification payload" This reverts commit 6c3e277e75500af05b3beb1fb0ff842f5e8db95c. --- Sources/Implementation/DecisionInfo.swift | 10 +------ Sources/Utils/Constants.swift | 2 -- .../DecisionListenerTests_Datafile.swift | 27 +------------------ 3 files changed, 2 insertions(+), 37 deletions(-) diff --git a/Sources/Implementation/DecisionInfo.swift b/Sources/Implementation/DecisionInfo.swift index b2c60b4e..72c38c30 100644 --- a/Sources/Implementation/DecisionInfo.swift +++ b/Sources/Implementation/DecisionInfo.swift @@ -140,17 +140,9 @@ struct DecisionInfo { decisionInfo[Constants.DecisionInfoKeys.variationKey] = variation?.key ?? NSNull() // keep key in the map even with nil value decisionInfo[Constants.DecisionInfoKeys.ruleKey] = ruleKey ?? NSNull() // decisionInfo[Constants.DecisionInfoKeys.reasons] = reasons + decisionInfo[Constants.DecisionInfoKeys.decisionEventDispatched] = decisionEventDispatched } - decisionInfo[Constants.DecisionInfoKeys.decisionEventDispatched] = decisionEventDispatched - - if let expId = experiment?.id { - decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] = expId - } - - if let varId = variation?.id { - decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] = varId - } return decisionInfo } diff --git a/Sources/Utils/Constants.swift b/Sources/Utils/Constants.swift index 100a2e6e..f60f6fdc 100644 --- a/Sources/Utils/Constants.swift +++ b/Sources/Utils/Constants.swift @@ -88,9 +88,7 @@ struct Constants { } struct ExperimentDecisionInfoKeys { - static let experimentId = "experimentId" static let experiment = "experimentKey" - static let variationId = "variationId" static let variation = "variationKey" } diff --git a/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift b/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift index 85f25b65..708f8217 100644 --- a/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift +++ b/Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift @@ -37,16 +37,12 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? - var expId: String? - var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String - expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String - varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -60,8 +56,6 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(variation, "all_traffic_variation") XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_empty_conditions") XCTAssertEqual(notificationVariation, "all_traffic_variation") - XCTAssertEqual(expId, "10390977723") - XCTAssertEqual(varId, "10416523170") XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) } @@ -69,18 +63,12 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? - var expId: String? - var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String - expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String - varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String - expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String - varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -93,8 +81,6 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2") XCTAssertEqual(notificationVariation, nil) - XCTAssertEqual(expId, "10390977714") - XCTAssertEqual(varId, nil) XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) notificationCenter.clearAllNotificationListeners() } @@ -107,16 +93,12 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? - var expId: String? - var varId: String? let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String - expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String - varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -129,8 +111,6 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_empty_conditions") XCTAssertEqual(notificationVariation, "all_traffic_variation") XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) - XCTAssertEqual(expId, "10390977723") - XCTAssertEqual(varId, "10416523170") notificationCenter.clearAllNotificationListeners() } @@ -138,15 +118,12 @@ class DecisionListenerTests_Datafile: XCTestCase { var notificationVariation: String? var notificationExperiment: String? var notificationType: String? - var expId: String? - var varId: String? + let exp = expectation(description: "x") _ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String - expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String - varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String notificationType = type exp.fulfill() }) @@ -156,8 +133,6 @@ class DecisionListenerTests_Datafile: XCTestCase { XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2") XCTAssertEqual(notificationVariation, nil) - XCTAssertEqual(expId, "10390977714") - XCTAssertEqual(varId, nil) XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue) notificationCenter.clearAllNotificationListeners() } From 5f9637e46cf798a5e09f368a28b3daa29ab49617 Mon Sep 17 00:00:00 2001 From: muzahidul-opti Date: Thu, 29 May 2025 21:31:26 +0600 Subject: [PATCH 9/9] Update supported version --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 22653f4e..24b0467a 100644 --- a/Package.swift +++ b/Package.swift @@ -24,5 +24,5 @@ let package = Package( resources: [.copy("Supporting Files/PrivacyInfo.xcprivacy")] ) ], - swiftLanguageVersions: [.v5, .version("5.9")] + swiftLanguageVersions: [.v5] )