Dev guideAPI Reference
Dev guideAPI ReferenceUser GuideGitHubNuGetDev CommunitySubmit a ticketLog In
GitHubNuGetDev CommunitySubmit a ticket

Update from older versions of the Swift SDK

Describes how to update from older versions of the Optimizely Full Stack (Legacy) Swift SDK to Optimizely Feature Experimentation.

This section provides code examples for how Optimizely recommends leveraging the new Decision and Event Tracking APIs. All existing Full Stack (Legacy) methods and implementation are still supported. See Optimizely Feature Experimentation - application & migration documentation for the latest updates.

Optimizely recommends adopting the new Decide, Decide All, and Track Event methods as a more flexible and easier-to-use replacement where you currently use isFeatureEnabled, getFeatureVariable, getAllFeatures, or Track calls within your implementation.

The following are examples of how to migrate the Full Stack (Legacy) methods to Feature Experimentation methods:

// -------------------------------
// Prereq for new methods: create a user
// ------------------------------
let attributes: [String: Any] = ["is_logged_in": true]
let user = optimizely.createUserContext(userId: "user_123", attributes: attributes)

// -------------------------------
// Is Feature Enabled 
// ------------------------------
// old method
let enabled = optimizely.isFeatureEnabled(featureKey: "flag_1", userId: "user_123", attributes: attributes)

// new method
let decision = user.decide(key: "flag_1")
let enabled = decision.enabled

// -------------------------------
// Activate & Get Variation 
// ------------------------------
// old method
let variationKey = try? optimizely.activate(experimentKey:"experiment_1",
                                            userId: "user_123",
                                            attributes: attributes)
// new method
let variationKey = decision.variationKey



// -------------------------------
// Get All Feature Variables 
// ------------------------------
// old method
let allVarValues = try? optimizelyClient.getAllFeatureVariables(featureKey: "flag_1",
                                                            userId: "user_123",) 
// new method
let allVarValues = decision.variables


// -------------------------------
// Get Enabled Features 
// ------------------------------
// old method
let enabledFlags = optimizely.getEnabledFeatures(userId: "user_123")

// new method
let decisions = user.decideAll(options: [.enabledFlagsOnly])
let enabledFlags = decisions.keys


// -------------------------------
// Track 
// ------------------------------
// old method
try? optimizely.track(eventKey: "my_purchase_event_key", 
											userId: "user_123", 
                      attributes: attributes, 
                      eventTags: ["purchase_count": 2])

// new method
try? user.trackEvent(eventKey: 'my_purchase_event_key', 
                     eventTags: ["purchase_count": 2])