Releases: launchdarkly/ios-client-sdk
[8.0.0] - 2022-12-07
The latest version of this SDK supports LaunchDarkly's new custom contexts feature. Contexts are an evolution of a previously-existing concept, "users." Contexts let you create targeting rules for feature flags based on a variety of different information, including attributes pertaining to users, organizations, devices, and more. You can even combine contexts to create "multi-contexts."
This feature is only available to members of LaunchDarkly's Early Access Program (EAP). If you're in the EAP, you can use contexts by updating your SDK to the latest version and, if applicable, updating your Relay Proxy. Outdated SDK versions do not support contexts, and will cause unpredictable flag evaluation behavior.
If you are not in the EAP, only use single contexts of kind "user", or continue to use the user type if available. If you try to create contexts, the context will be sent to LaunchDarkly, but any data not related to the user object will be ignored.
For detailed information about this version, please refer to the list below. For information on how to upgrade from the previous version, please read the migration guide for Swift or Objective-C.
Added:
- The type
LDContextdefines the new context model. - For all SDK methods that took an
LDUserparameter, there is now an overload that takes anLDContext.
Changed:
- The
secondaryattribute which existed inLDUseris no longer a supported feature. If you set an attribute with that name inLDContext, it will simply be a custom attribute like any other. - Analytics event data now uses a new JSON schema due to differences between the context model and the old user model.
- The SDK no longer adds
deviceandosvalues to the user attributes. Applications that wish to use device/OS information in feature flag rules must explicitly add such information.
Removed:
- Removed the
secondarymeta-attribute inLDUser. - The
aliasmethod no longer exists because alias events are not needed in the new context model. - The
autoAliasingOptOutandinlineUsersInEventsoptions no longer exist because they are not relevant in the new context model.
[7.1.0] - 2022-11-08
Added:
- Added Objective C bindings for ApplicationInfo.
[7.0.0] - 2022-10-12
Changed:
- Dropped support for older versions in accordance with the new Xcode 14 release.
[6.2.0] - 2022-09-01
Added:
- CI builds now include a cross-platform test suite implemented in https://github.com/launchdarkly/sdk-test-harness. This covers many test cases that are also implemented in unit tests, but may be extended in the future to ensure consistent behavior across SDKs in other areas.
- Introduced ApplicationInfo, for configuration of application metadata that may be used in LaunchDarkly analytics or other product features. This does not affect feature flag evaluations.
Changed:
- Updated LDSwiftEventSource to 2.0.0. We no longer bind to a static product; rather, we let the build determine static vs dynamic linking.
Fixed:
- Previously a deleted flag could be made available in the SDK if the deletion events were processed out of order. This is no longer the case.
[6.1.0] - 2022-05-17
Added
- Added the
LDUser.isAnonymousNullableproperty that allows treating theisAnonymousproperty as nullable.
Fixed
- Correctly track whether the
LDUser.isAnonymousproperty was set explicitly (or by not specifying a key). The variation result for flag rules targeting theanonymousproperty can differ depending on whether the property is set explicitly.
[6.0.0] - 2022-05-04
This major version has accompanying migration guides for Swift and Objective-C. Please see the guide for more information on updating to this version of the SDK, as the following is just a summary of the changes.
Note that Objective-C bridging types are prefixed by Objc, but that prefix is not exposed to code written in Objective-C. For example, changes listed to ObjcLDClient are changes to the class referred to as LDClient from within Objective-C.
Added
- Added the
LDValueclass to represent any data type that is allowed in JSON. This new type is used to provide more type safety when representing complex or non-statically determined data types. The SDK also provides the bridge typesObjcLDValueandObjcLDValueTypefor Objective-C interoperability. - Added the
UserAttributeclass which provides a less error-prone way to refer to user attribute names in configuration. - Added the type specific variation functions,
boolVariation,intVariation,doubleVariation,stringVariation, andjsonVariation, toLDClient. - Added the type specific detailed variation functions,
boolVariationDetail,intVariationDetail,doubleVariationDetail,stringVariationDetail, andjsonVariationDetail, toLDClient. - Added
jsonVariationandjsonVariationDetailtoObjcLDClient. These functions allow evaluating feature flags where the provideddefaultValueand the resulting variation can be any valid JSON data type. - Added
ObjcLDJSONEvaluationDetailfor retrieving the detailed evaluation information of arbitrary type flag variations. - Added
ObjcLDChangedFlagHandlertype alias for new non-type specific Objective-C flag observers.
Changed (API)
LDClient.track(key: data: metricValue:)no longerthrows.- The type of the
dataparameter ofLDClient.track(key: data: metricValue:)has changed fromAny?toLDValue?. ObjcLDClient.track(key: data:)andObjcLDClient.track(key: data: metricValue:)no longerthrows. In Objective-C this change means that thetrackfunctions no longer accept aerror:parameter.- The type of the
dataparameter ofObjcLDClient.track(key: data:)andObjcLDClient.track(key: data: metricValue)has changed fromAny?toObjLDValue?. In Objective-C this would be a change fromid _NullabletoLDValue * _Nullable. LDClient.allFlagsnow has the type[LDFlagKey: LDValue]?rather than[LDFlagKey: Any]?.ObjcLDClient.allFlagsnow has the type[String: ObjcLDValue]?rather than[String: Any]?. In Objective-C this would be a change fromNSDictionary<NSString*, id> * _NullabletoNSDictionary<NSString*, LDValue*> * _Nullable.- The type of the
LDUser.customdictionary, and the correspondingLDUser.initparameter has been changed from[String: Any]?to[String: LDValue]. - The type of the
ObjcLDUser.customproperty has been changed from[String: Any]?to[String: ObjcLDValue]. In Objective-C this would be a change fromNSDictionary<NSString*, id> * _NullabletoNSDictionary<NSString*, LDValue*> * _Nonnull. - The type of the
LDUser.privateAttributesproperty, and the correspondingLDUser.initparameter, have been changed from[String]?to[UserAttribute]. - The type of the
ObjcLDUser.privateAttributesproperty has been changed from[String]?to[String]. In Objective-C this would be a change fromNSArray<NSString*> * _NullabletoNSArray<NSString*> * _Nonnull. - The types of the properties
LDChangedFlag.oldValueandLDChangedFlag.newValuehave been changed fromAny?toLDValue. - The type of the
LDConfig.privateUserAttributesproperty has been changed from[String]?to[UserAttribute]. ObjcLDConfig.privateUserAttributesnow has the non-optional type[String]rather than[String]?. In Objective-C this would be a change fromNSArray<NSString*> * _NullabletoNSArray<NSString*> * _Nonnull.- The type of the
LDEvaluationDetail.reasonproperty has been changed from[String: Any]to[String: LDValue]. - The type of the
reasonproperty ofObjcLDBoolEvaluationDetail,ObjcLDIntegerEvaluationDetail,ObjcLDDoubleEvaluationDetail, andObjcLDStringEvaluationDetailhas been changed from[String: Any]?to[String: ObjcLDValue]?. In Objective-C this would be a change fromNSDictionary<NSString*, id> * _NullabletoNSDictionary<NSString*, LDValue*> * _Nullable.
Changed (behavioral)
- The
Equatableinstance forLDUserhas been changed to compare all user properties, rather than just thekeyproperty. - Using
"custom"as a private attribute name inLDConfig.privateUserAttributesorLDUser.privateAttributeswill no longer set allLDUsercustom attributes private. - The automatically set
deviceandoperatingSystemcustom attributes can now be set private. - SDK versions from 4.0.0 and less than 6.0.0 supported migration of cached flag data from any SDK version of at least 2.3.3. The 6.0.0 release only supports migration of cached flag data from SDK versions of at least 4.0.0.
Removed
- Removed
LDClient.variation(forKey: defaultValue:)andLDClient.variationDetail(forKey: defaultValue:)functions. Please use the new type-specific variation functions instead (e.g.LDClient.boolVariation(forKey: defaultValue:)). - Removed the
LDFlagValueConvertibleprotocol which was previously used to constrain the parameters and return types of the variation functions. LDErrorHandlerandLDClient.observeError(owner: handler:)have been removed. Please useConnectionInformationinstead.- Removed the
LDUser.init(userDictionary: )andObjcLDUser.init(userDictionary: )initializers, please use the explicit initializers instead. - Removed
LDUser.CodingKeys. To refer to user attributes, please useUserAttributeinstead. - Removed
LDUser.privatizableAttributesandObjcLDUser.privatizableAttributes. - Removed
ObjcLDUser.attributeCustom. - The
LDUser.deviceandLDUser.operatingSystemproperties, and the correspondingLDUser.initparameters have been removed. These fields will be included in theLDUser.customdictionary. - The
ObjcLDUser.deviceandObjcLDUser.operatingSystemproperties have been removed. These fields will be included in theObjcLDUser.customdictionary. - The
ObjcLDClientfunctions,arrayVariation,arrayVariationDetail,dictionaryVariation, anddictionaryVariationDetail, have been removed. Please useObjcLDClient.jsonVariationandObjcLDClient.jsonVariationDetailinstead. - The per-type instances of
ObjcLDChangedFlaghave been removed. Please use the base classObjcLDChangedFlag, which now providesoldValueandnewValueObjcLDValueproperties. The removed classes areObjcLDBoolChangedFlag,ObjcLDIntegerChangedFlag,ObjcLDDoubleChangedFlag,ObjcLDStringChangedFlag,ObjcLDArrayChangedFlag, andObjcLDDictionaryChangedFlag. - The classes
ObjcLDArrayEvaluationDetailandObjcLDDictionaryEvaluationDetailhave been removed. Please useObjcLDJSONEvaluationDetailinstead. - The type aliases,
ObjcLDBoolChangedFlagHandler,ObjcLDIntegerChangedFlagHandler,ObjcLDDoubleChangedFlagHandler,ObjcLDStringChangedFlagHandler,ObjcLDArrayChangedFlagHandler, andObjcLDDictionaryChangedFlagHandler, have been removed. Please useObjcLDChangedFlagHandlerinstead. - The
ObjcLDClientfunctions,observeBool,observeInteger,observeDouble,observeString,observeArray, andobserveDictionary, have been removed. Please use the non-type specificObjcLDClient.observe(key: owner: handler:)instead.
[5.4.5] - 2022-03-11
Fixed
- Fixed race condition in
LDSwiftEventSourcethat could cause a crash if the stream is explicitly stopped (such as whenidentifyis called) while the stream is waiting to reconnect.
[5.4.4] - 2022-01-19
Fixed
- Fixed memory leak when stream connections are terminated by updating
LDSwiftEventSourcedependency to 1.3.0. - The SDK would not allow additional fields on
deleteflag stream events. This has been updated to allow additional fields for improved future compatibility. - Improved internal
Throttlerimplementation to reduce concurrency concerns. - Removed unneeded
CartfiledefiningLDSwiftEventSourcedependency, which when bundled could lead to warning messages thatLDSwiftEventSourcedefinitions are implemented in multiple frameworks.
[5.4.3] - 2021-08-13
Fixed
- Fixed an issue where
304 NOT_MODIFIEDresponses to SDK polling mode requests would be considered error responses. This could cause the completion on aidentifyrequest to not complete, and gave erroneous connection information data and logging output. - Fixed a crash when attempting to cache flag data containing variation JSON values containing a JSON
nullvalue nested within a JSON array.
[5.4.2] - 2021-06-17
Fixed
- Avoid crash when
TimeIntervalconfiguration options are set to sufficiently large values. This was caused when converting these values to anIntvalue of milliseconds. (Thanks, @delannoyk!) - Update
Package.swiftto use SwiftPM tools version 5.2. This prevents test dependencies from being included transitively. (Thanks, @escakot!) - Update
Quicktest dependency to 3.1.2 to avoid build warnings and adopt security fixes. (#243) - Use
AnyObjectoverclassin protocol inheritance to avoid compiler warnings. (#247) - Improve CI to test against multiple supported Xcode and Swift language versions.
- Restored test suite compatibility with Xcode 11.4 and Swift 5.2.