All notable changes to this project will be documented in this file.
- Introduced a new
visitorCode
parameter toRemoteVisitorDataFilter
. This parameter determines whether to use thevisitorCode
from the most recent previous visit instead of the currentvisitorCode
. When enabled, this feature allows visitor exposure to be based on the retrievedvisitorCode
, facilitating cross-device reconciliation. Default value of the parameter istrue
. - Mapping identifier is now persistent, enabling the assigned variation for a visitor to be retained when merging sessions between anonymous and registered users.
- Stability and performance improvements.
- Introduced new evaluation methods for improved clarity and efficiency when working with the SDK:
- These methods replace the deprecated ones:
- A new version of the
isFeatureActive
method now includes an optionaltrack
parameter, which controls whether the assigned variation is tracked (default:true
).
- Enhanced logging:
- Introduced log levels:
none
error
warning
info
debug
- Added support for custom logger implementations.
- Introduced log levels:
- Enhanced tracking to consolidate multiple requests into a single one, combining visitor information and sending it once per interval.
- Added a new variation of the
flush(instant: Bool)
withinstant
parameter. If the parameter's value istrue
the visitor's data is tracked instantly. Otherwise, the visitor's data will be tracked with next tracking interval. Default value of the parameter isfalse
. - Added new configuration parameter
trackingIntervalMillisecond
(tracking_interval_millisecond
) toKameleoonClientConfig
and the configuration file, which is used to set interval for tracking requests. Default value is1000
milliseconds.
- Added the
visitorCode
a computed property, which returns the unique visitor code used withinKameleoonClient
.
- Resolved an issue where the
isFeatureActive
method would returnfalse
instead of throwingKameleoonError.sdkNotReady
orKameleoonError.Feature.notFound
errors.
- Stability and performance improvements.
The Likelihood to convert targeting condition is now available. Pre-loading the data is required using getRemoteVisitorData
with the kcs
parameter set to true
.
- Added a new optional parameter
isUniqueIdentifier
(is_unique_identifier
) that provides additional capabilities with cross-device experimentation for theKameleoonClientConfig
and external configuration file. - New targeting conditions are now available (some of them may require
getRemoteVisitorData
pre-loaded data)- Operating System
- IP Geolocation
- Kameleoon Segment
- Target Feature Flag
- Time since First Visit
- Time since Last Visit
- Number of Visits Today
- Total Number of Visits
- New or Returning Visitor
- New Kameleoon Data types were introduced:
- Changed parameters types for objects / methods:
trackConversion
:revenue
changed fromDouble?
toDouble
. Also,revenue
is now optional.Conversion
:revenue
changed fromDouble?
toDouble
, andnegative
changed fromBool?
toBool
.
- Stability and performance improvements.
- Added a privacy manifest file in accordance with the new Apple privacy policy.
- Fixed an issue where fields of the external
Types.Variation
class were hidden.
- Fixed a critical issue that could lead to application crashes during startup.
- Added support for additional Data API servers across the world for even faster network requests.
- Stability and performance improvements.
addData
method now accepts an array ofArray<KameleoonData>
. Variadic parameters are still supported.- Added method
getRemoteVisitorData
fetches the remote visitor's data (with an optional capability to add the data for the visitor): - Added a new parameter
completion
to some methods to replace the deprecatedcompletionHandler
. Thecompletion
parameter now represents theResult
value. Methods with thecompletion
parameter no longer throw errors directly. Instead, the.failure
case contains information about issues that occurred during the request. The change is related to the following methods:getVisitorWarehouseAudience(warehouseKey:customDataIndex:completion:)
instead ofgetVisitorWarehouseAudience(warehouseKey:customDataIndex:completionHandler:)
getRemoteData(key:completion:)
instead ofgetRemoteData(key:completionHandler:)
- The minimum supported iOS version has been increased to 12.0.
- Removed the
visitorCode
parameter from all methods that accepted it. You must now specify the visitor code during initialization. As a result, aKameleoonClient
instance only works for a single visitor: - Removed all methods and errors related to experiments:
- Methods:
triggerExperiment
getVariationAssociatedData
getExperimentList
- Error types:
experimentNotFound
notTargeted
notAllocated
siteCodeDisabled
- Methods:
- Removed the
activateFeature
method that was deprecated in 3.x versions. - Changed the following classes, methods, fields and exceptions:
- Methods:
- Renamed
getFeatureAllVariables
togetFeatureVariationVariables
.
- Renamed
- Fields:
- Renamed
value
tovalues
inCustomData.init
. - Renamed
refreshIntervalMinutes
torefreshIntervalMinute
inKameleoonClientConfig
. - Renamed
refresh_interval_minutes
torefresh_interval_minute
in the configuration file. - Renamed
sitecode
tositeCode
inKameleoonClientFactory.create
- Renamed
- Exceptions:
- Removed
KameleoonError.credentialsNotFound
(clientId
andclientSecret
credentials are now optional). - Renamed
KameleoonError.configurationInvalid
toKameleoonError.dataFileInvalid
. - Renamed
KameleoonError.visitorCodeNotValid
toKameleoonError.visitorCodeInvalid
. - Renamed
KameleoonError.featureFlagNotFound
toKameleoonError.Feature.notFound
. - Renamed
KameleoonError.variationNotFound
toKameleoonError.Feature.variationNotFound
. - Renamed
KameleoonError.variableNotFound
toKameleoonError.Feature.variableNotFound
.
- Removed
- Methods:
- Added new exception
KameleoonError.Feature.environmentDisabled
indicating that the feature flag is disabled for certain environments. The following methods can throw the new exception: - Added new exception
KameleoonError.siteCodeIsEmpty
for methodKameleoonClientFactory.create
indicating that the provided sitecode is empty. - Changed the data type of the
revenue
value fromFloat
toDouble
in two methods:Conversion
init methodtrackConversion
method
- Added
setLegalConsent
method to determine the types data Kameleoon includes in tracking requests. This helps you adhere to legal and regulatory requirements while responsibly managing visitor data. You can find more information in the Consent management policy. KameleoonClientFactory.create
method acceptsvisitorCode
as a parameter to use for all SDK methods. If you omit thevisitorCode
, the SDK generates a new visitor code value that it uses until you overwrite it. To overwrite avisitorCode
, provide it as a parameter explicitly to the method. The method throwsKameleoonError.visitorCodeInvalid
if the providedvisitorCode
is invalid (empty or longer than 255 characters).- Added new configuration fields to
KameleoonClientConfig
and external configuration file:dataExpirationIntervalMinute
(data_expiration_interval_minute
) specifies the time (in minutes) that the SDK retains the visitor's data on the device. By default, the TTL (time to live) isDate.distantFuture
.defaultTimeoutMillisecond
(default_timeout_millisecond
) designates the predefined timeout for network requests.
- Changed the
key
parameter in thegetRemoteData
method from required to optional. If you don't provide akey
parameter, the SDK uses thevisitorCode
specified during initialization.
- Added
getVisitorWarehouseAudience
method to retrieve all data associated with a visitor's warehouse audiences and adds it to the visitor.
- Changed the
KameleoonClientConfig
parametersclientId
andclientSecret
and the external configuration file parameters,client_id
andclient_secret
from required to optional. This means you can now successfully initialize a configuration without providing credentials. Previously, you would receive acredentialsNotFound
exception.
- Added new conditions for targeting:
- Visitor Code
- SDK Language
- Device
- Conversion
- Improved initialization process: The SDK no longer requires an explicit request for the data configuration during initialization. In the event of a failure, the SDK automatically uses the configuration stored in the device’s cache, where available, to ensure seamless operation.
- Improved the handling of internet connection loss for the Real-Time Streaming Architecture: We have resolved a critical issue related to the Real-Time Streaming Architecture. Previously, when the user’s device lost internet connection, the SDK was unable to receive configuration data until the next application launch. With this update, the SDK can now successfully retrieve the required configuration data once the connection is restored without restarting the application.
- Fixed an issue where the SDK might not successfully subscribe for real-time configuration updates.
- Minor improvements
- Minor bug fixing
- To enhance security, we have made it mandatory to include the client_id and client_secret fields in the Kameleoon configuration file. Alternatively, you can set these fields using the internal
KameleoonClientConfig
instance. By requiring these fields, we aim to ensure that only authorized parties have access to Kameleoon and its associated resources. - Added support of new feature flag rules:
getFeatureVariationKey
getFeatureVariable
activateFeature
->isFeatureActive
- Renaming of methods (old methods were removed)
obtainVariationAssociatedData
->getVariationAssociatedData
,obtainFeatureAllVariables
-> [getFeatureAllVariables
]https://developers.kameleoon.com/feature-management-and-experimentation/mobile-sdks/ios-sdk/#getfeatureallvariables),obtainExperimentList
->getExperimentList
,obtainFeatureList
->getFeatureList
,getActiveFeatureList
retrieveDataFromRemoteSource
->getRemoteData
,
- Changes in returned errors:
experimentConfigurationNotFound
->experimentNotFound
featureConfigurationNotFound
->featureFlagNotFound
notActivated
->notAllocated
variationConfigurationNotFound
->variationNotFound
- Added
variableNotFound
,configurationInvalid
- Added KameleoonClientConfig, it can be used as parameter during initialization of a client. Related to
KameleoonClientFactory.create
- Added possibility for
CustomData
to use variable argument list of values - Added support of
is among the values
operator for Custom Data
- Added method to obtain all variables for feature flag:
obtainFeatureAllVariables
- Minor bug fixing
- Added method to obtain a list of feature flags:
obtainFeatureList
- Added method to obtain a list of feature flags targeted for specified visitor code:
obtainFeatureListForVisitorCode
- Added method to obtain a list of experiments:
obtainExperimentList
- Added method to obtain a list of experiments targeted for specified visitor code:
obtainExperimentListForVisitorCode
- Added support for Experiment & Exclusive Campaign conditions. Related to
triggerExperiment
- Added KameleoonData
Device
data. Possible values are: PHONE, TABLET, DESKTOP. - Removed KameleoonData
Interest
- Fixed issue when tracking data wasn't sent with
activateFeature
,triggerExperiment
methods.
- Added a new method
updateConfigurationHandler
to handle events when configuration has updated data in real time. - Added update campaigns and feature flag configurations instantaneously with Real-Time Streaming Architecture:
documentation
orproduct updates
- Added method for retrieving data from remote source:
retrieveDataFromRemoteSource
- Remove
Data
alias toKameleoonData
. Related toaddData
- Added support of multi-environment for feature flags, Related to
activateFeature
,obtainFeatureVariable
- Added checking for status of site (Enable / Disable). Related to
activateFeature
,triggerExperiment
- Fixed issue with overlapping periods for scheduling. Related to
activateFeature
- Fixed issue with multiple adding CustomData with different values. Related to
addData
- Added scheduling functionality for
activateFeature
- Fixed a issue with segment conditions, when only the first condition was taken into account and others are ignored. Also fixed issue when
is higher than
andis lower than
had wrong result. Related toactivateFeature
andtriggerExperiment
- Fixed error with variation id for triggerExperiment for returning visitors
- Fixed when obtainFeatureVariable & obtainVariationAssociatedData throws wrong exception types
- Adding URI encoding for CustomData & PageView
- Improving SDK stability
- Added VisitorCodeTooLong exception when exceeding the limit of 255 chars
- Increased limitation for visitorCode to 255 chars
- Fix ObtainFeatureVariable method. Now it returns boolean, string, number and JSON object
- Improving SDK stability
- Fix activateFeature issue
- Added Kameleoon-Client header to tracking calls
- Fix empty targeting data
- Rename kameleoon factory, configurations and file names
- Rename kameleoon client
- Fix URL for data tracking
- Create new kameleoonClient SDK